位置: IT常识 - 正文

Spring(十五):Spring整合MyBatis的两种方式

编辑:rootadmin
在学习之前,我们先了解一个网站mybatis-spring,这是mybatis-spring整合的官方文档,里面有详细的教程,网址如下: https://mybatis.org/spring/zh/index.html 一、什么是mybatis-spring 以下是mybatis-spring官方给 ...

推荐整理分享Spring(十五):Spring整合MyBatis的两种方式,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在学习之前,我们先了解一个网站mybatis-spring,这是mybatis-spring整合的官方文档,里面有详细的教程,网址如下:

https://mybatis.org/spring/zh/index.html

一、什么是mybatis-spring

以下是mybatis-spring官方给出的介绍:

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和SqlSession并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

二、需要导入的包

<dependencies> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.23</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.9.1</version> </dependency> <!-- mysql驱动--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <!-- mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.23</version> </dependency> </dependencies>

三、方式一:SqlSessionTemplate

SqlSessionTemplate,官方文档中有这样一段说明:

SqlSessionTemplate是 MyBatis-Spring 的核心。作为SqlSession的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的SqlSession。SqlSessionTemplate是线程安全的,可以被多个 DAO 或映射器所共享使用。

当调用 SQL 方法时(包括由getMapper()方法返回的映射器中的方法),SqlSessionTemplate将会保证使用的SqlSession与当前 Spring 的事务相关。 此外,它管理 session 的生命周期,包含必要的关闭、提交或回滚操作。另外,它也负责将 MyBatis 的异常翻译成 Spring 中的DataAccessExceptions。

由于模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是用SqlSessionTemplate来替换 MyBatis 默认的DefaultSqlSession实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。

1.建立实体类User

package com.jms.pojo;public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; }}

2.建立Mapper接口UserMapper

package com.jms.mapper;import com.jms.pojo.User;import java.util.List;public interface UserMapper { List<User> selectUsers();}

3.建立Mapper.xml配置文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.jms.mapper.UserMapper"> <select id="selectUsers" resultType="user"> select * from mybaties.user </select></mapper>

4.建立MyBatis配置文件mybatis-config.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> <typeAliases> <package name="com.jms.pojo"/> </typeAliases></configuration>

现在的MyBatis配置文件中我们只需要配置别名(typeAlias)和设置(set)的内容,至于愿意,在下面进行解释。

5.建立一个spring配置文件,用于配置MyBatis的内容

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 数据源DataSource 使用Spring的数据源代替Mybatis的配置,Spring提供的JDBC:org.springframework.jdbc.datasource.DriverManagerDataSource --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/MyBaties?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--SqlSessionFactor--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!--绑定MyBatis配置文件--> <property name="configLocation" value="mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/jms/mapper/*.xml"/> </bean> <!--SqlSessionTemplate:实现了SqlSession接口,具有SqlSession的功能--> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean></beans>

这里有三个Bean,一个是数据源,一个是工厂,一个是SqlSessionTemplate;SqlSessionTemplate实现了SqlSession接口,也是我们一会要用到的东西。

SqlSessionFactory,官方文档中有这样一段说明:

SqlSessionFactory有一个唯一的必要属性:用于 JDBC 的DataSource。这可以是任意的DataSource对象,它的配置方法和其它 Spring 数据库连接是一样的。

一个常用的属性是configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是<settings>或<typeAliases>元素。

需要注意的是,这个配置文件并不需要是一个完整的 MyBatis 配置。确切地说,任何环境配置(<environments>),数据源(<DataSource>)和 MyBatis 的事务管理器(<transactionManager>)都会被忽略。SqlSessionFactoryBean会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值。

如果 MyBatis 在映射器类对应的路径下找不到与之相对应的映射器 XML 文件,那么也需要配置文件。这时有两种解决办法:第一种是手动在 MyBatis 的 XML 配置文件中的<mappers>部分中指定 XML 文件的类路径;第二种是设置工厂 bean 的mapperLocations属性。

Spring(十五):Spring整合MyBatis的两种方式

也就是说我们仅需要在MyBatis的配置文件中配置别名或设置,其他都在SqlSessionFactory的Bean中进行配置即可。

6.建立一个实现类UserMapperImpl

实现UserMapper接口

package com.jms.mapper;import com.jms.pojo.User;import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{ private SqlSessionTemplate sqlSessionTemplate; public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSessionTemplate = sqlSessionTemplate; } @Override public List<User> selectUsers() { UserMapper userMapper = sqlSessionTemplate.getMapper(UserMapper.class); return userMapper.selectUsers(); }}

可以看到,我们把原来SqlSession的操作封装到了一个实现类里,也就是说,此时我们只需要调用实现类的方法就可以调用需要的方法。

7.将实现类注入Bean

这里我们建立一个新的Spring配置文件applicationContext.xml,并且引用刚刚配置了Mybatis内容的配置文件

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <import resource="spring-mybatis.xml"/> <bean id="userMapperImpl" class="com.jms.mapper.UserMapperImpl"> <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/> </bean></beans>

