时间:2021-05-20
基于spring boot开发的微服务应用,与MyBatis如何集成?
集成方法
可行的方法有:
1.基于XML或者Java Config,构建必需的对象,配置MyBatis。
2.使用MyBatis官方提供的组件,实现MyBatis的集成。
方法一
建议参考如下文章,完成集成的验证。
MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
基于Spring + Spring MVC + Mybatis 高性能web构建
spring与mybatis三种整合方法
MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
由于不是本文的重点,因此不附上样例。
方法二
有如下步骤:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: com.example.domain.model
type-handlers-package: com.example.typehandler
configuration:
map-underscore-to-camel-case: true
default-fetch-size: 100
default-statement-timeout: 30
日志的配置
通过观察日志,可有效的分析MyBatis生成的SQL,检查SQL配置的正确性。
修改application.yml,增加如下配置
logging:
level:
net:
jackieathome:
db:
mapper: DEBUG
其中net.jackieathome.db.mapper下定义了访问数据库的mapper接口。
输出的日志样例如下
2017-04-16 11:32:23.266 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser : ==> Preparing: insert into `user`(id, name, password) values(?, ?, ?)
2017-04-16 11:32:23.293 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser : ==> Parameters: id1492313542(String), null, null
2017-04-16 11:32:23.366 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser : <== Updates: 1
2017-04-16 11:32:23.372 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById : ==> Preparing: select * from `user` where id = ?
2017-04-16 11:32:23.373 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById : ==> Parameters: id1492313542(String)
2017-04-16 11:32:23.417 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById : <== Total: 1
事务的使用
依据MyBatis的官方文档,允许用户将事务交给Spring来管理,使用编程和注解来控制事务。这里以注解方式来举例说明使用方法,样例代码如下:
1.mapper的定义,如下
2.数据库访问的中间层代码,对上述mapper进行了封装。
使用@Transactional标记该类,表明该类的公有方法全部都启用了事务的支持。关于@Transactional的使用,可以参考相关的官方文档。
package net.jackieathome.dao;import java.util.ArrayList;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import net.jackieathome.bean.User;import net.jackieathome.db.mapper.UserMapper;@Component@Transactionalpublic class UserDao { @Autowired private UserMapper userMapper; /** * 重复插入相同的用户数据,确认事务是否生效 */ public List<String> createBatch() { long time = System.currentTimeMillis() / 1000; User user = null; List<String> ids = new ArrayList<>(); String id = "id" + time; String name = "name" + time; String password = "password" + time; user = new User(); user.setId(id); user.setName(name); user.setPassword(password); userMapper.createUser(user); ids.add(id); user = new User(); user.setId(id); user.setName(name); user.setPassword(password); userMapper.createUser(user); ids.add(id); return ids; }}3.业务层实现
package net.jackieathome.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import net.jackieathome.bean.User;import net.jackieathome.dao.UserDao;import net.jackieathome.db.mapper.UserMapper;@RestControllerpublic class UserController { @Autowired private UserMapper userMapper; @Autowired private UserDao userDao; @RequestMapping(method = RequestMethod.GET, value = "/user/create/batch") public List<User> createBatch() { try { userDao.createBatch(); } catch (Exception e) { } return userMapper.loadAllUsers(); }}从实际测试看,上述事务的实现有效,可保证当数据出现主键冲突时,事务中的插入操作可全部撤销,不会出现部分数据插入成功、部分失败的现象。
注意事项:
由于注解事务的实现依赖Spring AOP,因此只有当注入行为存在时,注解事务的控制才会生效。
1.假如在上述UserController类中定义createBatch方法,并且使用注解@Transactional标记,经验证可确认此时注解事务是无效的。
2.假如在上述UserDao中定义了多个公有方法,存在相互调用的行为,基于相同的原因,这些方法相互调用时注解事务并不会生效。如果确实需要保证事务可用,可以考虑调整类的设计或者使用编程的方式来控制事务。
以上所述是小编给大家介绍的Spring Boot集成MyBatis访问数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
之前写过一篇博客《Spring+Mybatis+Mysql搭建分布式数据库访问框架》描述如何通过Spring+Mybatis配置动态数据源访问多个数据库。但是之
springboot集成mybatis关键代码如下:1,添加pom引用org.mybatis.spring.bootmybatis-spring-boot-st
SpringBoot集成MyBatis和Pagehelper分页插件mybatis-spring-boot-starter依赖树如下:pom配置
1.加入mybatis-spring-boot-stater的Maven依赖org.mybatis.spring.bootmybatis-spring-boot
问题描述在spring-boot启动时,希望能执行相应的sql文件来初始化数据库。使用配置文件初始化数据库可以在spring-boot的配置文件applicat