通用枚举
表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用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); } }