本文将利用 Spring 对 MyBatis 进行整合,在对组件实现解耦的同时,还能使 MyBatis 框架的使用变得更加方便和简单。

整合思路

作为 Bean 容器,Spring 框架提供了 IoC 机制,可以接管所有组件的创建工作并进行依赖管理,因为整合的主要工作就是把 MyBatis 框架使用中所涉及的核心组件配置到 Spring 容器中,交给 Spring 来创建和管理。

具体来说,业务逻辑对象依赖基于 MyBatis 技术实现的 DAO 对象,核心是获取 SqlSession 实例。要获得 SqlSession 实例,则需要依赖 SqlSessionFactory 实例。而 SqlSessionFactory 是 SqlSessionFactoryBuilder 依据 MyBatis 配置文件中的数据源、Sql映射文件等信息来构建的。

现在,我们只需把以上流程全部移交给 Spring,发挥 Spring 框架 Bean 容器的作用,就能接管组件的创建工作,管理组件的生命周期,并对组件之间的依赖关系进行解耦合管理。

准备工作

1.在项目中加入 Spring、MyBatis 及整合相关的 JAR 文件

Spring 整合 MyBatis 所需 jar 包

我已上传到百度云网盘,大家可以点击这里下载,密码: xlk3 

2.建立开发目录结构,创建实体类

3.创建数据访问接口

4.配置 SQL 映射文件

为 IUserMapper 配置 SQL 语句映射文件 IUserMapper.xml,实现指定的查询映射。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="cn.xxxx.mapper.IUserMapper">
  4. <select id="queryAll" resultType="USER">
  5. select * from user
  6. </select>
  7. </mapper>

5.配置 MyBatis 配置文件

编写 MyBatis 配置文件 mybatis_config.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. <typeAliases>
  8. <package name="cn.xxxx.pojo" />
  9. </typeAliases>
  10. </configuration>

这里的 MyBatis 配置文件内容与之前相比简单了许多,这是因为 Spring 可以接管 MyBatis 配置信息的维护工作。我们选择把数据源配置和 SQL 映射信息转移至 Spring 配置文件中进行管理。

实现整合

Spring 需要依次完成加载 MyBatis 配置信息、构建 SqlSessionFactory 和 SqlSession 实例,完成对业务逻辑对象的依赖注入等工作。这些工作大多以配置文件的方式实现,无须编写相关类。

配置数据源

对于任何持久化解决方案,数据库连接都是首先要解决的问题。在 Spring 中,数据源作为一个重要的组件可以单独进行配置和维护。我们将 MyBatis 配置文件中有关数据源的配置移除,转移到 Spring 配置文件中进行维护。

这里以配置 dbcp 数据源为例

  1. <!-- 数据源 —— 数据库连接池管理 dbcp -->
  2. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  3. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  4. <property name="url" value="jdbc:mysql://localhost:3306/smbms"></property>
  5. <property name="username" value="root"></property>
  6. <property name="password" value="ok"></property>
  7. </bean>

配置 SqlSessionFactoryBean

在 MyBatis 中,SqlSessionFactory 的实例需要使用 SqlSessionFactoryBuilder 创建;而在集成环境中,则可以使用 MyBatis-Spring 整合包中的 SqlSessionFactoryBean 来代替。SqlSessionFactoryBean 封装了使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory 的过程,我们可以在 Spring 中以配置文件的形式,通过配置 SqlSessionFactoryBean 获得 SqlSessionFactory 实例。

  1. <!-- sqlSession工厂 -->
  2. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <!-- 引用数据源组件 -->
  3. <property name="dataSource" ref="dataSource"></property>
          <!-- 引用 MyBatis 配置文件中的配置 -->
  4. <property name="configLocation" value="classpath:mybatis_config.xml"></property>
          <!-- 配置 SQL 映射文件信息 -->
  5. <property name="mapperLocations" value="classpath:cn/xxxx/mapper/*.xml"></property>
  6. </bean>

通过上个示例配置的 id 为 SqlSessionFactory 的 Bean 即可获得 SqlSessionFactory 实例。

示例中 "classpath:cn/xxxx/mapper/*.xml" 表示扫描 cn.xxxx.mapper 包及其任意层级的子包中,任意名称的 xml 类型的文件。

使用 SqlSessionTemplate 实现数据库的操作

对于 MyBatis 而言,得到 SqlSessionFactory 实例,就可以进一步获取 SqlSession 实例进行数据库操作。而在集成环境中,为了更好地使用 SqlSession,充分利用 Spring 框架提供的服务,MyBatis-Spring 整合包提供了 SqlSessionTemplate 类。

SqlSessionTemplate 类实现了 MyBatis 的 SqlSession 接口,可以替换 MyBatis 中原有的 SqlSession 实现类提供数据库访问操作。

配置 SqlSessionTemplate

在 IUserMapper 实现类使用注解进行注入,代码如下

  1. 1 @Repository("userMapper")
  2. 2 public class UserMapper implements IUserMapper {
  3. 3
  4. 4 @Resource(name="sqlSessionTemplate")
  5. 5 private SqlSessionTemplate template;
  6. 6
  7. 7 @Override
  8. 8 public List<USER> queryAll() {
  9. 9 return template.getMapper(IUserMapper.class).queryAll();
  10. 10 }
  11. 11
  12. 12 }

