Mybatis与Spring整合(CURD)

项目采用Maven构建,用Junit进行测试,数据库是Mysql,连接池是c3p0,未测试缓存部分

1、Maven的“pom.xml”文件

  1 <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/xsd/maven-4.0.0.xsd">
  2     <modelVersion>4.0.0</modelVersion>
  3     <groupId>com.mcs</groupId>
  4     <artifactId>mybatis04</artifactId>
  5     <version>0.0.1-SNAPSHOT</version>
  6 
  7     <properties>
  8         <!-- Generic properties -->
  9         <java.version>1.8</java.version>
 10         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 11         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 12         <!-- Custom properties -->
 13         <mybatis.version>3.3.0</mybatis.version>
 14     </properties>
 15 
 16     <dependencies>
 17         <!-- junit -->
 18         <dependency>
 19             <groupId>junit</groupId>
 20             <artifactId>junit</artifactId>
 21             <scope>test</scope>
 22         </dependency>
 23         <!-- log4j -->
 24         <dependency>
 25             <groupId>log4j</groupId>
 26             <artifactId>log4j</artifactId>
 27         </dependency>
 28         <!-- 数据库连接驱动 -->
 29         <dependency>
 30             <groupId>mysql</groupId>
 31             <artifactId>mysql-connector-java</artifactId>
 32         </dependency>
 33         <!-- c3p0 -->
 34         <dependency>
 35             <groupId>com.mchange</groupId>
 36             <artifactId>c3p0</artifactId>
 37         </dependency>
 38 
 39         <!-- spring -->
 40         <dependency>
 41             <groupId>org.springframework</groupId>
 42             <artifactId>spring-core</artifactId>
 43         </dependency>
 44         <dependency>
 45             <groupId>org.springframework</groupId>
 46             <artifactId>spring-context</artifactId>
 47         </dependency>
 48         <dependency>
 49             <groupId>org.springframework</groupId>
 50             <artifactId>spring-context-support</artifactId>
 51         </dependency>
 52         <dependency>
 53             <groupId>org.springframework</groupId>
 54             <artifactId>spring-orm</artifactId>
 55         </dependency>
 56         <dependency>
 57             <groupId>org.springframework</groupId>
 58             <artifactId>spring-webmvc</artifactId>
 59         </dependency>
 60         <dependency>
 61             <groupId>org.springframework</groupId>
 62             <artifactId>spring-tx</artifactId>
 63         </dependency>
 64         <dependency>
 65             <groupId>org.springframework</groupId>
 66             <artifactId>spring-jdbc</artifactId>
 67         </dependency>
 68         <dependency>
 69             <groupId>org.springframework</groupId>
 70             <artifactId>spring-aspects</artifactId>
 71         </dependency>
 72         <dependency>
 73             <groupId>org.springframework</groupId>
 74             <artifactId>spring-messaging</artifactId>
 75         </dependency>
 76         <dependency>
 77             <groupId>org.springframework</groupId>
 78             <artifactId>spring-test</artifactId>
 79         </dependency>
 80 
 81         <!-- apache commons -->
 82         <dependency>
 83             <groupId>commons-logging</groupId>
 84             <artifactId>commons-logging</artifactId>
 85         </dependency>
 86 
 87         <!-- mybatis -->
 88         <dependency>
 89             <groupId>org.mybatis</groupId>
 90             <artifactId>mybatis</artifactId>
 91             <version>${mybatis.version}</version>
 92         </dependency>
 93         <dependency>
 94             <groupId>org.mybatis</groupId>
 95             <artifactId>mybatis-spring</artifactId>
 96             <version>1.2.3</version>
 97         </dependency>
 98 
 99     </dependencies>
100 
101 
102     <dependencyManagement>
103         <dependencies>
104             <dependency>
105                 <groupId>io.spring.platform</groupId>
106                 <artifactId>platform-bom</artifactId>
107                 <version>2.0.0.RELEASE</version>
108                 <type>pom</type>
109                 <scope>import</scope>
110             </dependency>
111         </dependencies>
112     </dependencyManagement>
113 
114     <build>
115         <finalName>Mybatis</finalName>
116         <plugins>
117             <plugin>
118                 <groupId>org.apache.maven.plugins</groupId>
119                 <artifactId>maven-surefire-plugin</artifactId>
120                 <version>2.19</version>
121                 <configuration>
122                     <!-- Maven 跳过运行 Test 代码的配置 -->
123                     <skipTests>true</skipTests>
124                 </configuration>
125             </plugin>
126         </plugins>
127     </build>
128 </project>
View Code