8.测试

@Test public void test01() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapperImpl userMapper = applicationContext.getBean("userMapperImpl", UserMapperImpl.class); List<User> userList = userMapper.selectUsers(); for (User user : userList) System.out.println(user); }

测试结果如下:

没有问题。

四、方式二:SqlSessionDaoSupport

官方文档说明如下:

SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。调用getSqlSession()方法你会得到一个SqlSessionTemplate。

在这个类里面,通常更倾向于使用MapperFactoryBean,因为它不需要额外的代码。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一个非抽象的实现类,那么这个类就很有用了。

SqlSessionDaoSupport需要通过属性设置一个sqlSessionFactory或SqlSessionTemplate。如果两个属性都被设置了,那么SqlSessionFactory将被忽略。

前四步与方式一相同,我们直接从第五步开始:

5.配置MyBatis内容的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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 数据源DataSource 使用Spring的数据源代替Mybatis的配置,Spring提供的JDBC:org.springframework.jdbc.datasource.DriverManagerDataSource --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/MyBaties?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--SqlSessionFactor--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!--绑定MyBatis配置文件--> <property name="configLocation" value="mybatis-config.xml"/> <property name="mapperLocations" value="classpath:com/jms/mapper/*.xml"/> </bean></beans>

此时我们不用再去注入SqlSessionTemplate,因为我们能通过getsession()方法直接获取。

6.建立一个实现类UserMapperImpl2

package com.jms.mapper;import com.jms.pojo.User;import org.mybatis.spring.support.SqlSessionDaoSupport;import java.util.List;public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper { @Override public List<User> selectUsers() { return getSqlSession().getMapper(UserMapper.class).selectUsers(); }}

这个实现类需要继承SqlSessionDaoSupport抽象类

7.将实现类注入Bean

<bean id="userMapperImpl2" class="com.jms.mapper.UserMapperImpl2"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>

这里属性sqlSessionFactory和sqlSessionTemplate二选一即可,由于我们没有注入SqlSessionTemplate,所以这里选择工厂属性。

8.测试

@Test public void test01() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapperImpl2 userMapper = applicationContext.getBean("userMapperImpl2", UserMapperImpl2.class); List<User> userList = userMapper.selectUsers(); for (User user : userList) System.out.println(user); }

测试结果:

没有问题

(本文仅作个人学习记录用,如有纰漏敬请指正)

本文链接地址:https://www.jiuchutong.com/zhishi/311845.html 转载请保留说明!

上一篇:Go 语言入门 1-管道的特性及实现原理(go语言ui)

