本文由 简悦 SimpRead 转码, 原文地址 www.shuzhiduo.com

前提:

基于SpringBoot项目,正常集成Mybatis后,为了简化sql语句的编写,甚至达到无mapper.xml文件。
在本篇总结教程,不在进行SpringBoot集成Mybatis的概述。

如有需要, 请查看我另一篇文章 SpringBoot 集成 MyBatis,这里不再赘述。

一. 实现步骤

1. 引入TkMybatis的Maven依赖
2. 实体类的相关配置,@Id,@Table
3. Mapper继承tkMabatis的Mapper接口
4. 启动类Application或自定义Mybatis配置类上使用@MapperScan注解扫描Mapper接口
5. 在application.properties配置文件中,配置mapper.xml文件指定的位置[可选]
6. 使用TkMybatis提供的sql执行方法
PS :1. TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时,会报错,这时使用@Table为实体类指定表。(这种对应规则为驼峰命名规则)2. 使用TkMybatis可以无xml文件实现数据库操作,只需要继承tkMybatis的Mapper接口即可。3. 如果有自定义特殊的需求,可以添加mapper.xml进行自定义sql书写,但路径必须与步骤4对应。
6. 如有需要,实现mapper.xml自定义sql语句

二. 实现细节

2.1 引入TkMybatisMaven依赖
        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>4.0.3</version></dependency><!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.3</version></dependency>
