前提:

基于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 引入TkMybatis的Maven依赖

tk.mybatis

mapper

4.0.3

tk.mybatis

mapper-spring-boot-starter

2.0.3

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继承tkMabatis的Mapper接口

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 {

}

01.png

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接口实现该方法

@Override

protected 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 {

@Autowired

private CustomerMapper customerMapper;

@Override

public List 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);

}

@Override

public int insertSelective(Customer customer) {

return customerMapper.insertSelective(customer);

}

@Override

public int updateSelectiveById(Customer record) {

return customerMapper.updateByPrimaryKeySelective(record);

}

}

02.png

2.7 如有需要,自定义mapper.xml配置文件,完成自定义sql编写

ps:

1. 大多数复杂的需求,都能通过TkMyBatis的组合完成操作。这里以联表查询为例,自定义mapper.xml的sql编写。

2. 该mapper.xml与以往普通方式的mapper.xml文件不同之处在于,这里不需要使用resultMap进行字段的映射。当然如果想在返回的Map中新增返回字段映射直接添加新的字段即可。

使用tkmybatis,在数据模型修改之后,修改代码也较为简便,只需要修改对应实体类中的字段即可。

eg:

ContainerMapper.xml:

id="selectCodeByDeviceId"

parameterType="java.lang.Long"

resultType="java.lang.String">

SELECT c.`code` FROM

`t_base_container`

c LEFT OUTER JOIN

t_base_device

d ON c.id =

d.container_id

WHERE d.id = #{deviceId,jdbcType=BIGINT};

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

本篇总结到此结束。

java项目tkmybatis整合_SpringBoot集成TkMybatis插件相关推荐

  1. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

  2. java web中整合mq_spring-web 集成 rabbitmq

    引入java包: 本项目中仅引入了四个java包:amqp-client-5.7.3.jar,spring-rabbit-2.2.2.RELEASE.jar,spring-retry-1.2.4.RE ...

  3. Java项目使用Redis缓存数据

    Java项目使用Redis缓存数据 一.Redis的下载安装 1.下载gcc编译器 yum install gcc-c++ 安装完成后检查是否安装成功,查看版本 gcc --version 2.使用w ...

  4. java web 框架整合开发_SpringBoot(二)Web整合开发

    本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特 ...

  5. java pipeline 实现_Docker+Jenkins+Pipeline实现持续集成(二)java项目构建

    插件推荐 插件名 作用 Blue Ocean Jenkins2.7以后可安装,是Jenkins的一种新视图,能够通过图形化的界面创建和编辑Jenkinsfile,实现pipeline as code ...

  6. IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

    IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证 Docker开启远程访问 修改该Docker服务文件 加载配置与重启 验证是否开启成功 IDEA配置docker 编写 ...

  7. discuz java版_Discuz3.2与Java 项目整合单点登陆

    整合部分 首先,当然是进行项目整合. 开始这一部分的前提是你的论坛已经启动并且安装好UCenter. 据了解 Discuz3.x 以下的版本是不带 UCenter 的,之前的就不去探讨了,如果没有的话 ...

  8. logincontroller.java_ucenter整合java项目,注册问题

    我实用ucenter整合java项目,注册是报错了.有没有人做过相应的项目,代码贴一下我看看.java.lang.NumberFormatException:Forinputstring:" ...

  9. vue打包放到Java项目里_如何把vuejs打包出来的文件整合到springboot里

    这个需求不知道是不是合适,因为静态的vuejs项目,用nginx部署,听说很快. 一般有这个需求的,都是用tomcat来部署java项目,tomcat转发静态vuejs,应该不会很快. 好吧,以上都是 ...

最新文章

  1. python如何小写p转换p_Python如何将字符串“p”从列表转换为变量值p
  2. JavaScript进阶1-学习笔记
  3. 系统分析与设计结对项目———Wordcount
  4. 25 张图,1.4 w字!彻底搞懂分布式事务原理
  5. 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)
  6. mysql 表死锁_MySQL Innodb表导致死锁日志情况分析与归纳
  7. Silverlight C# 游戏开发:项目开发实例和小技巧索引
  8. SpringCloud之Zuul网关
  9. 测试开发Python培训:抓取新浪微博抓取数据-技术篇
  10. linux之lsof使用技巧
  11. 密码生成器--python
  12. Atitit 各种设计图纸分类 目录 1. Atitit 常见软件设计图纸总结 2 1.1. Uml系列图纸 2 1.2. Er图 req需求图 2 1.3. Parametric diagr
  13. php 5.3 construct_PHP 构造方法 __construct()(转)
  14. spring boot 访问zul页面语言设置
  15. Windows XP操作系统自带工具应用详解(转)
  16. C语言12之什么是字符串类型?
  17. 笔记本电脑硬件升级-低成本、大幅提升体验
  18. iframe调用其他网站出现验证码错误
  19. python中摄氏度华氏度相互转换
  20. 科普:飞针测试机探针分类概要

热门文章

  1. 【JVM笔记】JVM发展历程—VM(Java虚拟机)介绍
  2. Proxmox VE(PVE) 安装 网心云
  3. Windows网络编程 — UDP完成端口的实现
  4. 相关系数之皮尔森相关系数
  5. 关于招投标项目经理需要知道什么
  6. Echarts之圆饼图用法
  7. 中国省份及其地级市整理JSON版(2015-08-23)
  8. android系统手机流量控制方法amp;,Android之——流量管理程序示范
  9. windows php gd 支持,windows服务器开启php的gd库方法
  10. Java聊天室的设计与实现