
主要功能包括:逻辑删除,创建时间和修改时间
逻辑删除:对于重要的数据,不能轻易的执行delete语句进行删除,一旦删除,数据无法恢复,这时可以进行逻辑删除
删除正确 *** 作:假删除
1、给表添加字段,代表数据是否删除,
一般起名isdelete,0代表未删除,1代表删除,默认值为0
简单的数据库表
注意:gmt_create和gmt_modified可以为null!
1、主要参考了
(1)
Mybatis—Plus代码自动生成器超详细讲解(3.5.1+版本)_****^_^****的博客-CSDN博客
(2)官方主页
代码生成器(3.5.1+版本) | MyBatis-Plus
2、来个例子试试看
(1)
(2)
(3)application.yml和上次的大部分一样,注意逻辑的配置修改了下!
1mybatis-plus创建项目_chencaw的专栏-CSDN博客
server:
port: 8081
servlet:
context-path: /
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/productdemo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: ????
# jackson:
# date-format: yyyy-MM-dd HH:mm:ss
# time-zone: GMT+8
# serialization:
# write-dates-as-timestamps: false
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath*:mapper/**/*Mapper.xml
global-config:
# 逻辑删除配置
db-config:
# 删除前,注意这个配置,陈20211207
logic-not-delete-value: 0
# 删除后
logic-delete-value: 1
(4)创建后的pom.xml如下
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.1
com.example
chenmpj17simple
0.0.1-SNAPSHOT
chenmpj17simple
chenmpj17simple
17
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
3.4.3.4
com.baomidou
mybatis-plus-generator
3.5.1
org.freemarker
freemarker
2.3.31
io.springfox
springfox-swagger2
3.0.0
provided
io.springfox
springfox-swagger-ui
3.0.0
provided
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
(5)生产代码的方法
package com.example.chenmpj17simple.codegenerate;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import java.util.Collections;
// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGeneratorFast {
public static void main(String[] args) {
//(1)第一步获取项目路径
String projectPath=System.getProperty("user.dir");
//(2)创建生产器
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/digitalfactorydb?autoReconnect=true&useUnicode=true&characterEncoding=utf8&&serverTimezone=GMT%2B8", "???user", "???password")
// 全局配置 GlobalConfig
.globalConfig(builder -> {
builder.author("chen") // 设置作者名
.fileOverride() // 开启覆盖已生成文件,默认值false
.enableSwagger() // 开启 swagger 模式,默认值false
.dateType(DateType.ONLY_DATE) //定义生成的实体类中日期类型
// 指定输出目录,注意可根据包修改,20211206!!!!
.outputDir(projectPath+"/src/main/java");
})
// 包配置 PackageConfig
.packageConfig(builder -> {
builder.parent("com.example.chenmpj17simple") // 设置父包名,注意一定要根据包修改,20211206!!!!
.moduleName("midProduct") // 父包模块名,默认值:无,注意根据包修改,20211206!!!!
// 上面两行代码加起来:com.example.chenmptest.midProduct.xxx(entity、service、controller等)
.entity("entity") // Entity包名
.service("service") // Service包名
.serviceImpl("serviceImpl") // ServiceImpl包名
.controller("controller") // Controller包名
.mapper("mapper") // Mapper包名
.xml("mapper") // Mapper XML包名
// 路径配置信息,设置mapperXml生成路径
.pathInfo(Collections.singletonMap(OutputFile.mapperXml,projectPath+"/src/main/resources/mapper"));
})
// 配置策略 StrategyConfig
.strategyConfig(builder -> {
builder.addInclude("mid_product_category") // 增加表匹配,需要映射的数据库中的表名
//.addTablePrefix("p_") // 增加过滤表前缀,生成时将数据库表的前缀"p_"去掉
// 1.service策略配置
.serviceBuilder()
.formatServiceFileName("%sService") // 格式化 service 接口文件名称
.formatServiceImplFileName("%sServiceImpl") // 格式化 service 实现类文件名称
// 2.实体策略配置
.entityBuilder()
.naming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略,下划线转驼峰命名
.enableLombok() // 开启 lombok 模型
.logicDeleteColumnName("is_deleted") // 逻辑删除字段名(数据库),注意修改,陈20211206!!!
.enableTableFieldAnnotation() // 开启生成实体时生成字段注解
.idType(IdType.AUTO) // 全局主键类型,如用不到,注意修改,陈20211206!!!
// 3.controller策略配置
.controllerBuilder()
.formatFileName("%sController") // 格式化文件名称
.enableRestStyle() // 开启生成@RestController 控制器
// 4.mapper策略配置
.mapperBuilder()
.superClass(BaseMapper.class) // 设置父类
.enableMapperAnnotation() // 开启 @Mapper 注解
.formatMapperFileName("%sMapper") // 格式化 mapper 文件名称
.formatXmlFileName("%sMapper"); // 格式化 xml 实现类文件名称
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
(5)修改自动时间的两个字段
@ApiModelProperty("创建时间")
@TableField(value = "gmt_create",fill = FieldFill.INSERT)
private Date gmtCreate;
@ApiModelProperty("更新时间")
@TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
(7)添加自动处理
@Component
//编写处理器Handler来进行自动填充,把下面的代码直接写在自己的handler包内
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
System.out.println("start insert fill ....");
this.setFieldValByName("gmtCreate", new Date(), metaObject);
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
System.out.println("start update fill ....");
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
}
(8)测试代码
package com.example.chenmpj17simple;
import com.example.chenmpj17simple.midProduct.entity.MidProductCategory;
import com.example.chenmpj17simple.midProduct.serviceImpl.MidProductCategoryServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Chenmpj17simpleApplicationTests {
@Autowired
private MidProductCategoryServiceImpl midProductCategoryService;
@Test
void contextLoads() {
}
@Test
void chenMidSelect()
{
System.out.println("chen");
MidProductCategory product = midProductCategoryService.getById(2);
System.out.println(product.getName());
System.out.println(product.getGmtCreate());
System.out.println("chen2");
}
@Test
void chenMidSave()
{
System.out.println("chen_save_start");
MidProductCategory product = new MidProductCategory();
product.setCategoryId("4");
product.setName("chen3add");
Boolean chenSaveB = midProductCategoryService.save(product);
System.out.println(chenSaveB);
System.out.println("chen_save_end");
}
@Test
void saveOrUpdate()
{
System.out.println("chen_saveupate_start");
MidProductCategory product = new MidProductCategory();
product.setId(4);
product.setCategoryId("1u");
product.setName("chenupdate");
Boolean chenSaveB = midProductCategoryService.saveOrUpdate(product);
System.out.println(chenSaveB);
System.out.println("chen_saveupdate_end");
}
}
3、分页
(1)配置文件
@Configuration
@MapperScan("com.example.*.*.mapper*")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.MYSQL);
paginationInnerInterceptor.setOverflow(true);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
// @Bean
// public ConfigurationCustomizer configurationCustomizer() {
// return configuration -> configuration.setUseDeprecatedExecutor(false);
// }
}
(2)分页测试
@Resource
private MidProductCategoryMapper midProductCategoryMapper;
@Test
void mybatisplusselectpage() {
LambdaQueryWrapper userLambdaQueryWrapper = Wrappers.lambdaQuery();
userLambdaQueryWrapper.like(MidProductCategory::getName , "c");
Page userPage = new Page<>(2, 3);//第2页,每页3个,注意:第一个参数当前页从1开始,
// Page
4、完结了,mybatisplus推荐的下面两个函数好像有问题(要对应的用好,大家自己看下原理),暂时跳过
this.strictInsertFill(....)
this.strictUpdateFill(....)欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)