MyBatis与Spring整合——通过官方文档进行最简单的整合

整合前先重新理下两个框架的基础的东西。
以前搭Hibernate那些,都是是自己看着别人已经搭好的视频,然后自己重新理了一次。这次Mybatis与Spring的整合。从最原始的官方文档开始搭起。要学的,是当这套东西没人搭过的时候,你自己一个人怎么搭起来。
包依赖用了maven,最后才放所有的包依赖吧。

MyBatis

MyBatis是什么,开源持久化框架。通过抽象jdbc模板代码提供简单的api交互简化持久层实现。
MyBatis的搭建了一下基础的东西还有折腾了一下注释和xml配置。
MyBatis实战——前身iBatis、基础环境搭建和如何"钓鱼" 和  MyBatis之resultMap的作用和xml配置折腾 

通过读取mybatis-config.xml,mybatis文件有相应的EmployeeMapper.xml(如果用的注释进行的映射,那么配置文件里面直接配置
带注释的接口类即可)EmployeeMapper映射了相应的JavaBean,通过SqlSessionFactory的实例化出来的SqlSession,执行对应方法,根据方法名EmployeeMapper.selectEmployee,回到EmployeeMapper.xml中找到和方法名相对应的id(注释方式的话找到接口类里面注释id对应的方法),根据sql语句,还有传入的参数,还有Bean,这几者的联系形成的映射,进行CURD操作。省去JDBC那些模板方法代码。

Spring

而Spring是什么,Spring也是开源框架。简化Java开发。主要功能是依赖注入和面向切面工程。
可以用JDBC的小例子来展示:参考Spring doc中的jdbc部分。
数据库先建了Employee的表

