大家日常mybatis开发的时候,有没有发现好多操作基本都差不多,比如通过id进行select、update、delete等等操作,虽然差不多,但是xml文件和mapper接口中也得写这一堆一模一样的代码。那我们有什么工具可以帮我完成这些重复性的代码工作呢?别着急下面就来给大家一一详解。

一、pom文件中加入tk.mybatis依赖

<!--tk.mybatis依赖--><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency>

引入依赖的时候要特别注意是否会和springboot相互冲突,比如我这边用的springboot版本是2.1.3.RELEASE和2.1.5的tk.mybatis是不冲突的。

二、mapper接口中继承Mapper(tk.mybatis.mapper.common.Mapper)

import com.hzcard.crm.mybatis.domain.SampleMain;import tk.mybatis.mapper.common.Mapper;public interface SampleMainMapper extends Mapper<SampleMain> {}

我们可以看到这个SampleMainMapper接口中都没有写任何的方法,只是继承一个Mapping接口,这边需要注意的是Mapper不是mybatis中的mapper(org.apache.ibatis.annotations.Mapper),而是tk.mybatis.mapper.common.Mapper中的。

三、.mapper对应的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzcard.crm.mybatis.mapper.SampleMainMapper"><resultMap id="BaseResultMap" type="com.hzcard.crm.mybatis.domain.SampleMain"><!--WARNING - @mbg.generated--><id column="id_" jdbcType="BIGINT" property="id" /><result column="gmt_create" jdbcType="TIMESTAMP" property="gmtCreate" /><result column="gmt_modified" jdbcType="TIMESTAMP" property="gmtModified" /><result column="is_deleted" jdbcType="BIT" property="deleted" /><result column="first_name" jdbcType="VARCHAR" property="firstName" /><result column="last_name" jdbcType="VARCHAR" property="lastName" /><result column="age_" jdbcType="TINYINT" property="age" /></resultMap>
</mapper>

我们可以看到也没有对应的增删改查配置信息出现,因为tk.mybatis已经全部帮我们做好了。

四、实际代码调用过程详解

1.控制类代码

@RestController
public class SampleController implements SampleApi{private static final Logger logger = LoggerFactory.getLogger(SampleController.class);@Autowiredprivate SampleService sampleService;@Overridepublic SampleDto echo(SampleDto dto) {logger.info("#echo {}", dto);return dto;}@Overridepublic SampleDto getById(@PathVariable("id") Long id) {logger.info("#getById {}", id);return sampleService.getSample(id);}@Overridepublic Long create(@RequestBody SampleDto dto) {logger.info("#create {}", dto);return sampleService.createSample(dto);}@Overridepublic boolean update(@PathVariable("id") Long id, @RequestBody SampleDto dto) {logger.info("#update id={}, dto={}", id, dto);dto.setId(id);return sampleService.updateSample(dto);}@Overridepublic boolean delete(@PathVariable("id") Long id) {logger.info("#delete {}", id);return sampleService.deleteSample(id);}@Overridepublic Page<SampleDto> page(@RequestParam("index") int index, @RequestParam(value = "size", defaultValue = "20") int size) {logger.info("#page index={}, size={}", index, size);return sampleService.pageSample(index, size);}
}

2.服务接口代码

public interface SampleService {/*** 创建* @param dto {@link SampleDto}* @return ID*/Long createSample(SampleDto dto);/*** 更新* @param dto {@link SampleDto}* @return 是否更新*/boolean updateSample(SampleDto dto);/*** 删除* @param id ID* @return 是否删除*/boolean deleteSample(Long id);/*** 查找* @param id ID* @return {@link SampleDto},没有相应对象则返回{@code null}*/SampleDto getSample(Long id);/*** 分页查找* @param index 页码下标* @param size 每页尺寸* @return 分页对象*/Page<SampleDto> pageSample(int index, int size);
}

3.服务实现类代码

@Service
public class SampleServiceImpl implements SampleService {private static final Logger logger = LoggerFactory.getLogger(SampleServiceImpl.class);@Autowiredprivate IdGenerator idGenerator;@Autowiredprivate SampleMainMapper sampleMainMapper;@Override@Transactionalpublic Long createSample(SampleDto dto) {logger.info("#createSample {}", dto);Date currentDate = DateUtils.getCurrentDate();long id = idGenerator.nextId();SampleMain sampleMain = BeanUtils.copyProps(dto, SampleMain.class);sampleMain.setId(id);sampleMain.setGmtCreate(currentDate);sampleMain.setGmtModified(currentDate);sampleMain.setDeleted(Boolean.FALSE);sampleMainMapper.insertSelective(sampleMain);return id;}@Override@Transactionalpublic boolean updateSample(SampleDto dto) {logger.info("#updateSample {}", dto);Date currentDate = DateUtils.getCurrentDate();SampleMain sampleMain = BeanUtils.copyProps(dto, SampleMain.class);sampleMain.setGmtModified(currentDate);int rows = sampleMainMapper.updateByPrimaryKeySelective(sampleMain);return rows > 0;}@Override@Transactionalpublic boolean deleteSample(Long id) {logger.info("#deleteSample {}", id);int rows = sampleMainMapper.deleteByPrimaryKey(id);return rows > 0;}@Overridepublic SampleDto getSample(Long id) {logger.info("#getSample {}", id);SampleMain sampleMain = sampleMainMapper.selectByPrimaryKey(id);return BeanUtils.copyProps(sampleMain, SampleDto.class);}@Overridepublic Page<SampleDto> pageSample(int index, int size) {logger.info("#pageSample index={}, size={}", index, size);PageInfo<SampleMain> pageInfo = PageHelper.offsetPage(index * size, size)// 分页.setOrderBy("GMT_CREATE DESC")// 排序.doSelectPageInfo(new ISelect() {@Overridepublic void doSelect() {sampleMainMapper.selectAll();}});return PageCopier.copy(pageInfo, SampleDto.class);}}

我们可以看到sampleMainMapper中的insertSelective、deleteByPrimaryKey、updateByPrimaryKeySelective、selectByPrimaryKey这些常见的方法都已经帮我们集成好了,我们只需要调用接口了,完全没必要自己写,可谓简单又高效。

如果想了解更多内容的童鞋可以去官网查看:https://github.com/abel533/Mapper/wiki

要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~

【SpringBoot】tk.mybatis集成,帮你更加傻瓜式的写代码~相关推荐

