基于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整合
由于不是本文的重点,因此不附上样例。
方法二
有如下步骤:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
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的定义,如下
package net.jackieathome.db.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import net.jackieathome.bean.User;
@Mapper
public interface UserMapper {
// 创建用户
void createUser(User user);
// 查找用户
User findUserById(@Param("id") String id);
}
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
@Transactional
public 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;
@RestController
public 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访问数据库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# spring
# boot
# 集成mybatis
# springboot基于Mybatis mysql实现读写分离
# Spring Boot MyBatis 连接数据库配置示例
# Spring Boot整合MyBatis连接Oracle数据库的步骤全纪录
# spring boot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置方法
# SpringBoot整合Mybatis使用Druid数据库连接池
# spring boot + mybatis如何实现数据库的读写分离
# 样例
# 小编
# 文档
# 中间层
# 多个
# 在此
# 才会
# 在上述
# 给大家
# 三种
# 高性能
# 所述
# 给我留言
# 感谢大家
# 进行了
# 类中
# 主键
# 举例说明
# 疑问请
# 有任何
相关文章:
海南网站制作公司有哪些,海口网是哪家的?
如何在建站之星绑定自定义域名?
建站主机默认首页配置指南:核心功能与访问路径优化
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何通过山东自助建站平台快速注册域名?
黑客如何利用漏洞与弱口令入侵网站服务器?
网站制作价目表怎么做,珍爱网婚介费用多少?
建站之星会员如何解锁更多建站功能?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何用美橙互联一键搭建多站合一网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
活动邀请函制作网站有哪些,活动邀请函文案?
如何快速搭建二级域名独立网站?
制作企业网站建设方案,怎样建设一个公司网站?
5种Android数据存储方式汇总
公司网站制作需要多少钱,找人做公司网站需要多少钱?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何用y主机助手快速搭建网站?
建站之星如何助力网站排名飙升?揭秘高效技巧
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
建站之星后台密码遗忘如何找回?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
音乐网站服务器如何优化API响应速度?
建站之星安装提示数据库无法连接如何解决?
深入理解Android中的xmlns:tools属性
济南网站制作的价格,历城一职专官方网站?
建站之星如何实现网站加密操作?
如何在西部数码注册域名并快速搭建网站?
*服务器网站为何频现安全漏洞?
建站之星在线版空间:自助建站+智能模板一键生成方案
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何用虚拟主机快速搭建网站?详细步骤解析
山东云建站价格为何差异显著?
建站之星如何通过成品分离优化网站效率?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
linux top下的 minerd 木马清除方法
一键网站制作软件,义乌购一件代发流程?
已有域名如何快速搭建专属网站?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何基于云服务器快速搭建个人网站?
建站主机如何选?性能与价格怎样平衡?
如何在云指建站中生成FTP站点?
制作门户网站的参考文献在哪,小说网站怎么建立?
如何用AWS免费套餐快速搭建高效网站?
如何获取上海专业网站定制建站电话?
建站之星备案流程有哪些注意事项?
Android自定义控件实现温度旋转按钮效果
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
*请认真填写需求信息,我们会在24小时内与您取得联系。