创建环境

  • 系统:macOS
  • Java:1.8 
  • 软件:eclipse,maven,mysql

创建步骤

  本例:创建一个Maven项目(SpringMVC+Spring+Mybatis),页面上展示员工列表(页面发起请求-访问web项目-查询数据库)

  创建数据库

  1、创建数据库和表,如下:

    

    创建sql如下:

 CREATE DATABASE test_mybatis;
USE test_mybatis; -- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`dept_id` int(11) DEFAULT NULL COMMENT '部门ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of employee
-- ----------------------------
BEGIN;
INSERT INTO `employee` VALUES (1, '大白', '', 'dabai@163.com', 1);
INSERT INTO `employee` VALUES (2, '小明', '', 'xiaoming@163.com', 1);
INSERT INTO `employee` VALUES (3, '小红', '', 'xiaohong@163.com', 1);
COMMIT;

sql文件

  创建web项目

    1、创建一个Maven Web项目,可以参照:【Maven】Eclipse 使用Maven创建Java Web项目

      

    2、编辑pom文件,添加SpringMVC+Spring+Mybatis的相关依赖

 <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hd</groupId>
<artifactId>test-spring-mybatis</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<url>http://maven.apache.org</url> <!-- 定义maven变量 -->
<properties>
<!-- spring -->
<spring.version>5.1.4.RELEASE</spring.version> <!-- Mybatis -->
<mybatis.version>3.5.0</mybatis.version>
<!-- Mybatis 整合 Spring -->
<mybatis-spring.version>2.0.0</mybatis-spring.version> <!-- mysql -->
<mysql.version>8.0.13</mysql.version> <!-- c3p0 连接池 -->
<c3p0.version>0.9.5.4</c3p0.version> <!-- logback -->
<slf4j-api.version>1.7.5</slf4j-api.version>
<logback.version>0.9.30</logback.version> <!-- Servlet -->
<servlet.version>3.0.1</servlet.version>
<jsp-api.version>2.2</jsp-api.version> <!-- jstl -->
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version> <!-- test junit -->
<junit.version>3.8.1</junit.version> <!-- jdk -->
<jdk.version>1.8</jdk.version>
<maven.compiler.plugin.version>2.3.2</maven.compiler.plugin.version>
</properties> <dependencies> <!-- Spring IOC 核心容器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Spring AOP 切面 模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Spring WEB MVC 模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Spring 事物 模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Spring ORM 对象关系映射 模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Spring JDBC 模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency> <!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency> <!-- Mybatis 整合 Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency> <!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency> <!-- c3p0 连接池 -->
<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency> <!-- logback -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
<type>jar</type>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<type>jar</type>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency> <!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency> <!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency> <dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency> <!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency> </dependencies> <build>
<plugins>
<!-- define the project compile level -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
<finalName>test_spring_mybatis</finalName>
</build>
</project>

pom.xml

    3、编辑web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>test_spring_mybatis</display-name> <!--指定Spring的配置在文件所在的目录,默认配置在WEB-INF目录下-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param> <!-- Spring配置:needed for ContextLoaderListener -->
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- Spring MVC配置 -->
<!-- The front controller of this Spring Web application, responsible for
handling all application requests -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- 中文过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

    4、在src/main/resources,新建一个spring-mvc.xml的配置文件,进行Spring-MVC相关配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--SpringMVC只是控制网站跳转逻辑 -->
<!-- 只扫描控制器 -->
<context:component-scan base-package="com.test.mybatis" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean> <!-- 默认的注解映射的支持 -->
<mvc:annotation-driven></mvc:annotation-driven> <!-- 对静态资源文件的访问 -->
<mvc:default-servlet-handler/> </beans>

    5、在src/main/resources,新建一个spring-context.xml的配置文件,进行Spring相关配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- Sprin望管理所有的业务逻辑组件等 -->
<context:component-scan base-package="com.test.mybatis">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan> <!-- 导入spring整合mybatis配置文件 -->
<import resource="classpath:spring-mybatis.xml" />
</beans>

    6、在src/main/resources,新建一个spring-mybatis.xml的配置文件,进行Spring与Mybatis整合相关配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 引入数据库的配置文件 -->
<context:property-placeholder location="classpath:dbconfig.properties" /> <!-- 数据源:Spring用来控制业务逻辑。数据源、事务控制、aop -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- spring事务管理 -->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 开启基于注解的事务 -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/> <!--
整合mybatis
目的:1、spring管理所有组件。mapper的实现类。
service==>Dao @Autowired:自动注入mapper;
2、spring用来管理事务,spring声明式事务
-->
<!--创建出SqlSessionFactory对象 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- configLocation指定全局配置文件的位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!--mapperLocations: 指定mapper文件的位置-->
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
</bean> <!--配置一个可以进行批量执行的sqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"></constructor-arg>
<constructor-arg name="executorType" value="BATCH"></constructor-arg>
</bean> <!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入;
base-package:指定mapper接口的包名
-->
<mybatis-spring:scan base-package="com.test.mybatis.dao"/> </beans>

    7、在src/main/resources,新建一个mybatis-config.xml的配置文件,相当于mybatis的全局配置文件,进行Mybatis相关配置

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
2、settings包含含多重要的设置项
setting:用来设置每一个设置项
name:设置项名字
values:设置项取值
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/> <!--显示的指定每个我们需要更改的配置的值,即使他是默认的。防止版本更新带来的问题 -->
<!-- <setting name="lazyloadingenabled" value="true"/>
<setting name="aggressivelazyloading" value="false"/> --> <!-- 设置二级缓存,默认是true -->
<setting name="cacheEnabled" value="true"/>
</settings> </configuration>

    8、在src/main/resources,新建一个dbconfig.properties的配置文件,配置数据库连接的相关信息

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/test_mybatis?allowPublicKeyRetrieval=true
jdbc.username = admin
jdbc.password = 123456

  代码编写

    1、在src/main/java的com.test.mybatis.controller,新建一个类TestController.java

 package com.test.mybatis.controller;

 import java.util.List;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.test.mybatis.pojo.Employee;