2、配置文件

2.1、db.properties  

1 jdbc.driverClass = com.mysql.jdbc.Driver
2 jdbc.jdbcUrl = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
3 jdbc.user = root
4 jdbc.password = root
5 
6 c3p0.initialPoolSize = 5
7 c3p0.maxPoolSize = 100
View Code

2.2、spring-core.xml  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 3         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
 4 
 5     <!-- 配置自动扫描的包 -->
 6     <context:component-scan base-package="com.mcs">
 7         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
 8         <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
 9     </context:component-scan>
10     
11 </beans>
View Code

2.3、spring-mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
 3         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 4         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
 5         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
 6         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
 7     
 8     <!-- 加载数据库配置文件 -->
 9     <context:property-placeholder location="classpath:db.properties"/>
10     
11     <!-- 1、配置数据源 -->
12     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
13         <property name="user" value="${jdbc.user}"></property>
14         <property name="password" value="${jdbc.password}"></property>
15         <property name="driverClass" value="${jdbc.driverClass}"></property>
16         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
17         
18         <property name="initialPoolSize" value="${c3p0.initialPoolSize}"></property>
19         <property name="maxPoolSize" value="${c3p0.maxPoolSize}"></property>
20     </bean>
21     
22     <!-- 2、配置sqlSessionFactory -->
23     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
24         <!-- 加载数据源 -->
25         <property name="dataSource" ref="dataSource"></property>
26         <!-- 加载MyBatis配置文件 -->
27         <property name="configLocation" value="classpath:mybatis.xml"></property>
28     </bean>
29     
30     <!-- 3、配置Mapper文件自动扫描 -->
31     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
32         <property name="basePackage" value="com.mcs.dao" ></property>
33         <property name="sqlSessionFactoryBeanName"  value="sqlSessionFactory"></property>
34     </bean>
35     
36     <!-- 4、配置事务管理器 -->
37     <!-- MyBatis默认使用Spring JDBC的事务管理器 -->
38     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
39         <property name="dataSource" ref="dataSource"></property>
40     </bean>
41     
42     <!-- 5、拦截器方式配置事物 -->
43     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
44         <tx:attributes>
45             <tx:method name="add*" propagation="REQUIRED" />
46             <tx:method name="append*" propagation="REQUIRED" />
47             <tx:method name="save*" propagation="REQUIRED" />
48             <tx:method name="update*" propagation="REQUIRED" />
49             <tx:method name="modify*" propagation="REQUIRED" />
50             <tx:method name="edit*" propagation="REQUIRED" />
51             <tx:method name="delete*" propagation="REQUIRED" />
52             <tx:method name="remove*" propagation="REQUIRED" />
53             <tx:method name="init" propagation="REQUIRED" />
54             <tx:method name="delAndInit" propagation="REQUIRED" />
55 
56             <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
57             <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
58             <tx:method name="load*" propagation="SUPPORTS" read-only="true" />
59             <tx:method name="search*" propagation="SUPPORTS" read-only="true" />
60             <tx:method name="datagrid*" propagation="SUPPORTS" read-only="true" />
61 
62             <tx:method name="*" propagation="REQUIRED" />
63         </tx:attributes>
64     </tx:advice>
65     <aop:config>
66         <aop:pointcut id="transactionPointcut" expression="execution(* com.mcs.service..*Impl.*(..))" />
67         <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
68     </aop:config>
69 
70 </beans>
View Code

2.4、mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>        
 6     
 7     <!-- 全局的参数配置,如开启二级缓存等 -->    
 8     <settings>
 9         <!-- 配置延迟加载,按需加载对象属性 -->
10         <setting name="lazyLoadingEnabled" value="true"/>  
11         <setting name="aggressiveLazyLoading" value="false"/> 
12     </settings>
13     
14     <!-- 使用别名 -->
15     <typeAliases>
16         <!-- 为包下的所有文件设置别名,别名为类名,不分大小写 -->
17         <package name="com.mcs.entity"/>
18     </typeAliases>
19     
20 </configuration>
View Code

2.5、log4j.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 3 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 4     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
 5         <layout class="org.apache.log4j.PatternLayout">
 6             <param name="ConversionPattern" 
 7                 value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) 
" />
 8         </layout>
 9     </appender>
