【java深入学习第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理与应用
前言
在使用 MyBatis 进行持久层开发时,通常会与 Spring 框架集成,以便更好地管理事务和依赖注入。在 MyBatis-Spring 集成中,SqlSession
是一个非常重要的概念。本文将详细介绍 SqlSessionTemplate
和 SqlSessionDaoSupport
,并提供相关的代码示例。
一、SqlSessionTemplate
SqlSessionTemplate
是 MyBatis-Spring 提供的一个线程安全的 SqlSession
实现,用于执行 SQL 操作。它封装了 MyBatis 的 SqlSession
,并处理了事务的管理和资源的释放。
1. 创建
在 Spring 配置文件中,我们可以通过以下方式创建 SqlSessionTemplate
:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mappers/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
2. 使用
在 Spring 中,我们可以通过依赖注入的方式使用 SqlSessionTemplate
:
@Service
public class UserService {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public User getUserById(int id) {
return sqlSessionTemplate.selectOne("com.example.mapper.UserMapper.selectUser", id);
}
}
3. 批量操作
在进行批量操作时,可以通过 SqlSessionTemplate
提供的批量操作方法来实现。
3.1 创建 SqlSessionTemplate
在 Spring 配置文件中创建 SqlSessionTemplate
的方式与前面相同:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mappers/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
3.2 Service
在 Service 层中,我们可以使用 SqlSessionTemplate
进行批量操作:
@Service
public class UserService {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public void batchInsertUsers(List<User> users) {
sqlSessionTemplate.execute(new SqlSessionCallback<Void>() {
@Override
public Void doInSqlSession(SqlSession sqlSession) throws SQLException {
for (User user : users) {
sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);
}
return null;
}
});
}
}
3.3 Controller
在 Controller 层中,我们可以调用 Service 层的方法进行批量操作:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/batchInsert")
public ResponseEntity<Void> batchInsertUsers(@RequestBody List<User> users) {
userService.batchInsertUsers(users);
return ResponseEntity.ok().build();
}
}
二、SqlSessionDaoSupport
SqlSessionDaoSupport
是 MyBatis-Spring 提供的一个支持类,用于简化 DAO 层的开发。它提供了对 SqlSession
的支持,并可以通过继承该类来实现 DAO 层的功能。
使用示例
首先,我们需要创建一个继承 SqlSessionDaoSupport
的 DAO 类:
@Repository
public class UserDao extends SqlSessionDaoSupport {
@Autowired
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
super.setSqlSessionTemplate(sqlSessionTemplate);
}
public User getUserById(int id) {
return getSqlSession().selectOne("com.example.mapper.UserMapper.selectUser", id);
}
public void insertUser(User user) {
getSqlSession().insert("com.example.mapper.UserMapper.insertUser", user);
}
}
在 Service 层中,我们可以通过依赖注入的方式使用 UserDao
:
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User getUserById(int id) {
return userDao.getUserById(id);
}
public void insertUser(User user) {
userDao.insertUser(user);
}
}
总结
本文详细介绍了 MyBatis-Spring 中 SqlSessionTemplate
和 SqlSessionDaoSupport
的使用方法,并提供了相关的代码示例。通过使用 SqlSessionTemplate
,我们可以方便地进行 SQL 操作和批量操作;通过继承 SqlSessionDaoSupport
,我们可以简化 DAO 层的开发。希望本文对您在 MyBatis-Spring 集成开发中有所帮助。
百万大学生都在用的AI写论文工具,篇篇无重复AI写论文
【java深入学习第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理与应用的更多相关文章
- Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库
参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 ...
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...
- Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...
- Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring
参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...
- Java EE 学习(5):IDEA + maven + spring 搭建 web(1)
参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--1590 ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...
- Java开发学习(三十九)----SpringBoot整合mybatis
一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...
- spring学习笔记(四)我对spring中bean生命周期的理解
我相信大部分同学对spring中bean的生命周期都不陌生,但是如果要详细的说出每一个步骤,可能能说出来的也不多,我之前也是这样,前几天调了一下spring的源码,看了一点书,突然一下明朗了,理解了s ...
- Java JDK8 学习笔记 1-3章
第一章 Java平台概论 1.了解Java的前世今生,Java SE.Java EE.JavaME三大平台.其中Java SE主要由四部分JVM.JRE.JDK与Java语言,JDK包含JRE,JRE ...
随机推荐
- 移动通信网络中的 GTP 协议
目录 文章目录 目录 GTP GTP-C 协议(GTP 控制面) GTP-U 协议(GTP 用户面) GTP' 协议(计费传输) GTPv2 Header GTP GTP(GPRS Tunnellin ...
- 一文搞懂RESTful开发
REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描述形式 http: ...
- 零代码零硬件玩转华为云IoT,基于设备联动实时监控设备
本文分享自华为云社区<一键守护,实时洞察:华为云IoT设备联动,智能感知设备状态变化,精准触发告警通知[零代码零硬件玩转华为云IoT]>,作者:周周的奇妙编程. 前言 在前面我们已经体验过 ...
- CSS——组合选择器
1.后代选择器(包括儿子和孙子) .c1 .c2{ color: red; } 2.子代选择器(只选择儿子) .c3 > .c5{ color: red; } 3.与选择器 选择p标签下面的.c ...
- Android OpenMAX(八)如何学习OMXNodeInstance
前面一篇文章中我们看到media.codec service创建OMX组件后会把组件传递给一个OMXNodeInstance对象,并且把OMXNodeInstance对象返回到Framework层,F ...
- 为WPF框架Prism注册Nlog日志服务
这篇文章介绍了为WPF框架Prism注册Nlog日志服务的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 无论是Nlog还是Serilog, 它们都提供 ...
- 基于docker一键化部署LNMP环境
cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...
- test(爱测试) 开源接口测试,敏捷测试管理平台10.2.7发布
一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...
- 小程序转发 搜索wxml
新闻转发 在小程序中要不通过菜单项来完成分享功能,只能通过表单组件中的按钮来完成. 它是通过按钮中的开放能力完成 按钮自定义处理 新闻搜索 搜索wxml 搜索业务的js
- The solution of P3012
problem & blog 很明显是个 DP. 于是我们定义 \(dp_{i,j,k}\) 为末尾的字符的 ASCII 码为 \(i\),有 \(j\) 个大写字母,\(k\) 个小写字母. ...