Spring 整合 Mybatis
时间:2022-07-25
本文章向大家介绍Spring 整合 Mybatis,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、MyBatis 单独开发
第一个问题就是配置文件繁琐。
如果使用 MyBatis 配置文件的方式开发,配置文件会非常的繁琐:
<configuration>
<typeAliases>
<typeAlias type="edu.lsu.mybatis.User" alias="user"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserDaoMapper.xml"/>
</mappers>
</configuration>
如上:
- 我们需要配置别名,有几个写几个;
- 我们需要注册
mapper
,有几个写几个。
有同学说可以使用 package
标签解决这个问题。
是的,但是我们待会使用 Spring 的方式解决这个问题。
第二个问题就是在调用 API 的时候存在代码冗余:
@Test
public void test1() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
SqlSession session = ssf.openSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = new User();
user.setName("ws");
user.setPassword("123456");
userDao.saveUser(user);
session.commit();
}
这里创建 SqlSessionFactory
的代码是固定的,变化的部分只有 getMapper
时需要传入的参数。
二、Spring 与 Mybatis 的整合思路
Spring 主要是对这 4 行代码进行了封装:
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
SqlSession session = ssf.openSession();
UserDao userDao = session.getMapper(UserDao.class);
前两行
首先是封装了创建 SqlSessionFactory
的方式,然后封装了创建 Dao 的实现类。
原来是需要 mybatis-config.xml
配置文件的,现在去掉了,但是我们还是需要给它提供配置文件里的内容信息,比如 数据源 、别名、Mapper 的注册信息。
SqlSessionFactoryBean :
- 用于封装
SqlSessionFactory
创建的代码; - 需要数据源 、别名、注册信息作为参数;
- 数据源可以使用 ref 引用存在的数据源信息;
- 别名可以使用包名,Spring会自动为包下的实体类创建别名:首字母小写;
- 注册信息可以使用通配的设置,如:*Mapper.xml
后两行
Spring 提供了一个 MapperScannerConfig
类,他需要几个属性:
- 首先是需要一个
SqlSessionFactoryBean
,用于获取session
; - 然后设置 Dao 接口所在的包,他会自动扫描包下的接口并创建 Dao 对象,它的 id 值是接口首字母小写。
三、整合编码实现
在 Spring 的配置文件中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 连接池-->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- SqlSessionFactoryBean-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="edu.lsu.entity"/>
<property name="mapperLocations">
<list>
<value>classpath:edu/lsu/mapper/*Mapper.xml</value>
</list>
</property>
</bean>
<!-- 创建Dao对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="scanner">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<property name="basePackage" value="edu.lsu.dao"/>
</bean>
</beans>
其余文件内容均不变,在测试的时候即可测试出结果:
@Test
public void test2() {
ApplicationContext ac = new ClassPathXmlApplicationContext("/application.xml");
UserDao userDao = ac.getBean("userDao", UserDao.class);
User user = new User();
user.setName("小贱人");
user.setPassword("99999");
userDao.saveUser(user);
}
- 一起Polyfill系列:Function.prototype.bind的四个阶段
- winform实现拼图游戏
- 一起Polyfill系列:让Date识别ISO 8601日期时间格式
- Oracle 监听器无法启动(TNS-12537,TNS-12560,TNS-00507)
- Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)
- Python补充03 Python内置函数清单
- 不懂JQuery的孩子:自封装Ajax函数
- .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇
- 飓风“桑迪”路径图的制作
- 根据标准word模板生成word文档类库(开源)
- Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)
- Python补充02 Python小技巧
- 四则运算核心算法(开源)
- 页面分部分加载呈现收集(不断更新中)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 如何从xml文件创建R语言数据框dataframe
- R语言POT超阈值模型和极值理论EVT分析
- R语言使用灰色关联分析(Grey Relation Analysis,GRA)中国经济社会发展指标
- R语言中的模拟过程和离散化:泊松过程和维纳过程
- R语言Lee-Carter模型对年死亡率建模预测预期寿命
- R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析
- RxSwift 封装 CoreBluetooth(一) 配置
- Golang 操作Excel文件
- 腾讯云TKE-搭建prometheus监控(一)
- Android开发中ProgressDialog简单用法示例
- Android实现拍照及图片裁剪(6.0以上权限处理及7.0以上文件管理)
- Android仿微信调用第三方地图应用导航(高德、百度、腾讯)
- Android数据共享 sharedPreferences 的使用方法
- Android NavigationBar问题处理的方法
- mac系统下载、安装、使用Java8教程