2.2 实体类的配置
TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时,会报错,这时使用@Table为实体类指定表。(这种对应规则为驼峰命名规则)
下面以一个实体类Custoemr为例:
package cn.invengo.middleware.base.model;
import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
// @Table指定该实体类对应的表名,如表名为base_customer,类名为BaseCustomer可以不需要此注解
@Table(name = "t_base_customer")
public class Customer {// @Id表示该字段对应数据库表的主键id// @GeneratedValue中strategy表示使用数据库自带的主键生成策略.// @GeneratedValue中generator配置为"JDBC",在数据插入完毕之后,会自动将主键id填充到实体类中.类似普通mapper.xml中配置的selectKey标签@Id@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")private Long id;private String name;private String code;private String status;private String linkman;private String linkmanPhone;private String remark;private String attr01;private String attr02;private String attr03;private Date createDate;private Date lastUpdate;private Long creater;private Long lastUpdateMan;getter(),setter()方法省略...
}
2.3 Mapper继承tkMabatisMapper接口
import cn.base.model.Customer;
import tk.mybatis.mapper.common.Mapper;
/*** @ClassName:  CustomerMapper* @Description:TODO(Customer数据库操作层)* @author: wwj* @date:   2018年8月31日 上午10:12:20*/
public interface CustomerMapper extends Mapper<Customer> {
}
2.4 启动类Application或自定义Mybatis配置类上使用@MapperScan注解扫描Mapper接口
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import tk.mybatis.spring.annotation.MapperScan;
@SuppressWarnings("deprecation")
@SpringBootApplication
@MapperScan("cn.base.mapper")
public class MiddlewareApplication extends SpringBootServletInitializer {private static Logger logger = LoggerFactory.getLogger(MiddlewareApplication.class);public static void main(String[] args) {SpringApplication.run(MiddlewareApplication.class, args);logger.info("Application Start Success!");}// 当SpringBoot项目打成war包发布时,需要继承SpringBootServletInitializer接口实现该方法@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Application.class);}
}
2.5 application.properties配置mapper.xml配置文件的扫描路径
mybatis.mapperLocations=classpath*:cn/base/mapper/*.xml
2.6 使用TkMybatis提供的 sql 执行方法
import java.util.List;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.invengo.middleware.base.mapper.CustomerMapper;
import cn.invengo.middleware.base.model.Customer;
import cn.invengo.middleware.base.service.BaseCustomerService;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;
@Service
@Transactional
public class BaseCustomerServiceImpl implements BaseCustomerService {@Autowiredprivate CustomerMapper customerMapper;@Overridepublic List<Customer> selectByEntity(Customer customer) {if(Objects.isNull(customer)) {customer = new Customer();}Example example = new Example(Customer.class);Criteria criteria = example.createCriteria();criteria.andEqualTo(customer);return customerMapper.selectByExample(example);}@Overridepublic int insertSelective(Customer customer) {return customerMapper.insertSelective(customer);}@Overridepublic int updateSelectiveById(Customer record) {return customerMapper.updateByPrimaryKeySelective(record);}
}
2.7 如有需要, 自定义mapper.xml配置文件, 完成自定义 sql 编写
  1. 大多数复杂的需求,都能通过TkMyBatis的组合完成操作。这里以联表查询为例,自定义mapper.xml的sql编写。
  2. 该mapper.xml与以往普通方式的mapper.xml文件不同之处在于,这里不需要使用resultMap进行字段的映射。当然如果想在返回的Map中新增返回字段映射直接添加新的字段即可。
    使用tkmybatis,在数据模型修改之后,修改代码也较为简便,只需要修改对应实体类中的字段即可。
<?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="cn.invengo.middleware.base.mapper.ContainerMapper"><selectparameterType="java.lang.Long"resultType="java.lang.String">SELECT c.`code` FROM`t_base_container`c LEFT OUTER JOINt_base_deviced ON c.id =d.container_idWHERE d.id = #{deviceId,jdbcType=BIGINT};</select>
</mapper>

这里需要注意的是,不要自己在mapper.xml中在书写tkMybatis已经有的一些基础方法了,否则会报错提示方法重复。

SpringBoot 集成 TkMybatis相关推荐

  1. SpringBoot集成TkMybatis

    1.基本配置 1.1 添加通用 Mapper 提供的 starter 就完成了最基本的集成,依赖如下: springboot的版本都可以,本次用的是2.3.1.RELEASE<!--连接数据库- ...

  2. java项目tkmybatis整合_SpringBoot集成TkMybatis插件

    前提: 基于SpringBoot项目,正常集成Mybatis后,为了简化sql语句的编写,甚至达到无mapper.xml文件. 在本篇总结教程,不在进行SpringBoot集成Mybatis的概述. ...

  3. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  4. SpringBoot集成FreeMarker

    给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可. 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: &l ...

  5. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  6. springboot 集成logback

    springboot 集成logback 1.application.properties配置文件指定logback.xml logging.config=classpath:logback.xml ...

  7. springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题

    springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...

  8. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null) 参考文章: (1)SpringBoot集成Quartz(解决@Autowired空指针Nu ...

  9. SpringBoot集成全局异常处理

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot集成全局异常处理 前言 对于通常的MVC项目,大量的异常需要我们去处理,如此一来,我们的 Controll ...

  10. dubbo web工程示例_dubbo实战之二:与SpringBoot集成

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

最新文章

  1. hdoj1175 连连看(dfs+剪枝)
  2. linux c 文件指针 句柄(FILE*) 文件描述符(fd) 文件路径(filepath) 互相转换
  3. 4K观影体验需要网络端到端带宽50M-100M,时延RTT<=20ms,丢包率PLR<=3.4*10
  4. shell脚本之日志拆分和监听
  5. LaTeX参考文献中遇到错误:Missing $ inserted. [\printbibliography[heading=bibintoc]]
  6. 淘宝登货员1.02(重要升级)
  7. java集群调度_集群环境下定时调度的解决方案之Quartz集群
  8. linux shell crontab 定时操作(转)
  9. PreparedStatement的使用
  10. 网站在线协作工具 onlyoffice在线协作
  11. Spring 团队开源 nohttp;西部数据将中止与华为的战略合作
  12. 微信分享之分享图片/分享图标不能显示
  13. 如何使用FFmpeg命令处理音视频
  14. 实验一:Cifar10图像分类竞赛 学习记录
  15. qt线程如何接收linux信号,Linux-Qt使用QThread多线程isRunning标志量问题
  16. python聊天小程序支持私聊和多人_Python实现多人在线匿名聊天的小程序
  17. android怎么获取专辑名称,获取相册名称为Android的专辑封面
  18. 华为机试:节点队列的转发问题
  19. 一条优质公链需要具备哪些条件?
  20. 一键如何完成多张静态图合成GIF图?

热门文章

  1. CAD转CAD注意事项
  2. 神奇宝贝服务器服务器修改器,pkhex修改器最新版
  3. linux 传真 邮件,基于Linux的传真系统(转)
  4. Node.js 将MEGA网盘的指定目录下载并打包成ZIP
  5. 基于java高校教师管理系统_高校教师电子业务档案管理系统
  6. java代码实现雷达图_雷达图的一种实现! Cocos Creator !
  7. ROS实战篇(一)如何在ROS中编写自己的package?------ 以节点通信为例
  8. 虚幻4地形怎么增加层_虚幻周报20200512 | 该来的总会来的!
  9. c语言表达式优先级最高的是,C语言运算符优先级表
  10. vbs字符串正则_VBS教程:正则表达式简介 -字符匹配