Spring 配置文件代码如下:

  1. 1 <!-- 配置 SqlSessionTemplate -->
  2. 2 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  3. 3 <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
    4 </bean>
  4. 5 <context:component-scan base-package="cn.xxxx.*" />
    6 <aop:aspectj-autoproxy />

注意:

1)创建 SqlSessionTemplate 实例时,需要通过其构造方法注入 SqlSessionFactory 实例。这里引用的是前文配置过的 id 为 SqlSessionFactory 的 Bean。

2)与 MyBatis 中默认的 SqlSession 实现不同,SqlSessionTemplate 是线程安全的,可以以单例模式配置并被多个 DAO 对象共用,而不必为每个 DAO 单独配置一个 SqlSessionTemplate 实例。

编写业务逻辑代码

  1. 1 import java.util.List;
  2. 2
  3. 3 import org.springframework.beans.factory.annotation.Autowired;
  4. 4 import org.springframework.beans.factory.annotation.Qualifier;
  5. 5 import org.springframework.stereotype.Service;
  6. 6 import cn.xxxx.mapper.IUserMapper;
  7. 7 import cn.xxxx.pojo.USER;
  8. 8 import cn.xxxx.service.IUserService;
  9. 9
  10. 10 @Service("userSerivce")
  11. 11 public class UserService implements IUserService{
  12. 12
  13. 13 @Autowired
  14. 14 @Qualifier("userMapper")
  15. 15 private IUserMapper userMapper;
  16. 16
  17. 17 @Override
  18. 18 public List<USER> queryAll() {
  19. 19 return userMapper.queryAll();
  20. 20 }
  21. 21 }

这里使用注解实现组件注入,测试方法省略。。。。

下次更新注入映射器实现和事务功能

【Java】MyBatis与Spring框架整合(一)的更多相关文章

  1. 【Java】MyBatis与Spring框架整合(二)

    本文讲解 Spring 注入映射器及事务功能的实现. 注入映射器实现 MyBatis 可以使用 SqlSession 的 getMapper ( Class<T> type ) 方法,根据 ...

  2. 【mybatis源码学习】mybatis和spring框架整合,我们依赖的mapper的接口真相

    转载至:https://www.cnblogs.com/jpfss/p/7799806.html Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注 ...

  3. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  4. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

  5. 使用Spring框架整合Java Mail

    我的博客名为黑客之谜,今天演示的案例中会出现我的邮箱,还不赶紧收藏!我现在是小白,但是随着时间的流逝,我会逐渐向大神走进,所以,喜欢我的,或者喜欢大神的,点一波关注吧!顺便说一下,双十二快到了,有什么 ...

  6. 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

    在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ...

  7. mybatis 学习笔记(四):mybatis 和 spring 的整合

    mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...

  8. Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码

    Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...

  9. mybatis与spring的整合(代码实现)

    mybatis与spring的整合(代码实现) 需要jar包: mybatis核心包:依赖包:log4j包:spring croe;beans;tx;aop;aspects;context;expre ...

随机推荐

  1. ***腾讯云直播(含微信小程序直播)研究资料汇总-原创

    这段时间抽空研究了下直播技术,综合比较了下腾讯云直播的技术和文档方面最齐全,现把一些技术资料和文档归集如下: 1.微信小程序移动直播入门导读 https://cloud.tencent.com/doc ...

  2. python全栈开发day45-DOM操作、对象、定时器

    一.昨日内容回顾 1.内置对象 Array String Date Math 2.DOM事件三要素:事件源.事件.事件驱动程序 事件源,事件,事件驱动程序 3.获取事件源的三种方式 var oDiv ...

  3. Codeforces 555D Case of a Top Secret

    Case of a Top Secret 感觉除了两个点在那循环的部分, 其他时候绳子的长度每次变为一半一下, 就变成了Log(l)步.. 然后就暴力找就好啦, 循环的部分取个模. #include& ...

  4. Codeforces Round #369 (Div. 2)-C Coloring Trees

    题目大意:有n个点,由m种颜料,有些点没有涂色,有些点已经涂色了,告诉你每个点涂m种颜色的价格分别是多少, 让你求将这n个点分成k段最少需要多少钱. 思路:动态规划,我们另dp[ i ][ j ][ ...

  5. P1510 精卫填海

    P1510 精卫填海二分答案二分背包容量,判断能否满足v.判断的话就跑01背包就好了. #include<iostream> #include<cstdio> #include ...

  6. Codeforces-541div2

    https://www.cnblogs.com/31415926535x/p/10427505.html codeforces-1131A~G 这场很多题都很简单,,应该是要能至少做出4道的,,但是我 ...

  7. 利用Solr服务建立的站内搜索雏形

    最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...

  8. POJ.3537.Crosses and Crosses(博弈论 Multi-SG)

    题目链接 \(Description\) 有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢.问是否有必胜策略. \(Solution\) 首先一个人若在\(i\)处放棋子,那么 ...

  9. ssm中的某些异常

    ---恢复内容开始--- (1)java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/Transact ...

  10. CocosCreator核心概念里的基础点

    1,锚点:是节点位置的参照点,也是自身旋转,缩放的基准点,也是子节点坐标原点.X.Y描述横纵向的锚点位置.注:锚点的取值是可以超过(0,0)~(1,1),即锚点并不在节点尺寸范围内. 2,子节点:子节 ...