Mybatis/Mybatis-Plus基础(四)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Mybatis/Mybatis-Plus基础

通用枚举

表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用Mybatis-Plus的通用枚举来实现.

首先编写一个枚举类,然后把需要向数据库中插入的对应的要插入的类型加上

@EnumValue注解,之后就把会这个注解对应的属性对应的枚举的值插入到数据库中而不是把整个枚举类型插入到数据库.

当然如果需要使用这个功能,需要在配置文件中开启对通用枚举的扫描

5:清爽控制台以及查看对应SQL语句的配置

6:加快pojo类开发

可以在maven中导入坐标

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

之后就可以使用注解给实体类添加有参无参构造函数以及getter/setter以及equals等方法

7:字段映射与表名映射

同时如果所有表名的前缀都一样,那么可以使用配置文件来统一配置前缀

8:代码生成器

首先导入两个核心引擎

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
package com.example.ssm_;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
/**
 * @author: Serendipity
 * Date: 2022/5/11 12:47
 * Description:
 */
public class Generator {
    public static void main(String[] args) {
        //1.获取代码生成器的对象
        AutoGenerator autoGenerator = new AutoGenerator();
        //设置数据库相关配置
        DataSourceConfig dataSource = new DataSourceConfig();
        dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        autoGenerator.setDataSource(dataSource);
        //设置全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir("D:\\desktopfile\\ssm_\\src\\main\\java");    //设置代码生成位置
        globalConfig.setOpen(false);    //设置生成完毕后是否打开生成代码所在的目录
        globalConfig.setAuthor("Serendipity");    //设置作者
        globalConfig.setFileOverride(true);     //设置是否覆盖原始生成的文件
        globalConfig.setMapperName("%sDao");    //设置数据层接口名,%s为占位符,指代模块名称
        globalConfig.setIdType(IdType.ASSIGN_ID);   //设置Id生成策略
        autoGenerator.setGlobalConfig(globalConfig);
        //设置包名相关配置
        PackageConfig packageInfo = new PackageConfig();
        packageInfo.setParent("com.example");   //设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径
        packageInfo.setEntity("pojo");    //设置实体类包名
        packageInfo.setMapper("dao");   //设置数据层包名
        autoGenerator.setPackageInfo(packageInfo);
        //策略设置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setInclude("tbl_book");  //设置当前参与生成的表名,参数为可变参数
        strategyConfig.setTablePrefix("tbl_");  //设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名  例如: User = tbl_user - tbl_
        strategyConfig.setRestControllerStyle(true);    //设置是否启用Rest风格
        strategyConfig.setVersionFieldName("version");  //设置乐观锁字段名
        strategyConfig.setLogicDeleteFieldName("deleted");  //设置逻辑删除字段名
        strategyConfig.setEntityLombokModel(true);  //设置是否启用lombok
        autoGenerator.setStrategy(strategyConfig);
        //2.执行生成操作
        autoGenerator.execute();
    }
}

9:多库查询

多库查询实现的是通过制定不同的数据源来将对应的方法或者对应的类对数据库进行的CRUD进行换源.也就是类或方法被指定了数据源后就会查询对应的数据源对应的数据库,而不是只能无脑的查一个数据库.

首先需要导入多库查询所需要的依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

YML文件开启多库查询

spring:
  datasource:
    dynamic:
      strict: false
      primary: master
      datasource:
        master:
          url: jdbc:mysql://localhost33-6/test?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: root
        slave_1:
          url: jdbc:mysql://localhost33-6/mealsale?characterEncoding=utf-8&useSSL=false
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: root

service包

10:MybatisX

这是一个IDEA中的插件

MybatisX进行的是有选择性的添加,因此你需要什么语句去对应的mapper类中进行添加即可

11:自动填充

需求描述:

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作

1.1数据库修改

在User表中添加datetime类型的新的字段 create_time、update_time

而java中的user对象要求使用的类型是java。Util。Date,而不是sql。Date。

如果你使用localdate,

1.2实体类修改

实体上增加字段并添加自动填充注解

@TableField(fill = FieldFill.INSERT)
private Date createTime;  //create_time
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; //update_time

1.3实现元对象处理器接口

注意:不要忘记添加 @Component 注解

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //mp执行添加操作,这个方法执行
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    //mp执行修改操作,这个方法执行
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
XML 前端开发 Java
若依管理系统后端将 Mybatis 升级为 Mybatis-Plus
若依管理系统后端将 Mybatis 升级为 Mybatis-Plus
172 0
|
4月前
|
SQL Java 数据库连接
Mybatis和MybatisPlus:数据库操作工具的对比
Mybatis和MybatisPlus:数据库操作工具的对比
170 0
|
2月前
|
SQL Java 数据库连接
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
73 1
|
7月前
|
SQL Java 数据库
【Mybatis-plus异常】mybatis-plus updateById方法更新不了空字符串和null的解决方法
【Mybatis-plus异常】mybatis-plus updateById方法更新不了空字符串和null的解决方法
164 0
|
3月前
|
SQL Java 关系型数据库
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
52 0
【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能
|
3月前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
53 0
|
4月前
|
SQL Java 数据库连接
MyBatis与MyBatis-Plus的区别?
MyBatis与MyBatis-Plus的区别?
80 0
|
4月前
|
Java 关系型数据库 MySQL
Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?
Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?
56 0
|
5月前
|
Java 数据库连接 数据库
Mybatis及Mybatis-Plus使用
Mybatis及Mybatis-Plus使用
614 2
Mybatis及Mybatis-Plus使用
|
7月前
|
SQL 关系型数据库 MySQL
Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)
Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)
34 0