10     <logger name="java.sql">
11         <level value="debug" />
12     </logger>
13     <logger name="org.apache.ibatis">
14         <level value="debug" />
15     </logger>
16     <root>
17         <level value="debug" />
18         <appender-ref ref="STDOUT" />
19     </root>
20 </log4j:configuration>
View Code

3、数据库实体类

 1 package com.mcs.entity;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Department implements Serializable {
 6 
 7     private static final long serialVersionUID = 6706877732712610561L;
 8 
 9     private Integer id;
10 
11     private String name;
12 
13     private String telephone;
14 
15     private Integer managerId;
16 
17     private Integer parentId;
18 
19     public Integer getId() {
20         return id;
21     }
22 
23     public void setId(Integer id) {
24         this.id = id;
25     }
26 
27     public String getName() {
28         return name;
29     }
30 
31     public void setName(String name) {
32         this.name = name == null ? null : name.trim();
33     }
34 
35     public String getTelephone() {
36         return telephone;
37     }
38 
39     public void setTelephone(String telephone) {
40         this.telephone = telephone == null ? null : telephone.trim();
41     }
42 
43     public Integer getManagerId() {
44         return managerId;
45     }
46 
47     public void setManagerId(Integer managerId) {
48         this.managerId = managerId;
49     }
50 
51     public Integer getParentId() {
52         return parentId;
53     }
54 
55     public void setParentId(Integer parentId) {
56         this.parentId = parentId;
57     }
58 
59     @Override
60     public String toString() {
61         return "Department [id=" + id + ", name=" + name + ", telephone=" + telephone + ", managerId=" + managerId
62                 + ", parentId=" + parentId + "]";
63     }
64     
65     
66 }
View Code

4、Mapper.xml文件与对应的接口

4.1、DepartmentMapper.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.mcs.dao.DepartmentMapper">
 4 
 5     <resultMap id="departmentResultMap" type="Department">
 6         <id column="id" property="id" jdbcType="INTEGER" />
 7         <result column="name" property="name" jdbcType="VARCHAR" />
 8         <result column="telephone" property="telephone" jdbcType="VARCHAR" />
 9         <result column="manager_id" property="managerId" jdbcType="INTEGER" />