import com.test.mybatis.service.EmployeeService; @Controller
public class TestController { @Autowired
EmployeeService employeeService; @RequestMapping("/getEmps")
public String emps(Map<String,Object> map){
List<Employee> emps = employeeService.getEmps();
System.out.println(emps.size());
map.put("allEmps", emps);
return "list";
} }

    2、在src/main/java的com.test.mybatis.service,新建一个类EmployeeService.java

 package com.test.mybatis.service;

 import java.util.List;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.test.mybatis.dao.EmployeeMapper;
import com.test.mybatis.pojo.Employee; @Service
@Transactional
public class EmployeeService { @Autowired
private EmployeeMapper employeeMapper; public List<Employee> getEmps() {
return employeeMapper.getEmployee();
} }

    3、在src/main/java的com.test.mybatis.dao,新建一个类EmployeeMapper.java

package com.test.mybatis.dao;

import java.util.List;
import java.util.Map; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository; import com.test.mybatis.pojo.Employee; @Repository
public interface EmployeeMapper { public List<Employee> getEmployee(); }

    4、在src/main/java的com.test.mybatis.pojo,新建一个类Employee.java

 package com.test.mybatis.pojo;

 import java.io.Serializable;

 public class Employee implements Serializable{

     private Integer id;
private String lastName;
private String gender;
private String email; public Employee() {
// TODO Auto-generated constructor stub
} public Employee(String lastName, String gender, String email) {
super();
this.lastName = lastName;
this.gender = gender;
this.email = email;
} public Employee(Integer id, String lastName, String gender, String email) {
super();
this.id = id;
this.lastName = lastName;
this.gender = gender;
this.email = email;
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + "]";
} }

Employee.java

    5、在src/main/resources/mybatis/mapper,新增EmployeeMapper.xml文件

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名称空间 id:唯一标识 resultType:返回值类型 #{id}:从传过来的参数中取出id值 -->
<mapper namespace="com.test.mybatis.dao.EmployeeMapper">
<!--
<cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024"></cache>
-->
<select id="getEmployee"
resultType="com.test.mybatis.pojo.Employee">
select id, last_name lastName, gender, email from employee
</select> </mapper> 

    6、编辑首页index.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html> <body>
<h2>Hello World!</h2>
<a href="getEmps">获取员工列表</a>
</body>
</html>

    7、在webapp/WEB-INF/pages,中新增用户列表页list.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
员工列表
<table>
<tr>
<th>id</th>
<th>lastName</th>
<th>gender</th>
<th>email</th>
</tr>
<c:forEach items="${allEmps }" var="emp">
<tr>
<td>${emp.id }</td>
<td>${emp.lastName }</td>
<td>${emp.gender }</td>
<td>${emp.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

  测试

    项目最终的目录结构

      

    1、启动web项目

    2、在浏览器中访问,地址:localhost:8080/test_spring_mybatis,点击员工列表

      

最新文章

  1. Ubuntu 16.04下Linux驱动编写第一步
  2. jsoup Cookbook(中文版)--爬虫(java)
  3. Problem 1274 - 可怜的lpx
  4. Axis2与Web项目整合
  5. Maya QT interfaces in a class
  6. codility上的问题(15) Xi 2012
  7. python 创建列表和向列表添加元素方法
  8. Office Web Add-in的技术原理和开发常见问题剖析
  9. Python随笔,day1
  10. nginx session 配置失效解决
  11. linux命令大全(自己慢慢看)
  12. sass报 error (Line XX: Invalid GBK character &quot;\xE4&quot;) 的解决办法
  13. PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press &ldquo;Fix&rdquo; to edit your project configuration.
  14. python 钉钉机器人发送消息
  15. What is a Back Order
  16. centos7安装postgres-10
  17. 07-border(边框)
  18. UVa 10635 Prince and Princess - 动态规划
  19. 学习技巧-如何在IBM官网寻找学习资料
  20. .net提供的5种request-response方法一

热门文章

  1. 行为型模式(三) 迭代器模式(Iterator)
  2. 关于Djiango中 前端多对多字段点(,)的显示问题
  3. [INS-07003] 访问 BeanStore 时出现意外错误
  4. 阿里druid数据源配置及数据库密码加密
  5. 【JQuery】操作前端控件知识笔记
  6. zabbix sender
  7. C# 异常 抛异常的时候 同时抛出 传入的参数
  8. PHPStorm启动问题--Failed to load JVM DLL
  9. 关于css3属性filter
  10. 洛谷 P4377 [USACO18OPEN]Talent Show + 分数规划