Mybatis-plus条件构造器

一、可重用性

Mybatis-plus作为Mybatis的扩展工具,提供了丰富的功能让开发更加高效便捷。其中之一的条件构造器可以帮助我们构建各种查询条件,而且支持链式调用,非常适合多条件查询,可以让代码更加简洁,易读易懂。例如:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三").eq(User::getSex, "男");
List<User> userList = userService.list(wrapper);

上述代码中,我们使用了LambdaQueryWrapper构造器,通过调用eq方法添加查询条件,最终得到用户列表。该构造器还支持很多其他的查询条件,例如like、in、between、isNull等等,且这些条件可以组合使用,非常灵活方便。

二、自动填充字段

在实际开发中,我们经常需要记录创建时间、更新时间、创建人、更新人等信息,Mybatis-plus也为我们提供了自动填充功能,可以在插入和更新操作时自动填充这些字段。具体实现如下:

public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        LocalDateTime now = LocalDateTime.now();
        this.setFieldValByName("createTime", now, metaObject);
        this.setFieldValByName("updateTime", now, metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

上述代码中,我们实现了Mybatis-plus提供的MetaObjectHandler接口,重写了insertFill和updateFill方法,在插入和更新操作时分别设置了createTime和updateTime字段的值。这样,我们在插入或更新实体时不用手动赋值,Mybatis-plus会自动填充。

三、分页查询

分页查询是Web应用的常见需求之一,Mybatis-plus也提供了分页查询的功能,非常方便。我们只需要在查询条件中添加分页信息,然后调用相关方法即可,如下所示:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三").eq(User::getSex, "男");

Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page, wrapper);
List<User> userList = userPage.getRecords();

上述代码中,我们使用了分页查询的方法page,第一个参数是当前页数,第二个参数是每页记录数。我们还使用了IPage接口,通过getRecords方法获取当前页的记录列表,非常方便。

四、动态SQL拼装

Mybatis-plus的条件构造器不仅支持基本的查询条件,还支持动态SQL拼装,配合注解使用可以生成更加复杂的SQL语句。例如我们需要查询名字是“张三”或者“李四”的用户,可以使用如下代码:

@Select({"<script>",
        "SELECT * FROM user WHERE 1=1",
        "<when test='name != null'>",
        "AND name in",
        "<foreach item='item' index='index' collection='name' open='(' separator=',' close=')'>",
        "#{item}",
        "</foreach>",
        "</when>",
        "</script>"})
List<User> findUserList(@Param("name") List<String> name);

上述代码中,我们使用了@Select注解和${}占位符语法,通过动态SQL拼装实现了查询名字是“张三”或“李四”的用户。

五、代码生成器

Mybatis-plus还提供了代码生成器的功能,可以根据数据库表结构自动生成实体、Mapper、Service等相关代码,大大提高了开发效率。使用该功能非常简单,只需要配置相关参数,运行代码生成器即可。示例如下:

public class CodeGenerator {

    public static void main(String[] args) {
        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8")
                .setUsername("root")
                .setPassword("root");

        // 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(true)
                .setAuthor("coder-pig")
                .setOutputDir("D:\\src\\main\\java")
                .setFileOverride(true);

        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)
                .setNaming(NamingStrategy.underline_to_camel)
                .setInclude("user");

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.coderpig")
                .setMapper("mapper")
                .setEntity("entity")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller");

        // 代码生成器
        AutoGenerator generator = new AutoGenerator();
        generator.setDataSource(dataSourceConfig)
                .setGlobalConfig(config)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        // 执行
        generator.execute();
    }
}

上述代码中,我们配置了数据源信息、输出目录、生成策略、包配置等参数,并通过执行generator.execute()方法启动代码生成器。生成的代码文件可以直接拷贝到项目中使用,非常方便快捷。

原创文章,作者:AJQYP,如若转载,请注明出处:https://www.506064.com/n/372934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AJQYPAJQYP
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相关推荐

  • 条件运算符(?:)是什么意思?

    条件运算符(?:)是JavaScript中的一种特殊的运算符,也是许多编程语言中相似语法的一部分。它可以允许我们在一个简单、一行的语句中完成条件判断和赋值操作,非常方便。 1.语法…

    编程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一种非常流行的ORM框架,提供了SQL映射配置文件,可以使用类似于传统SQL语言的方式编写SQL语句。其中,SQL的Limit语法是一个非常重要的知识点,能够实现分…

    编程 2025-04-29
  • Django ORM如何实现或的条件查询

    在我们使用Django进行数据库操作的时候,查询条件往往不止一个,一个好的查询语句需要考虑我们的查询要求以及业务场景。在实际工作中,我们经常需要使用或的条件进行查询,本文将详细介绍…

    编程 2025-04-29
  • 素数条件Python

    本文将对素数条件Python进行详细阐述,介绍其概念、优缺点及应用场景。 一、概念 素数条件Python是一种基于Python语言的编程模式,其特点在于对于给定自然数$x$,判断其…

    编程 2025-04-27
  • Python中不满足条件重复执行的解决方法

    本文将以Python中不满足条件重复执行为中心,从多个方面进行详细阐述解决方法。 一、while循环 while循环是Python中常用的循环语句之一,它可以用于重复执行一段代码,…

    编程 2025-04-27
  • Mybatis中update if详解

    一、if标签的基本用法 在Mybatis中使用update语句更新数据库表中的一条或多条数据,我们通常通过if标签来动态生成update语句。if标签的使用方法如下: <up…

    编程 2025-04-25
  • C#条件编译指令

    一、定义和作用 是C#中的条件编译指令,用于根据条件的不同来编译不同的代码块。在编译程序时,编译器会根据指定的条件来判断该代码块是否需要被编译。这个指令对于处理不同平台的代码、处理…

    编程 2025-04-25
  • Mybatis批量插入操作

    一、基本概念 Mybatis是一种基于java的持久层框架,旨在帮助开发人员简化数据库操作。该框架提供了多种方式来执行数据库操作,其中包括批量插入。批量插入是一种在单个事务中提交多…

    编程 2025-04-25
  • MyBatis如何防止SQL注入

    MyBatis是一款开源的持久层框架,它可以简化Java应用程序中的数据持久化过程,并提供了许多有用的功能。然而,安全问题一直是Web应用程序的一大挑战,其中最严重的问题之一是SQ…

    编程 2025-04-25
  • Vue条件渲染

    一、v-if和v-show区别 v-if和v-show都是Vue中的条件渲染指令,它们可以根据给定的表达式的真假条件来显示或隐藏元素。但是,它们的实现方式有所不同。 v-if:根据…

    编程 2025-04-24

发表回复

登录后才能评论