Java-MyBatisPlus--CRUD操作
- 配置日志:
-
雪花算法(自动生成id)
- 分布式系统的唯一id生成策略
-
// 对数据库的中的主键生成策略(uuid,自增id,雪花算法,redis,zookeeper) // ID_WORKER(3),:全局唯一id,默认的 // 主键生成策略: // 1.AUTO(0), //自增策略--》数据库设计字段为自增,同时再pojo类中的id字段使用注解 @TableId(type = IdType.AUTO) // 2.NONE(1), //未设置主键 // INPUT(2), //手动输入 // ID_WORKER(3), //默认的全局唯一id // UUID(4), //全局唯一id // ID_WORKER_STR(5); //ID_WORKER 的字符串表示法 @TableId(type = IdType.ID_WORKER) private Long id; private String name; private int age; private String email;
- 更新操作:
- 自动填充
-
package com.model.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/18 19:59 */ @Component @Slf4j public class MyMetaObjectHandler implements MetaObjectHandler { // 插入时的填充策略 @Override public void insertFill(MetaObject metaObject) { log.info("insert fill is start"); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } //更新时的填充策略 @Override public void updateFill(MetaObject metaObject) { log.info("update fill is start"); this.setFieldValByName("updateTime", new Date(), metaObject); } }
-
乐观锁:
-
查询操作:
-
@Test public void select(){ User user = userMapper.selectById(1); System.out.println(user.toString()); List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); users.forEach(System.out::println); List<User> users1 = userMapper.selectByMap((Map<String, Object>) new HashMap<>().put("name", "张紫韩")); users1.forEach(System.out::println); }
-
分页查询:
-
@Test public void page(){ Page<User> page = new Page<>(1,5); userMapper.selectPage(page, null); List<User> userList = page.getRecords(); userList.forEach(System.out::println); System.out.println("总页数:"+page.getTotal()); }
-
-
删除操作:
-
逻辑删除:
-
@TableLogic //逻辑删除 private int deleted;
-
逻辑删除,在数据库中不会进行删除,只是跟新deleted字段为1,我们自己无法查询到,但是再数据库中数据还是存在的
-
性能分析插件:
-
条件构造器:
-
代码生成器:
-
package com.model; import com.baomidou.mybatisplus.annotation.FieldFill; 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; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import org.assertj.core.util.Arrays; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import java.util.ArrayList; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/28 22:18 */ public class MyAutoGenerator { // 代码自动生成器 public static void main(String[] args) { // 代码自动生成器对象 AutoGenerator autoGenerator = new AutoGenerator(); // 配置策略 // 1.全局配置 GlobalConfig globalConfig = new GlobalConfig(); // 获得文件路径 String projectPath = System.getProperty("user.dir"); // 输出文件路径 globalConfig.setOutputDir(projectPath+"/mybatisplus_demo01/src/main/java"); globalConfig.setAuthor("张紫韩"); globalConfig.setOpen(false); globalConfig.setFileOverride(false);//是否覆盖 globalConfig.setServiceName("%sService");//去Service的i前缀 globalConfig.setIdType(IdType.ID_WORKER); globalConfig.setDateType(DateType.ONLY_DATE); globalConfig.setSwagger2(true); autoGenerator.setGlobalConfig(globalConfig); // 2.设置数据源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus"); dataSourceConfig.setSchemaName("public"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("123456"); autoGenerator.setDataSource(dataSourceConfig); // 3. // 包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName("blog"); pc.setParent("com.model"); pc.setEntity("pojo"); pc.setMapper("mapper"); pc.setService("service"); pc.setController("controller"); autoGenerator.setPackageInfo(pc); // // // 自定义配置 // InjectionConfig cfg = new InjectionConfig() { // @Override // public void initMap() { // // to do nothing // } // }; // // // 如果模板引擎是 freemarker // String templatePath = "/templates/mapper.xml.ftl"; // // 如果模板引擎是 velocity // // String templatePath = "/templates/mapper.xml.vm"; // // // 自定义输出配置 // List<FileOutConfig> focList = new ArrayList<>(); // // 自定义配置会被优先输出 // focList.add(new FileOutConfig(templatePath) { // @Override // public String outputFile(TableInfo tableInfo) { // // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! // return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() // + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; // } // }); // /* // cfg.setFileCreate(new IFileCreate() { // @Override // public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { // // 判断自定义文件夹是否需要创建 // checkDir("调用默认方法创建的目录,自定义目录用"); // if (fileType == FileType.MAPPER) { // // 已经生成 mapper 文件判断存在,不想重新生成返回 false // return !new File(filePath).exists(); // } // // 允许生成模板文件 // return true; // } // }); // */ // cfg.setFileOutConfigList(focList); // mpg.setCfg(cfg); // // // 配置模板 // TemplateConfig templateConfig = new TemplateConfig(); // // // 配置自定义输出模板 // //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 // // templateConfig.setEntity("templates/entity2.java"); // // templateConfig.setService(); // // templateConfig.setController(); // // templateConfig.setXml(null); // mpg.setTemplate(templateConfig); // // 4.策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("user","student");//设置要映射的表名,可以设置多个表 strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true);//自动lombok strategy.setLogicDeleteFieldName("delete");//逻辑删除 // 自动填充 TableFill createTime = new TableFill("create_time", FieldFill.INSERT); TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE); ArrayList<TableFill> list = new ArrayList<>(); list.add(createTime); list.add(updateTime); strategy.setTableFillList(list); // 乐观锁 strategy.setVersionFieldName("version"); strategy.setRestControllerStyle(true); strategy.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_2 autoGenerator.setStrategy(strategy); autoGenerator.execute();//执行 // // 公共父类 // strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); // // 写于父类中的公共字段 // strategy.setSuperEntityColumns("id"); // strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); // strategy.setControllerMappingHyphenStyle(true); // strategy.setTablePrefix(pc.getModuleName() + "_"); // mpg.setStrategy(strategy); // mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // mpg.execute(); // } } }
-