  1. SpringBoot和MyBatis集成案例(学习笔记)

    声明:本案例学习http://blog.csdn.net/je_ge,在此感谢je_ge提供的学习用的资料 1.项目目录结构 2.pom.xml的内容如下 <project xmlns=&quo ...

  2. mybatis集成JNDI【注部署项目后测试代码在jsp或servlet中】

    pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns="http ...

  3. 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)

    说到登录注册,就会想到先要注册一个用户名,在进行登入,但是现在大多数的网站都集成了微信登入,不需要注册,给你一个二维码,微信一扫直接登录.这确实是十分便捷的.所以我们会尽量在项目中实现这一功能.减少用 ...

  4. Springboot整合Mybatis报错大集合(保姆式排错)

    一.依赖导入错误 如果发现你的注解报错,或者存在无法自动注入bean的错误,那么你就要看看是不是你的依赖导入错误: 错误重现:导入错误依赖 Error starting ApplicationCont ...

  5. SpringBoot与Mybatis的集成

    SpringBoot与Mybatis集成: 准备 Maven依赖 引入Druid 12345 <dependency> <groupId>com.alibaba</gro ...

  6. 通用权限管理系统组件 (GPM - General Permissions Manager) 不改数据库、甚至不写代码就集成铜墙铁壁权限管理组件...

    为什么80%的码农都做不了架构师?>>>    越成熟的东西,越牛X的东西,越简单才对,简单才是硬道理,苹果的手机只有少数几个按键,苹果Ipad也很少的按钮,甚至连苹果的笔记本键盘都 ...

  7. 写代码效率不高?放过 Ctrl C 和 V,让 AI 来能帮你写代码吧

    本文首发自微信公众号 - Tomcat那些事儿(tomcat0000) 做为程序员,不知道你有没有想像过,如果某天,不再需要面向Google.Stackoverflow编程,不再需要Ctrl + C ...

  8. spring-boot 速成(8) 集成druid+mybatis

    spring-boot与druid.mybatis集成(包括pageHelper分页插件), 要添加以下几个依赖项: compile('mysql:mysql-connector-java:6.0.5 ...

  9. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

最新文章

  1. 删除目录下大量小文件和清空大文件
  2. 服务器ubuntu系统版本选型原则,系统集成 - 选择Ubuntu服务器版操作系统的六大理由_服务器应用_Linux公社-Linux系统门户网站...
  3. lua菜鸟教程_Lua语言学习
  4. 测试或运维工作过程中最常用的几个linux命令?
  5. bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
  6. 攻防世界 WEB 新手练习区 答题(1-12题解)
  7. python爬取网易云音乐歌词_python3爬取网易云音乐歌单里的歌词(含源码)
  8. uniapp-小程序 调用阿里云OCR身份证识别
  9. 华为星环大数据_华为和星环大数据平台关键能力对比(附报告)
  10. 【预测模型】基于粒子群算法优化DBN深度置信网络实现数据预测matlab代码
  11. MCS9865串口卡并口卡驱动
  12. 带左右箭头图片轮播的JS代码
  13. MJB,阿里又一次成功的营销?
  14. 职业体育与同性恋:假宽容与真偏见
  15. 教程:简单十步,在 iTunes 申请 App Store 退款
  16. Node.js下载安装与配置淘宝加速器cnpm
  17. 经纬度转高斯坐标 java_经纬度坐标与高斯坐标的转换代码
  18. SVG - 在Android中使用矢量图全攻略
  19. 达梦出席湖北银行业金融机构信息科技风险管理研讨会
  20. CF 375C Circling Round Treasures(状态压缩+bfs)

热门文章

  1. Gamemaker小课堂#0 如何为 Windows 游戏编写 DLL 扩展
  2. 服务器被黑客用来挖矿?怎么办?
  3. (PS教程)01-用PS给证件照排版
  4. 常用正则表达式,常用表单验证javascript代码
  5. 计算机网络基础——网络的性能
  6. swift android界面,使用 Swift 语言编写 Android 应用入门
  7. Leaving fence domain… found dlm lockspace /sys/kernel/dlm/rgmanager
  8. Mac 自动代理切换
  9. 拒绝安利:安利的真相 丁黎
  10. matlab提取数据的一部分,matlab如何提取数组中的满足一定范围的一段数据