Tkmybatis快速入手

本文介绍了如何使用TkMybatis进行数据库操作,包括创建实体类与数据库表的关系、使用Mapper接口进行CRUD操作,以及利用Example条件进行复杂查询。Lombok简化了代码,提高开发效率。
摘要由CSDN通过智能技术生成

mysql

mysql-connector-java

tk.mybatis

mapper

3.4.2

tk.mybatis

mapper-spring-boot-starter

1.1.3

org.projectlombok

lombok

true

2、创建数据库表对应实体类对象

DROP TABLE IF EXISTS category;

CREATE TABLE category (

category_id INT PRIMARY KEY,

category_name VARCHAR (50) NOT NULL,

description VARCHAR (100)

);

DELETE FROM category;

INSERT INTO category (category_id, category_name, description) VALUES

(1, ‘Beverages’, ‘test’),

(2, ‘Condiments’, ‘test’),

(3, ‘Oil’, ‘test’);

@Data

@Table(name = “category”)

public class Category {

@Id

@Column(name = “category_id”)

private Integer categoryID;

private String categoryName;

private String description;

}

实体类中,使用了以下注解:

@Table

描述数据库表信息,主要属性有name(表名)、schema、catalog、uniqueConstraints等。

@Id

指定表主键字段,无属性值。

@Column

描述数据库字段信息,主要属性有name(字段名)、columnDefinition、insertable、length、nullable(是否可为空)、precision、scale、table、unique、updatable等。

@ColumnType

描述数据库字段类型,可对一些特殊类型作配置,进行特殊处理,主要属性有jdbcType、column、typeHandler等。

@Transient

标识该属性不进行数据库持久化操作,无属性。

还有其他相关注解,如@ColumnResult、@JoinColumn、@OrderBy、@Embeddable等,可以做简单解一下,用的不多。

@Data

lombok插件用于简化代码的注解,无需写get set 等代码。

3、Mapper数据库操作接口

只需要继承tk.mybatis.mapper.common.Mapper即可。

4、Tkmybatis数据库操作方法API

Mapper.insert(record);

保存一个实体,null的属性也会保存,不会使用数据库默认值

Mapper.insertSelective(record);

保存一个实体,null的属性不会保存,会使用数据库默认值

Mapper.delete(record);

根据实体属性作为条件进行删除,查询条件使用等号

Mapper.deleteByExample(example)

根据Example条件删除数据

Mapper.deleteByPrimaryKey(key)

根据主键字段进行删除,方法参数必须包含完整的主键属性

Mapper.updateByExample(record, example)

根据Example条件更新实体record包含的全部属性,null值会被更新

Mapper.updateByExampleSelective(record, example)

根据Example条件更新实体record包含的不是null的属性值

Mapper.updateByPrimaryKey(record)

根据主键更新实体全部字段,null值会被更新

Mapper.updateByPrimaryKeySelective(record)

根据主键更新属性不为null的值

Mapper.select(record)

根据实体中的属性值进行查询,查询条件使用等号

Mapper.selectAll()

查询全部结果

Mapper.selectByExample(example)

根据Example条件进行查询

Mapper.selectByExampleAndRowBounds(example, rowBounds)

根据example条件和RowBounds进行分页查询

Mapper.selectByPrimaryKey(key)

根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号

Mapper.selectByRowBounds(record, rowBounds)

根据实体属性和RowBounds进行分页查询

Mapper.selectCount(record)

根据实体中的属性查询总数,查询条件使用等号

Mapper.selectCountByExample(example)

根据Example条件进行查询总数

Mapper.selectOne(record)

根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号

Example条件 (自定义查询条件)

//注意:(addEqualTo)这里的userId是映射的实体类。

@Test

public void selectAllTest2() {

Example example = new Example(Category.class);

example.createCriteria()

.andEqualTo(“categoryID”,1)

.andEqualTo(“categoryName”,“Beverages”);

List categories = categoryDao.selectByExample(example);

System.out.println(categories);

assertEquals(true, categories.size() > 0);

}

//注意:(addCondition)这里的user_id是数据库的字段。即where后面的条件。应该写sql语句。

