首页 > 其他分享 >tk-mybatis的使用教程及使用Example进行查询的几种方式

tk-mybatis的使用教程及使用Example进行查询的几种方式

时间:2025-01-08 16:55:25浏览次数:1  
标签:Mapper name 查询 record tk mybatis example Example

1.引入依赖

<!--通用mapper起步依赖-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.4</version>
</dependency>

<!--每个工程都有Pojo,都需要用到该包对应的注解-->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
</dependency>

2.mapper接口继承基础增删改查Mapper,批量增删改查MySqlMapper

public interface StudentMapper extends Mapper<Student>, MySqlMapper<Student>,ExampleMapper<Student> {
}

3.在启动类上加上@MapperScan("com.study.test.mapper.**"),注意导入tkMybatis的包下的注解。

@SpringBootApplication
@MapperScan(basePackages = {"com.study.test.mapper"})
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

4.crud(增删改查)方法

增加
Mapper.insert(record); 保存一个实体,null的属性也会保存,不会使用数据库默认值
Mapper.insertSelective(record); 保存一个实体,忽略空值,即没提交的值会使用使用数据库默认值

删除
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.selectByPrimaryKey(key) 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
Mapper.selectCount(record) 根据实体中的属性查询总数,查询条件使用等号
Mapper.selectCountByExample(example) 根据Example条件进行查询总数
Mapper.selectOne(record) 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号。
但是如果存在某个属性为int,则会初始化为0。可能影响到实际使用

5.条件查询,在使用Example进行查询的几种方式

其中weekend方式需要升级jdk到1.8及以上。

首先定义数据库表的实体类:

public class Student {
    private Long id;
    private Long count;
    private String name;

    public Long getId() {
        return id;
    }
    public Long getCount() {
        return count;
    }
    public String getName() {
        return name;
    }

//    setter……
}

此处省略了数据库表映射和set方法。

接下来就是实现example查询的几种方式,核心代码如下:

方式一:普通Example方式(从and方法开始可以实现动态sql拼接)

    Example example = new Example(Student.class);
    example
      //.selectProperties("name","cabName")
        .and().andEqualTo("count",0)
        .andLike("name","%d%");

    // 排序
    example.orderBy("CreatedTime")
        /*.desc()*/
          .orderBy("Id").desc();

    // 获得结果
    List<Student> brands = brandEntityMapper.selectByExample(example);

 

方式二:Criteria方式(可使用criteria完成动态sql拼接)

Example example = new Example(Student.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("count", 0)
        .andLike("name", "%d%");
example.orderBy("count")
        //.desc()
        .orderBy("name").desc();
List<Student> demos = mybatisDemoMapper.selectByExample(example);

 

方式三:Example.builder 方式(其中where从句中内容可以拿出来进行动态sql拼接)

Example example = Example.builder(Student.class)
        .select("Id","Name")
        .where(Sqls.custom().andEqualTo("count", 0)
        .andLike("name", "%d%"))
        .orderByDesc("count","name")
        .build();
List<Student> demos = mybatisDemoMapper.selectByExample(example);

 

方式四:Example.builder + Weekend方式,优势:不用输入属性名,避免数据库有变动或输入错误就会出错

//获得seekendsql
WeekendSqls<Student> sqls = WeekendSqls.<Student>custom();

//可进行动态sql拼接
sqls = sqls.andEqualTo(Student::getCount,0).andLike(Student::getName,"%d%");

//获得结果
List<Student> demos = mybatisDemoMapper.selectByExample(Example.builder(Student.class).where(sqls).orderByDesc("count","name").build());

 

参考内容:

https://github.com/abel533/Mapper/wiki/6.example

https://cloud.tencent.com/developer/article/2063029

https://blog.csdn.net/weixin_59816940/article/details/127747890

标签:Mapper,name,查询,record,tk,mybatis,example,Example
From: https://www.cnblogs.com/sfnz/p/18660090

相关文章

  • Python的Tkinter库创建了一个图形用户界面(GUI)应用程序,实现了一个简单的薪资计算系统
    importtkinterastkfromtkinter.fontimportFontfromtkinterimportmessageboxclassPayrollSystem:def__init__(self,root):self.root=rootroot.config(bg='#83a7de')self.mainframe=tk.Frame(root,bg='#8......
  • MybatisPlus插件功能-分页查询
    1.分页插件基本用法首先,要在配置类中注册MybatisPlus的核心插件,同时添加分页插件:@ConfigurationpublicclassMybatisConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){//初始化核心插件MybatisPlusInterceptorinterc......
  • 【MyBatis-Plus 分页插件】深入分析和实战解析
    分页是Web应用开发中的高频需求,而在MyBatis的生态中,MyBatis-Plus分页插件和PageHelper是两种常见的实现方案。本文将通过工作机制、使用方法和细节剖析,带你循序渐进地掌握这两种方式,并为你的项目选择提供指导。一、什么是分页?分页的核心目标是减少数据传输......
  • 全面掌握Spring Boot + MyBatis + Maven + MySQL:从开发到部署的后端技术详解
    全面掌握SpringBoot+MyBatis+Maven+MySQL:从开发到部署的后端技术详解前言从零开始:我的第一篇后端开发技术文档作为一名后端开发的新手,我曾在自己的学习过程中遇到过许多挑战:如何选择合适的技术栈、如何理解框架的工作原理、以及如何将这些技术应用到实际的项目中......
  • GTK?
    #include<gtk/gtk.h>staticvoidon_activate(GtkApplication*app,gpointeruser_data){GtkWidget*window;GtkWidget*button;//创建一个新窗口window=gtk_application_window_new(app);gtk_window_set_title(GTK_WINDOW(window),"HelloGTK");gtk......
  • MyBatis 一对一查询中的列名冲突问题及多种解决方案
    MyBatis一对一查询中的列名冲突问题及多种解决方案引言在使用MyBatis进行数据库操作时,尤其是在处理多表关联查询时,我们经常会遇到列名冲突的问题。这种问题通常是由于查询结果中出现了重复的列名,导致MyBatis在映射结果时无法正确区分这些列。本文将详细描述我在开发过程中......
  • 《深入理解Mybatis原理》MyBatis的sqlSession执行流程
    sqlSessionFactory与SqlSession正如其名,Sqlsession对应着一次数据库会话。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新......
  • Bootkitty:Linux uefi bootkit 分析
    目录Bootkitty:Linuxuefibootkit分析文件信息0、ModuleEntryPoint入口函数1、hookdo_start_imagehook_grub_1_mods__do_start_image_18000EFB0do_start_image(目标函数)hook_grub_f1__do_start_image_18000DE20(do_start_image的hook函数)hook_and_patch_kernel_18000F5C0(安......
  • MyBatis 一对一查询中的 `<association>` 标签配置详解
    MyBatis一对一查询中的<association>标签配置详解引言在使用MyBatis进行数据库操作时,一对一查询是一种常见的需求。尤其是在处理主表和从表之间的关联关系时,如何正确配置<association>标签成为了一个关键问题。本文将通过一个具体的案例,详细分析MyBatis中<associatio......
  • SpringBooot3.4.x,Mybatis-Plus3.5.x报错:Invalid value type for attribute 'factoryBe
    SpringBooot3.4.x,Mybatis-Plus3.5.x报错:Invalidvaluetypeforattribute'factoryBeanObjectType':java.lang.String解决方案原因mybatis-plus-boot-starter中mybatis-spring版本与SpringBooot3不兼容方式1将mybatis-plus-boot-starter替换为mybatis-plus-spring-boot3-sta......