数据库CURD必备搭档mybatis plus详解

数据库CURD必备搭档mybatis plus详解

什么是MyBatis Plus

MyBatis Plus是一个基于MyBatis的增强工具,简化了MyBatis的操作,减少了开发人员的工作量,让开发人员能够更加专注于业务逻辑的实现。

MyBatis Plus的常用功能

  1. 快速Mapper接口的开发
  2. 自动分页
  3. 自动注入公共字段
  4. 代码生成器

快速开发Mapper接口

MyBatis Plus 提供了一个BaseMapper接口,这个接口实现了一些CRUD的基本方法,我们可以通过继承这个接口,快速开发Mapper接口。

public interface UserMapper extends BaseMapper<User> {
  // 自定义Mapper接口方法
  List<User> selectAll();
}

以上代码我们就定义了一个UserMapper的接口,并且继承了BaseMapper接口,我们不需要再去编写一些基本的SQL语句,就可以直接使用BaseMapper的方法进行CRUD操作。如果我们还需要自定义一些语句,可以在接口中定义其他方法。

自动分页功能

// 手动实现分页
Page<User> page = new Page<>(1, 10);
List<User> userList = userMapper.selectPage(page, null);
page.setRecords(userList);

// 使用自动分页
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 20);
IPage<User> userIPage = userMapper.selectPage(new Page<>(1, 10), wrapper);
List<User> users = userIPage.getRecords();

以上代码我们使用了自动分页的功能,只需要在传入Page参数的时候,同时传入查询条件即可,查询结果会自动分页返回。

自动注入公共字段

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    this.strictInsertFill(metaObject, "createBy", Long::valueOf, "admin");
    this.strictInsertFill(metaObject, "createTime", Date::new, new Date());
    this.strictInsertFill(metaObject, "updateBy", Long::valueOf, "admin");
    this.strictInsertFill(metaObject, "updateTime", Date::new, new Date());
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    this.strictUpdateFill(metaObject, "updateBy", Long::valueOf, "admin");
    this.strictUpdateFill(metaObject, "updateTime", Date::new, new Date());
  }
}

以上代码我们定义了一个 MyMetaObjectHandler 的类,并实现了 MetaObjectHandler 接口,然后重写了它的 insertFill 和 updateFill 方法,在这两个方法里,我们将公共字段以及对应的值进行设置,接下来我们在需要自动设置的实体类上加上 @TableField 注解即可。

@Data
@TableName(value = "t_user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField(value = "name")
    private String name;
    @TableField(value = "age")
    private Integer age;
    @TableField(value = "email")
    private String email;
}

MyBatis Plus的代码生成器

MyBatis Plus 还提供了一个代码生成器,可以根据已有的数据库结构,自动生成对应的实体类、Mapper接口以及Mapper.xml文件。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.2</version>
</dependency>

以上代码我们需要在项目中引入 mybatis-plus-generator 的依赖,并添加以下代码,来生成对应文件。

public class CodeGenerator {
  public static void main(String[] args) {
    AutoGenerator mpg = new AutoGenerator();
    String projectPath = System.getProperty("user.dir");
    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    gc.setOutputDir(projectPath + "/src/main/java");
    gc.setAuthor("authorName");
    gc.setOpen(false);
    mpg.setGlobalConfig(gc);
    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test");
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("root");
    mpg.setDataSource(dsc);
    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setModuleName("test");
    pc.setParent("com.example");
    mpg.setPackageInfo(pc);
    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    strategy.setTablePrefix("t_");
    strategy.setInclude("t_user");
    strategy.setNaming(NamingStrategy.underline_to_camel);
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);
    mpg.setStrategy(strategy);
    // Mapper 配置
    mpg.setTemplateEngine(new FreemarkerTemplateEngine());
    TemplateConfig templateConfig = new TemplateConfig();
    templateConfig.setXml(null);
    mpg.setTemplate(templateConfig);
    //执行生成
    mpg.execute();
  }
}

以上代码我们定义了一个 CodeGenerator 的类,主要设置了文件输出路径、作者,数据库连接信息以及生成器的包策略,我们只需要将它运行一次,就可以生成所需的 Mapper 接口、实体类和 Mapper.xml 文件。

总结

