回顾MyBatis
MyBatis的文件结构
编写工具数据库连接池工具
1 | package com.asher.utils; |
编写pojo实体类
1 | package com.asher.pojo; |
实现mybatis的配置文件
1 |
|
编写UserDao接口
1 | package com.asher.dao; |
编写接口对应的Mapper映射问件
1 |
|
测试
1 | ackage com.asher; |
MyBatis-Spring学习
引入Spring之前需要了解mybatis-spring包中的一些重要类。
http://www.mybatis.org/spring/zh/index.html
什么是Mybatis-Spring?
MyBatis-Spring会帮助我们把Mybatis的代码无缝整合到Spring中。
基础知识学习
在开始使用 MyBatis-Spring 之前,你需要先熟悉 Spring 和 MyBatis 这两个框架和有关它们的术语。这很重要,以上是对应的两个版本。
如果使用Maven作为构造工具,仅仅需要在pom.xml中加入一下代码即可以:
1 | <dependency> |
要和Spring一起使用Mybatis至少在Spring应用上下文中定义两样东西:一个SqlSessionFactory和一个数据映射器:mapperLocations
SqlSessionFactory有一个唯一的必要属性:用于 JDBC 的 DataSource。这可以是任意的 DataSource 对象,它的配置方法和其它 Spring 数据库连接是一样的。
一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是 < settings> 或 < typeAliases>元素。
mapperLocations用于映射Mapper接口实现SQL语句
1 | <!-- 关联MyBatis--> |
注意:
SqlSessionFactory需要一个 DataSource(数据源)。这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。
在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。
在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭 session。
这个配置文件并不需要是一个完整的 MyBatis 配置。确切地说,任何环境配置(
),数据源( )和 MyBatis 的事务管理器( )都会被忽略。SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值。 模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是用 SqlSessionTemplate 来替换 MyBatis 默认的 DefaultSqlSession 实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。
1 | <!-- 方式一 --> |
现在,这个 bean 就可以直接注入到你的 DAO bean 中了。你需要在你的 bean 中添加一个 SqlSession 属性,就像下面这样:
1 | public class UserDaoImpl02 implements UserMapper { |
按下面这样,注入 SqlSessionTemplate:
1 | <!-- 注入sqlSession,用sqlSession获取getMapper--> |
以上是整合Spring和Mybatis的理论,主要代码实现如下。
整合方式
整合方式不同主要区别在于sqlSessionFactory和sqlSession获取的方式不一样,最最主要使用的是方式三,简单,使用方便,只要配置一个地方,方式一二配置的方式不一样,方法是一样的。
方式一:使用的是注册sqlSessionTemplate,关联sqlSessionFactory,然后把sqlSession注入到Dao接口的实现类。
方式二:使用的是dao继承Support类,直接利用getSeeion()获得,不需要管理sqlSession-Template,对事务的支持更加友好。
方式三:主要是直接配置接口uerMapper获取sqlSession和关联sqlSessionFactory,把接口和sqlSeeionFcatory直接注入到MapperFactoryBean中,这样dao中只要注入userMapper,就能直接调用接口的方法。
整合方式一
1、引入Spring配置文件beans.xml
1 |
|
2、配置数据源替换mybaits的数据源,编写数据源配置db.properties
1 | com.mysql.jdbc.Driver = |
1 | <!-- 配置数据源--> |
3、配置SqlSessionFactory,关联MyBatis
1 | <!-- 配置SqlSessionFactory,关联MyBatis--> |
4、配置mybatis-config.xml文件,把Mybatis的相关配置配置到这个文件中,和配置到关联部分也可以,主要区分配置文件,防止因为配置过多导致文件出错。
1 | <!-- 配置SqlSessionFactory,关联MyBatis--> |
5、注册sqlSessionTemplate,关联sqlSessionFactory;
1 | <!-- 方式一 --> |
6、增加Dao接口的实现类;私有化sqlSessionTemplate
1 | public class UserDaoImpl02 implements UserMapper { |
7、测试
1 |
|
整合方式二
在Mybatis-Spring1.2.3版本中可以用现实类继承Support类,直接用getSession()获得,然后直接注入SqlSessionFactory,比起方式一,不需要管理SqlSessionTemplate , 而且对事务的支持更加友好。
1、编写UserDaoImpl
1 | public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper { |
2、修改bean的配置
1 | <!-- 方式二:实现类userDaoImpl02直接继承SqlSessionDaoSupport 使用getSession()获取getMapper--> |
3、测试
1 | @Test |
整合方式三
1、编写UserDaoImpl03
1 | public class UserDaoImpl03 implements UserMapper { |
2、修改bean的配置
1 | <!-- 方式三:直接配置接口uerMapper获取sqlSession和关联sqlSessionFactory--> |
3、测试
1 |
|
完整的整合过程
1、导入相关的依赖和添加文件过滤
1 | <dependencies> |
2、编写Dao接口,编写实现类
1 | package com.asher.dao; |
1 | package com.asher.dao.Impl; |
3、编写实体类pojo
1 | package com.asher.pojo; |
4、编写Service接口和实现类
(规范编写作用,可以不写这一部分)
1 | package com.asher.service; |
1 | package com.asher.service.Impl; |
5、编写UserMapper.xml实习sql查询
1 |
|
6、编写数据库配置文件db.properties
1 | com.mysql.jdbc.Driver = |
7、编写mybatis-config.xml
1 |
|
8、编写bean配置文件applicationContext.xml
1 |
|
9、测试
1 | package com.asher.test; |