下一篇:php引用的使用注意(php引用类型)

  • iqoo8是双扬声器吗(iqoo8双扬声器参数)

    iqoo8是双扬声器吗(iqoo8双扬声器参数)

  • 微信金币怎么赠送给好友(微信支付里面的金币怎么赠送好友)

    微信金币怎么赠送给好友(微信支付里面的金币怎么赠送好友)

  • 怎么看屏幕是不是oled(怎么看屏幕是不是4k)

    怎么看屏幕是不是oled(怎么看屏幕是不是4k)

  • 抖音一千万音浪可以提现多少(抖音一千万音浪多少钱,拿到手能有多少钱)

    抖音一千万音浪可以提现多少(抖音一千万音浪多少钱,拿到手能有多少钱)

  • 办手机卡可以不预存话费吗(办手机卡可以不带身份证吗)

    办手机卡可以不预存话费吗(办手机卡可以不带身份证吗)

  • 微信添加好友显示对方拒绝你的消息(微信添加好友显示个人是怎么回事)

    微信添加好友显示对方拒绝你的消息(微信添加好友显示个人是怎么回事)

  • 6-dzm-12是什么意思(6-dzm-60是什么意思)

    6-dzm-12是什么意思(6-dzm-60是什么意思)

  • 键盘下一行是哪个键(键盘下一行怎么打出来)

    键盘下一行是哪个键(键盘下一行怎么打出来)

  • 连接服务器超时什么意思(apex为什么连接服务器超时)

    连接服务器超时什么意思(apex为什么连接服务器超时)

  • 网易云怎么识别音乐(网易云怎么识别本地音乐)

    网易云怎么识别音乐(网易云怎么识别本地音乐)

  • 抖音评论怎么发动态表情(抖音评论怎么发图片)

    抖音评论怎么发动态表情(抖音评论怎么发图片)

  • 小米9pro可以用4g手机卡吗(小米9Pro可以用10w无线充吗)

    小米9pro可以用4g手机卡吗(小米9Pro可以用10w无线充吗)

  • 华为日历怎么显示行程(华为日历怎么显示黄历宜忌)

    华为日历怎么显示行程(华为日历怎么显示黄历宜忌)

  • 爱奇艺怎么切换版本(爱奇艺怎么切换语种)

    爱奇艺怎么切换版本(爱奇艺怎么切换语种)

  • 抖音怎么去掉前边省份(抖音怎么去掉前面视频)

    抖音怎么去掉前边省份(抖音怎么去掉前面视频)

  • 企业邮箱如何撤回邮件(企业邮箱如何撤销登录)

    企业邮箱如何撤回邮件(企业邮箱如何撤销登录)

  • oppoa9手机hd怎么关闭(oppoa93怎么开启hd)

    oppoa9手机hd怎么关闭(oppoa93怎么开启hd)

  • 小米手机微信字体怎么改(小米手机微信字体大小怎么设置)

    小米手机微信字体怎么改(小米手机微信字体大小怎么设置)

  • 怎么删除拼多多签到好友(怎么删除拼多多购买记录一下删掉)

    怎么删除拼多多签到好友(怎么删除拼多多购买记录一下删掉)

  • 找回qq聊天消息记录(qq聊天消息记录怎么找回)

    找回qq聊天消息记录(qq聊天消息记录怎么找回)

  • Win11如何更改开始菜单和任务栏颜色(win11如何更改开始菜单位置)

    Win11如何更改开始菜单和任务栏颜色(win11如何更改开始菜单位置)

  • win7防火墙设置在哪里?如何开启和设置呢?(win7防火墙设置不了)

    win7防火墙设置在哪里?如何开启和设置呢?(win7防火墙设置不了)

  • 基于 transformers 的 generate() 方法实现多样化文本生成:参数含义和算法原理解读(基于transformers的nlp入门 pdf)

    基于 transformers 的 generate() 方法实现多样化文本生成:参数含义和算法原理解读(基于transformers的nlp入门 pdf)

  • 织梦dedecms搜索结果不显示自定义字段解决方法(织梦系统)

    织梦dedecms搜索结果不显示自定义字段解决方法(织梦系统)

  • 个人所得税退税是什么意思?
  • 个税汇算清缴可以修改收入吗
  • 研发支出属于什么科目借贷方向
  • 办公楼出租价格怎么算
  • 赔偿支出需要纳税调整吗
  • 机票行程单改成发票可以报销吗
  • 小规模免税的税额怎么处理
  • 购进餐饮服务的会计分录
  • 报税界面
  • 建筑业工人工资保障
  • 政策性用房包括哪些
  • 装修项目展示厅费用支出列什么科目?
  • 充值卡充值发票可以报销吗
  • 办公室租赁合同需要交哪些税额?
  • 地税都包括什么
  • 专票抵扣是税额吗
  • 营改增后增加了什么征税项目
  • 园林绿化公司前景如何
  • a104000期间费用明细表
  • 营改增后房产税计税依据及计算方式
  • 个税多申报了实发没有这么多,如何处理
  • 车船税计入什么费用
  • 暂估入库价格高于实际价格怎么调整
  • 成交转化率的计算公式电脑
  • 最新早上好图片大全集
  • 公务接待和商务接待自查
  • 企业补充流动资金具体用途
  • win7系统中文乱码怎么解决
  • php获取多选框的值
  • 审核凭证要注意哪些问题
  • regsrv.exe - regsrv是什么进程 有什么用
  • 交易性金融资产的交易费用计入哪里
  • 预算周转金会计处理怎么做
  • 从零开始文章
  • win11显卡驱动不兼容
  • js倒计时函数
  • 工会经费怎么上缴
  • 母公司与子公司交易属于关联交易吗
  • 购销合同印花税最新政策2023
  • 开增值税发票需要和收款账户名字一致吗
  • 暂估库存商品计算怎么算
  • php 迭代器
  • mongodb建立索引的命令
  • 间接费用会计科目
  • 材料出入库的本质是什么
  • 小规模纳税人增值税申报表怎么填
  • 报废的机器设备属于什么会计要素
  • 企业出售房屋
  • 哪些发票不可以报销入账
  • 兼职人员工资需要交个税吗
  • 社保费单位减免
  • 购进原材料发生的保险费
  • 支付的中介费进什么科目
  • 外贸公司收取客户的费用
  • 个体工商户缴纳社保属于职工社保吗
  • 劳动局仲裁花钱吗
  • 合同已执行但有错误怎么办
  • 生活垃圾处理费标准
  • 研发支出资本化支出在资产负债表哪里体现
  • 营业执照可以变更名字和经营范围吗
  • 小企业如何做
  • 虚拟机linux端mysql数据库无法远程访问的解决办法
  • mysql主界面
  • xp系统打开注册表
  • 苹果系统怎么修改语言
  • win10通讯
  • 怎么用win7兼容模式运行
  • win10 64位系统提示0x80070643错误代码的解决方法
  • windows7 sp1升级包
  • adt Failed to create the Java Virtual Machine.
  • html5画布五角星
  • cocos2dx openGL
  • android网络开发技术答案形考任务五
  • 基于javascript的毕业设计选题
  • python日志类
  • 家政公司的清洁工具
  • 政府采购合同模板
  • 车辆购置税非本人可以代缴吗
  • 哪些税和费计入应交税费
  • 河南省纳税服务平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设