applicationContext.xml
[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/aop  
  5. http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  6. http://www.springframework.org/schema/beans  
  7. http://www.springframework.org/schema/beans/spring-beans.xsd">  
  8.     <bean id="dataSource"  
  9.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  10.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  11.         <property name="url" value="jdbc:mysql://localhost:3306/test" />  
  12.         <property name="username" value="root" />  
  13.         <property name="password" value="root" />  
  14.     </bean>  
  15.     <bean id="TestSpringJDBC" class="DAO.TestSpringJDBC">  
  16.         <property name="dataSource" ref="dataSource"/>  
  17.     </bean>  
  18. </beans>  

TestSpringJDBC.java
[java] view plain copy
  1. public class TestSpringJDBC {  
  2.     private JdbcTemplate jt;  
  3.   
  4.   
  5.     public void setDataSource(DataSource dataSource) {  
  6.         this.jt = new JdbcTemplate(dataSource);  
  7.     }  
  8.   
  9.   
  10.     public int get() {  
  11.         int rowCount = this.jt.queryForObject("select count(*) from employee", Integer.class);  
  12.         return rowCount;  
  13.     }  
  14.   
  15.   
  16.     public static void main(String[] args) {  
  17.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  18.         TestSpringJDBC t = ((TestSpringJDBC) context.getBean("TestSpringJDBC"));  
  19.         System.out.println("the number in employee"+t.get());  
  20.     }  
  21. }  

这里并没有看到JdbcTemplate在构造方法中传入了什么,但他确实就是实现了。具体就是Spring帮你注入了你xml配置中的dataSource。

AOP的话先放着不用看。


两者的整合

再回到Mybatis与Spring整合的官方介绍。http://www.mybatis.org/spring/zh/index.html

需要加入mybatis-spring-x.x.x.jar包,要和 Spring 一起使用 MyBatis,你需要在 Spring 应用上下文中定义至少两样东西:一个 SqlSessionFactory 和至少一个数据映射器类。之前只有Mybatis的时候是通过SqlSessionFactory的实例化出来的SqlSession。


像前面文章写MyBatis刚开始搭建的时候一样:
一个model:省略set和get方法
[java] view plain copy
  1. public class Employee {  
  2.     private int id;  
  3.     private String first_name;  
  4.     private String last_name;  
  5.     private int salary;  
  6. }  

一个Mapper:

[java] view plain copy
  1. public interface EmployeeMapper  
  2. {  
  3.     @Select("select * from employee where id = #{id}")  
  4.     Employee findEmployeeById(Integer a);  
  5. }  


applicationContext.xml变为:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/aop  
  5. http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  6. http://www.springframework.org/schema/beans  
  7. http://www.springframework.org/schema/beans/spring-beans.xsd">  
  8.   
  9.   
  10.     <bean id="dataSource"  
  11.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  12.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  13.         <property name="url" value="jdbc:mysql://localhost:3306/test" />  
  14.         <property name="username" value="root" />  
  15.         <property name="password" value="root" />  
  16.     </bean>  
  17.   
  18.   
  19.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  20.         <!-- datasource bean -->  
  21.         <property name="dataSource" ref="dataSource" />  
  22.     </bean>  
  23. </beans>  


后面一个具体的实现我稍微改了下代码:

[java] view plain copy
  1. public class TestSpring {  
  2.     private EmployeeMapper userMapper;  
  3.   
  4.   
  5.     public EmployeeMapper getUserMapper() {  
  6.         return userMapper;  
  7.     }  
  8.   
  9.   
  10.     public void setUserMapper(EmployeeMapper userMapper) {  
  11.         this.userMapper = userMapper;  
  12.     }  
  13.   
  14.   
  15.     public Employee findEmployeeByID(int userId) {  
  16.         return this.userMapper.findEmployeeById(userId);  
  17.     }  
  18. }  


是的,官方文档就在这里终止的,但是之前单独用Mybatis这样实现就可以了。
[java] view plain copy
  1. String configxml = "mybatis-config.xml";      
  2. InputStream is = null;      
  3. try {      
  4.     is = Resources.getResourceAsStream(configxml);      
  5. catch (IOException e) {      
  6.     e.printStackTrace();      
  7. }      
  8. SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);      
  9. SqlSession s = sf.openSession();      
  10. EmployeeMapper employeeMapper =  s.getMapper(EmployeeMapper.class);    
  11. Employee e =  employeeMapper.findEmployeeById(47);    
  12. System.out.println(e.getFirst_name());   

现在整合Spring要如何入手,这是要结合回之前写的JDBCTemplate的例子。
[html] view plain copy
  1. <bean id="TestSpringJDBC" class="DAO.TestSpringJDBC">  
  2.        <property name="dataSource" ref="dataSource"/>  
  3.    </bean>  

我们给TestSpringJDBC的JdbcTemplate变量传入具体的DataSource,
现在给TestSpring的userMapper传入具体的UserMapper。传入之前,我们先要注册这个Mapper,根据官方文档的关于Mapper注册的说明:

[html] view plain copy
  1. <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  2.   <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />  
  3.   <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  4. </bean>  

MapperFactoryBean处理SqlSession的创建和关闭,我们根据自己的例子改为:Mapper具体的实现类

[html] view plain copy
  1. <bean id="myuserMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  2.         <property name="mapperInterface" value="com.mybatis3.mappers.EmployeeMapper" />  
  3.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  4.     </bean>  

再把Mapper注入到TestSpring的userMapper中。

[html] view plain copy
  1. <bean id="test" class="DAO.TestSpring">  
  2.         <property name="userMapper">  
  3.             <ref bean="myuserMapper" />  
  4.         </property>  
  5.     </bean>  


TestSpring添加具体实现:
[java] view plain copy
  1. public static void main(String[] args) {  
  2.     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  3.     TestSpring t = ((TestSpring) context.getBean("test"));  
  4.     System.out.println(t.findEmployeeByID(45).getFirst_name());  
  5. }  

这时候拿到的TestSpring实例t里面的userMapper已经是注入了MapperFactoryBean。

现在重新理一下思路。SqlSessionFactory 需要一个数据源DataSource,可以看成是一个连接数据库的配置。所以我们配置了DataSoruce和sqlSessionFactory。


Spring与Mybatis的整合里面,虽然现在具体不知道MapperFactoryBean的具体实现,但是通过文档的第六章注入映射器知道SqlSession的创建和关闭交由它,还有创建的代理类实现了UserMapper接口,并且注入到应用程序中。
这就是我们为什么这样配置的一个思路。


最后通过整合Spring,我们用了3行代码做到单独用Mybatis时11行代码做到的东西。


maven的包依赖:

[html] view plain copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>ckc</groupId>  
  5.   <artifactId>Spring4Mybatis</artifactId>  
  6.   <packaging>war</packaging>  
  7.   <version>0.0.1-SNAPSHOT</version>  
  8.   <name>Spring4Mybatis Maven Webapp</name>  
  9.   <url>http://maven.apache.org</url>  
  10. <dependencies>  
  11.         <dependency>  
  12.             <groupId>junit</groupId>  
  13.             <artifactId>junit</artifactId>  
  14.             <version>4.11</version>  
  15.             <scope>test</scope>  
  16.         </dependency>  
  17.         <!-- https://mvnrepository.com/artifact/jstl/jstl -->  
  18.         <dependency>  
  19.             <groupId>jstl</groupId>  
  20.             <artifactId>jstl</artifactId>  
  21.             <version>1.1.2</version>  
  22.         </dependency>  
  23.         <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->  
  24.         <dependency>  
  25.             <groupId>commons-lang</groupId>  
  26.             <artifactId>commons-lang</artifactId>  
  27.             <version>1.0</version>  
  28.         </dependency>  
  29.         <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->  
  30.         <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->  
  31.         <dependency>  
  32.             <groupId>org.mockito</groupId>  
  33.             <artifactId>mockito-all</artifactId>  
  34.             <version>1.9.5</version>  
  35.         </dependency>  
  36.       
  37.         <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->  
  38.         <dependency>  
  39.             <groupId>org.slf4j</groupId>  
  40.             <artifactId>slf4j-api</artifactId>  
  41.             <version>1.7.21</version>  
  42.         </dependency>  
  43.         <!-- https://mvnrepository.com/artifact/log4j/log4j -->  
  44.         <dependency>  
  45.             <groupId>log4j</groupId>  
  46.             <artifactId>log4j</artifactId>  
  47.             <version>1.2.17</version>  
  48.         </dependency>  
  49.         <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->  
  50.         <dependency>  
  51.             <groupId>org.slf4j</groupId>  
  52.             <artifactId>slf4j-log4j12</artifactId>  
  53.             <version>1.7.21</version>  
  54.         </dependency>  
  55.   
  56.         <!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest-library -->  
  57.         <dependency>  
  58.             <groupId>org.hamcrest</groupId>  
  59.             <artifactId>hamcrest-library</artifactId>  
  60.             <version>1.2</version>  
  61.         </dependency>  
  62.         <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->  
  63.         <dependency>  
  64.             <groupId>org.apache.commons</groupId>  
  65.             <artifactId>commons-lang3</artifactId>  
  66.             <version>3.4</version>  
  67.         </dependency>  
  68.         <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->  
  69.         <dependency>  
  70.             <groupId>mysql</groupId>  
  71.             <artifactId>mysql-connector-java</artifactId>  
  72.             <version>5.1.34</version>  
  73.         </dependency>  
  74.         <dependency>  
  75.             <groupId>javax.servlet</groupId>  
  76.             <artifactId>javax.servlet-api</artifactId>  
  77.             <version>3.1.0</version>  
  78.             <scope>provided</scope>  
  79.         </dependency>  
  80.         <!-- https://mvnrepository.com/artifact/taglibs/standard -->  
  81.         <dependency>  
  82.             <groupId>taglibs</groupId>  
  83.             <artifactId>standard</artifactId>  
  84.             <version>1.1.2</version>  
  85.         </dependency>  
  86.         <dependency>  
  87.             <groupId>org.hibernate</groupId>  
  88.             <artifactId>hibernate-validator</artifactId>  
  89.             <version>4.2.0.Final</version>  
  90.         </dependency>  
  91.   
  92.         <dependency>  
  93.             <groupId>javax.validation</groupId>  
  94.             <artifactId>validation-api</artifactId>  
  95.             <version>1.0.0.GA</version>  
  96.         </dependency>  
  97.   
  98.         <dependency>  
  99.             <groupId>org.springframework</groupId>  
  100.             <artifactId>spring-jdbc</artifactId>  
  101.             <version>4.1.6.RELEASE</version>  
  102.         </dependency>  
  103.         <dependency>  
  104.             <groupId>org.springframework</groupId>  
  105.             <artifactId>spring-core</artifactId>  
  106.             <version>4.1.4.RELEASE</version>  
  107.         </dependency>  
  108.         <dependency>  
  109.             <groupId>org.springframework</groupId>  
  110.             <artifactId>spring-web</artifactId>  
  111.             <version>4.1.4.RELEASE</version>  
  112.         </dependency>  
  113.         <dependency>  
  114.             <groupId>org.springframework</groupId>  
  115.             <artifactId>spring-test</artifactId>  
  116.             <version>4.1.4.RELEASE</version>  
  117.         </dependency>  
  118.         <dependency>  
  119.             <groupId>org.springframework</groupId>  
  120.   
  121.             <artifactId>spring-webmvc</artifactId>  
  122.             <version>4.1.4.RELEASE</version>  
  123.         </dependency>  
  124.         <dependency>  
  125.             <groupId>org.springframework</groupId>  
  126.             <artifactId>spring-test</artifactId>  
  127.             <version>4.1.6.RELEASE</version>  
  128.         </dependency>  
  129.         <dependency>  
  130.             <groupId>aspectj</groupId>  
  131.             <artifactId>aspectjrt</artifactId>  
  132.             <version>1.5.4 </version>  
  133.         </dependency>  
  134.         <dependency>  
  135.             <groupId>aspectj</groupId>  
  136.             <artifactId>aspectjweaver</artifactId>  
  137.             <version>1.5.4 </version>  
  138.         </dependency>  
  139.         <dependency>  
  140.             <groupId>com.fasterxml.jackson.core</groupId>  
  141.             <artifactId>jackson-databind</artifactId>  
  142.             <version>2.4.0</version>  
  143.         </dependency>  
  144.         <dependency>  
  145.             <groupId>org.mybatis</groupId>  
  146.             <artifactId>mybatis</artifactId>  
  147.             <version>3.2.1</version>  
  148.         </dependency>  
  149.         <dependency>  
  150.             <groupId>net.rossillo.mvc.cache</groupId>  
  151.             <artifactId>spring-mvc-cache-control</artifactId>  
  152.             <version>1.1.1-RELEASE</version>  
  153.             <scope>compile</scope>  
  154.         </dependency>  
  155.         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->  
  156.         <dependency>  
  157.             <groupId>org.mybatis</groupId>  
  158.             <artifactId>mybatis-spring</artifactId>  
  159.             <version>1.2.2</version>  
  160.         </dependency>  
  161.           
  162.     </dependencies>  
  163.   <build>  
  164.     <finalName>Spring4Mybatis</finalName>  
  165.   </build>  
  166. </project>  

这次完全没看别人搭建的代码,看着官方文档加上自己的理解还有不断的试。写出了文档里面没有说明的
可以运行看到整合结果的代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值