MyBatis Plus作为MyBatis的一个增强工具,提供了许多方便开发者使用的功能,如快速开发Mapper接口,自动分页,自动注入公共字段以及代码生成器等功能。在实际开发中,可以大幅度提高开发效率,减少了开发人员的工作量,使开发人员更加专注业务逻辑实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据库CURD必备搭档mybatis plus详解 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • spring boot输入数据校验(validation)的实现过程

    下面我来给您讲解关于spring boot输入数据校验(validation)的实现过程的完整攻略。 1. 简介 Spring Boot提供了一种简单的方法来在Web应用程序中轻松实现输入数据的校验。它可以通过使用声明式注解进行实现,这些注解在处理表单输入时特别有用。 1.1 常用的校验注解 Spring Boot中常用的校验注解包括: @NotNull:验…

    Java 2023年5月20日
    00
  • Java中字符串String的+和+=及循环操作String原理详解

    Java中字符串String的+和+=及循环操作String原理详解 在Java中,字符串是一种不可变类型,这意味着一旦一个字符串对象被创建,它的值就不能被改变。在本文中,我们将详细讲解Java中字符串的操作及其原理。 Java中字符串的+和+= 在Java中,你可以使用”+”或”+=”运算符来连接两个字符串。这两个运算符的作用相同,即将两个字符串连接为一个…

    Java 2023年5月26日
    00
  • java工程师进阶之MyBatis延迟加载的使用

    Java工程师进阶之MyBatis延迟加载的使用攻略 MyBatis是Java中常用的一款ORM框架,它能够简化Java与关系型数据库的交互,提高工作效率。MyBatis在优化查询性能方面表现尤为突出,其中延迟加载技术尤为重要。本篇攻略将重点介绍MyBatis中的延迟加载技术的使用方法及技巧。 什么是MyBatis的延迟加载 MyBatis的延迟加载(Laz…

    Java 2023年5月20日
    00
  • 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!

    开心一刻   中午和哥们一起喝茶   哥们说道:晚上喝酒去啊   我:不去,我女朋友过生日   哥们瞪大眼睛看着我:你有病吧,充气的过什么生日   我生气到:有特么生产日期的好吧 需求背景   系统对接了外部系统,调用外部系统的接口需要付费,一个接口一次调用付费 0.03 元   同一个月内,同一个接口最高付费 25 元   统计每个月的付费情况   需求清…

    Java 2023年4月28日
    00
  • Java实现按行分割大文件

    以下是Java实现按行分割大文件的完整攻略,包含步骤、代码示例和输出结果。 步骤一:准备工作 首先,需要导入Java中的IO包,以便读取和处理文件。 import java.io.*; 接着,需要定义一个方法来实现按行分割文件,命名为splitByLine。 public static void splitByLine(String fileName, in…

    Java 2023年5月20日
    00
  • SpringBoot 自定义注解实现涉密字段脱敏

    下面是详细的攻略: 简介 在实际项目中,很多时候需要对涉密字段进行脱敏,以保护用户隐私,比如手机号、身份证号、银行卡号等。本文将介绍如何使用 SpringBoot 自定义注解来实现涉密字段的脱敏功能。 步骤 定义注解 首先需要定义一个注解,用于标识需要脱敏的字段。可以自定义一个 @SensitiveInfo 注解,该注解可以用在类、字段、方法等地方。注解可以…

    Java 2023年6月3日
    00
  • Java实现常用的三种加密算法详解

    Java实现常用的三种加密算法详解 在现今的网络环境中,数据安全越来越重要。加密算法就是保证数据安全的重要手段之一。在Java语言中,实现常用的三种加密算法十分方便。这里将分别介绍Java中常用的MD5、SHA和AES加密算法的实现方法。 1. MD5加密 MD5(Message-Digest Algorithm 5)算法是一种常用的摘要算法,可以将任意长度…

    Java 2023年5月19日
    00
  • 如何在jsp界面中插入图片

    在JSP界面中插入图片,可以使用HTML标签来实现。下面是详细的步骤: 1. 在JSP页面中使用标签 在JSP页面中,使用以下代码追加标签到对应的位置: <img src="图片地址"> 其中,src属性指定了图片的路径。图片可以是相对路径或者绝对路径。如: 相对路径: <img src="../assets/…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部