实现mybatis与spring进行整合,通过spring管理SqlSessionFactory、mapper接口。

mybatis与spring整合jar

mybatis官方提供与mybatis与spring整合jar包:

还包括其它jar:
spring3.2.0
mybatis3.2.7
dbcp连接池
数据库驱动

参考:
mybatis与spring整合全部jar包

Mybatis配置文件

在classpath下创建mybatis/SqlMapConfig.xml

<?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><mappers><mapper resource="sqlmap/User.xml" /><mapper resource="mapper/UserMapper.xml" /></mappers>
</configuration>

Spring配置文件

在classpath下创建applicationContext.xml,定义数据库链接池、SqlSessionFactory。

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 数据库连接池 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="10" /><property name="maxIdle" value="5" /></bean><!-- mapper配置 --><!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /></bean></beans>

注意:在定义sqlSessionFactory时指定数据源dataSource和mybatis的配置文件。

1.原始dao开发(和spring整合后)

1.User.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 :命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用。 -->
<mapper namespace="test"><select id="findUserById" parameterType="int" resultType="com.huihui.pojo.User">select * from user where id=#{id}</select></mapper>

在SqlMapconfig.xml中加载User.xml:

    <mappers><mapper resource="sqlmap/User.xml" /></mappers>

2.UserDao接口:

public interface UserDao {//根据id查询用户信息public User findUserById(int id) throws Exception;
}

3.UserDao接口的实现类:(需要继承SqlSessionDaoSupport)

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{@Overridepublic User findUserById(int id) throws Exception {//继承sqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession = this.getSqlSession();User user = sqlSession.selectOne("test.findUserById", id);return user;}
}

4.在applicationContext.xml配置文件中增加如下内容:

<bean id="userDao" class="com.huihui.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean>

5.测试:

public class UserDaoImplTest {private ApplicationContext applicationContext;@Before//在setUp中得到spring的容器public void setUp() throws Exception {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");}@Testpublic void testFindUserById() throws Exception{UserDao userdao = (UserDao)applicationContext.getBean("userDao");User user = userdao.findUserById(1);System.out.println(user);}}

2.mapper代理的开放(与Spring整合后)

1.UserMapper.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">
<mapper namespace="com.huihui.mapper.UserMapper"><select id="findUserById" parameterType="int" resultType="com.huihui.pojo.User">select * from user where id=#{id}</select>
</mapper>

在SqlMapconfig.xml中加载UserMapper.xml:

    <mappers><mapper resource="sqlmap/User.xml" /><mapper resource="mapper/UserMapper.xml"/></mappers>

2.mapper接口:

public interface UserMapper {//根据id查询用户信息public User findUserById(int id) throws Exception;}

3.在applicationContext.xml中通过MapperFactoryBean创建实体对象:

    <!-- MapperFactoryBean可以根据mapper接口生成代理对象 --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!-- mapperInterface指定mapper接口 --><property name="mapperInterface" value="com.huihui.mapper.UserMapper"/><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean>

4.测试:

    @Testpublic void testFindUserByIdMapper() throws Exception{UserMapper userMapper = (UserMapper)applicationContext.getBean("userMapper");User user = userMapper.findUserById(1);System.out.println(user);}

上面的方法存在的问题:
需要针对每个mapper进行配置,麻烦。

解决方案:
通过MapperScannerConfigurer进行mapper扫描。
此方法即mapper接口开发方法,只需定义mapper接口,不用编写mapper接口实现类。只需要在spring配置文件中定义一个mapper扫描器,自动扫描包中的mapper接口生成代代理对象。

1、 mapper.xml文件编写

2、 定义mapper接口
注意mapper.xml的文件名和mapper的接口名称保持一致,且放在同一个目录

3、 配置mapper扫描器

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mapper接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>

basePackage:扫描包路径,中间可以用逗号或分号分隔定义多个包

4、 使用扫描器后从spring容器中获取mapper的实现对象
如果将mapper.xml和mapper接口的名称保持一致且放在一个目录 则不用在sqlMapConfig.xml中进行配置

Spring与mybatis整合---Mybatis学习笔记(十一)相关推荐

  1. SpringMVC与Mybatis整合---SpringMVC学习笔记(六)

    SpringMVC整合Mybatis的系统架构: 整合思路 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口. 使用mapper的扫描器自动扫描mapper ...

  2. Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)

    1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是 ...

  3. spring cloud Alibaba 的 Nacos学习笔记

    spring cloud Alibaba 的 Nacos学习笔记 文章目录 spring cloud Alibaba 的 Nacos学习笔记 下载nacos spring cloud Alibaba依 ...

  4. 吴恩达《机器学习》学习笔记十一——应用机器学习的建议

    吴恩达<机器学习>学习笔记十一--应用机器学习的建议 一.训练完模型后下一步要做什么 二.评估算法与模型选择 1.训练集与测试集 2.训练/测试步骤 3.模型选择 4.数据集新的划分--验 ...

  5. 吴恩达《机器学习》学习笔记十一——神经网络代码

    吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...

  6. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  7. Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)

    下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其 ...

  8. Vue学习笔记(十一)

    1.Vue学习笔记(十一) 文章目录 1.Vue学习笔记(十一) 1.1Vue_配置代理_方式 1.1.0演示问题 1.1.1运行node server1 1.1.2运行node server2 1. ...

  9. Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)

    Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程) 一.TCP服务器(一请求一线程) 的原理 二.完整代码 三.测试 四.补充 一.TCP服务器(一请求一线 ...

  10. Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数

    Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数 Polyworks采用了脚本语言作为二次开发的工具,因此语言格式上非常规范和统一.其中一个重要的特点就是,几乎所有的对象都 ...

最新文章

  1. 使用js的indexOf,lastIndexOf,slice三函数轻易得到url的服务器,路径和页名
  2. java中xml怎样配置_如何通过XML方式配置并实现Mybatis
  3. linux c 守护进程创建原理及简易方法
  4. 趣链 BitXHub跨链平台 (1)技术架构
  5. 《C语言解惑》—— 第一篇 C语言编程中的对与错
  6. PHP接入支付宝手机网站支付、移动支付接口
  7. dingding post POST请求
  8. pythoninit_Python __init__.py文件的作用
  9. python编程入门与案例详解-Python程序设计案例课堂
  10. 4场直播丨EsgynDB连接服务层、Oracle、openGauss
  11. 电子计算机审计,计算机审计存在的风险
  12. 怎么找相同台词的影视片段?这8个电影搜索神器,一句台词找到对应片段
  13. 【算法小结】Mex,SG,集合-Nim游戏模型
  14. 《垃圾回收算法手册 自动内存管理的艺术》——引言、标记清扫(笔记)
  15. 基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看
  16. 小饶学编程之JAVA EE第三部分——前端框架:1LayUI
  17. 分布式事务之BASE理论
  18. 《数据库系统概论》第四版课后习题答案
  19. 如何做好项目风险管理
  20. 绝大多数交互式电子白板与计算机通过链接,交互式电子白板在数学教学中的运用案例...

热门文章

  1. 先学c语言还是先学java_是先学 java好还是先学c语言好
  2. php数组foreach循环添加键值对_php 给数组增加键值对
  3. ObjecT4:On-line multiple instance learning (MIL)学习
  4. 中科院召开嫦娥四号任务动员会
  5. 各种java生成word解决方案的优缺点对比
  6. 云服务器有什么好 能让云大佬们竞争如此激烈
  7. 推荐系统-基于矩阵分解的LFM模型
  8. 性能测试初学_windows 计数器
  9. 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
  10. 敏捷软件开发实践-Sprint Status Track