@Test

public void selectAllTest3() {

Example example = new Example(Category.class);

example.createCriteria()

.andCondition(“category_id=”,1)

.andCondition(“category_name=”,“Beverages”);

List categories = categoryDao.selectByExample(example);

System.out.println(categories);

assertEquals(true, categories.size() > 0);

}

Example条件基本涵盖了常用的sql条件,并且支持使用原生sql语句字符串查询。

拓展-复杂查询

方式1:

public class ComplexTKMapperTest {

@Autowired

CategoryDao categoryDao;

@Test

public void testNestConditions(){

Example e = new Example(Category.class);

Example.Criteria c = e.createCriteria();

//关键字查询部分

String keyword = “key”;

if (!StringUtils.isEmpty(keyword)) {

c.orEqualTo(“categoryName”, keyword)

.orEqualTo(“categoryID”,keyword)

.orEqualTo(“description”,keyword);

}

//部门查询部门

Example.Criteria criteria = e.createCriteria();

criteria.andEqualTo(“categoryID”, “1112”);

e.and(criteria);

List users = categoryDao.selectByExample(e);

}

}

执行的sql为:

SELECT category_id, category_name, description FROM category WHERE (

category_name = ?

OR category_id = ?

OR description = ? ) AND (category_id = ?)

方式2

@Test

public void testNestConditions2(){

Weekend weekend = new Weekend<>(Category.class);

//关键字查询部分

String keyword = “key”;

WeekendCriteria<Category, Object> keywordCriteria = weekend.weekendCriteria();

if (!StringUtils.isEmpty(keyword)) {

keywordCriteria.orLike(Category::getCategoryName, keyword).

orLike(Category::getCategoryID, keyword)

.orLike(Category::getDescription, keyword);

//此处不需要再用下面这一句了,不然上面这个条件组合会重复一次

//weekend.and(keywordCriteria)

}

//部门查询部分

Example example = new Example(Category.class);

Example.Criteria criteria = example.createCriteria();

criteria.andEqualTo(“categoryID”, “i222”);

weekend.and(criteria);

List users = categoryDao.selectByExample(weekend);

}

其中Weekend是高版本的通用mapper版本才有,而且需要java8语法支持。

在这里插入图片描述

执行效果如下图:

在这里插入图片描述

总结下来,就是

每个条件组合(a/b/c) (d)各自创建自己的cirteria,再用and或者or方法去连接

结语

Tkmybatis极大地提高了我们对单表数据库操作的开发效率,可以在实际项目开发中推荐使用。


拓展部分:

源码的简单分析,大家可以自己基于这个原理自定义特定的需求

此框架为我们实现这些功能所有的改动都在Mapper层面,所有的Mapper都继承了tk.mybatis.mapper.common.Mapper

public interface WorkerMapper extends Mapper {}

Mapper接口的声明如下,可以看到Mapper接口实现了所有常用的方法

public interface Mapper extends BaseMapper, ExampleMapper, RowBoundsMapper, Marker {

}

看一下完整的UML图,太大了,可以用新窗口打开,放大之后再看

在这里插入图片描述

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

那么如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(一)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Mysql面试题汇总(二)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计

Redis常见面试题汇总(300+题)

Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
如何才能正确的掌握Redis呢?

为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

  • 并发编程面试题汇总

  • JVM面试题汇总

  • Netty常被问到的那些面试题汇总

  • Tomcat面试题整理汇总

  • Mysql面试题汇总

  • Spring源码深度解析

  • Mybatis常见面试题汇总

  • Nginx那些面试题汇总

  • Zookeeper面试题汇总

  • RabbitMQ常见面试题汇总

JVM常频面试:

[外链图片转存中…(img-qKvsMnFG-1713373656308)]

Mysql面试题汇总(一)

[外链图片转存中…(img-MV0HYmVA-1713373656309)]

Mysql面试题汇总(二)

[外链图片转存中…(img-rc9kTKR4-1713373656309)]

Redis常见面试题汇总(300+题)

[外链图片转存中…(img-xyp7r5BH-1713373656309)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值