10         <result column="parent_id" property="parentId" jdbcType="INTEGER" />
11     </resultMap>
12 
13     <sql id="Base_Column_List">
14         id, name, telephone, manager_id, parent_id
15     </sql>
16 
17     <select id="findById" parameterType="Integer" resultMap ="departmentResultMap">
18         select * from t_department where id = #{id}
19     </select>
20 
21     <select id="findAll" resultMap="departmentResultMap">
22         select * from t_department
23     </select>
24 
25     <select id="findDetails" parameterType="Integer" resultMap="departmentResultMap">
26         select * from t_department where parent_id = #{value}
27     </select>
28 
29 
30     <insert id="add" parameterType="com.mcs.entity.Department">
31         <!-- 将Insert插入的数据的主键返回到User对象中,只限Mysql的自增长的Key -->
32         <selectKey keyProperty="id" order="AFTER" resultType="int">
33             SELECT LAST_INSERT_ID()
34         </selectKey>
35         
36         insert into t_department
37             (name, telephone, manager_id, parent_id)
38         values
39             (#{name}, #{telephone}, #{managerId}, #{parentId})
40     </insert>
41     
42     <!-- 
43     新增获取自增Key的另外一种方式
44     <insert id="add"  keyColumn="id" keyProperty="id" useGeneratedKeys="true"  parameterType="com.mcs.entity.Department">
45         insert into t_department
46             (name, telephone, manager_id, parent_id)
47         values
48             (#{name}, #{telephone}, #{managerId}, #{parentId})
49     </insert>
50      -->
51 
52     <update id="updateById" parameterType="com.mcs.entity.Department">
53         update t_department
54         set name = #{name},
55         telephone = #{telephone},
56         manager_id = #{managerId},
57         parent_id = #{parentId}
58         where id = #{id}
59     </update>
60 
61     <delete id="deleteById" parameterType="Integer">
62         delete from t_department where id = #{id}
63     </delete>
64 
65 </mapper>
View Code

4.2、DepartmentMapper.java

 1 package com.mcs.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.mcs.entity.Department;
 6 
 7 public interface DepartmentMapper {
 8 
 9     public void add(Department department) throws Exception;
10 
11     public void updateById(Department department) throws Exception;
12 
13     public void deleteById(Integer id) throws Exception;
14 
15     public Department findById(Integer id) throws Exception;
16 
17     public List<Department> findAll() throws Exception;
18 
19     public List<Department> findDetails(Integer parentId) throws Exception;
20 
21 
22 }
View Code

5、Service层代码

5.1、DepartmentService.java

 1 package com.mcs.service;
 2 
 3 import java.util.List;
 4 
 5 import com.mcs.entity.Department;
 6 
 7 public interface DepartmentService {
 8     public Department add(Department department) throws Exception;
 9 
10     public void updateById(Integer id, Department department) throws Exception;
11 
12     public void deleteById(Integer id) throws Exception;
13 
14     public Department findById(Integer id) throws Exception;
15 
16     public List<Department> findAll() throws Exception;
17 
18     public List<Department> findDetails(Integer parentId) throws Exception;
19 
20 }
View Code

5.2、DepartmentServiceImpl.java

 1 package com.mcs.service.impl;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import org.springframework.beans.BeanUtils;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Service;
 9 
10 import com.mcs.dao.DepartmentMapper;
11 import com.mcs.entity.Department;
12 import com.mcs.service.DepartmentService;
13 
14 @Service("departmentService")
15 public class DepartmentServiceImpl implements DepartmentService {
16     
17     @Autowired
18     private DepartmentMapper departmentMapper;
19 
20     public Department add(Department department) throws Exception {
21         departmentMapper.add(department);
22         return department;
23     }
24 
25     public void updateById(Integer id, Department department) throws Exception {
26         Department d = departmentMapper.findById(id);
27         BeanUtils.copyProperties(department, d);
28         departmentMapper.updateById(d);
29     }
30 
31     public void deleteById(Integer id) throws Exception {
32         departmentMapper.deleteById(id);
33     }
34 
35     public Department findById(Integer id) throws Exception {
36         return departmentMapper.findById(id);
37     }
38 
39     public List<Department> findAll() throws Exception {
40         List<Department> departments = new ArrayList<Department>();
41         departments = departmentMapper.findAll();
42         return departments;
43     }
44 
45     public List<Department> findDetails(Integer parentId) throws Exception {
46         List<Department> departments = new ArrayList<Department>();
47         departments = departmentMapper.findDetails(parentId);
48         return departments;
49     }
50 
51 
52 }
View Code

6、测试代码TestDepartmentService.java

 1 package com.mcs.test;
 2 
 3 import java.util.List;
 4 
 5 import org.apache.log4j.Logger;
 6 import org.junit.Test;
 7 import org.junit.runner.RunWith;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 import org.springframework.test.context.ContextConfiguration;
10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
11 
12 import com.mcs.entity.Department;
13 import com.mcs.service.DepartmentService;
14 
15 @RunWith(SpringJUnit4ClassRunner.class)
16 @ContextConfiguration(locations = { "classpath:spring-core.xml", "classpath:spring-mybatis.xml" })
17 public class TestDepartmentService {
18     /**
19      * Logger for this class
20      */
21     private static final Logger logger = Logger.getLogger(TestDepartmentService.class);
22     
23     @Autowired
24     private DepartmentService departmentService;
25 
26     @Test
27     public void test() throws Exception {
28 
29     }
30     
31     @Test
32     public void testFindById() throws Exception {
33         Department department = departmentService.findById(3);
34         logger.debug(department);
35     }
36     
37     @Test
38     public void testAdd() throws Exception {
39         Department department = new Department();
40         department.setName("行政部");
41         department.setTelephone("021-86868686");
42         department.setParentId(2);
43         
44         department = departmentService.add(department);
45         logger.debug(department);
46     }
47     
48     @Test
49     public void testUpdateById() throws Exception {
50         Department department = departmentService.findById(14);
51         
52         department.setTelephone("010-66668888");
53         
54         departmentService.updateById(14, department);
55         logger.debug("部门更新成功!");
56     }
57     
58     @Test
59     public void testDeleteById() throws Exception {
60         departmentService.deleteById(15);
61     } 
62     
63     @Test
64     public void testFindAll() throws Exception {
65         List<Department> departments = departmentService.findAll();
66         
67         logger.debug(departments);
68     } 
69     
70     @Test
71     public void testFindDetails() throws Exception {
72         List<Department> departments = departmentService.findDetails(1);
73         
74         logger.debug(departments);
75     } 
76     
77     
78 }
View Code
原文地址:https://www.cnblogs.com/maocs/p/5045924.html