首页 > 其他分享 >MyBatisPlus

MyBatisPlus

时间:2024-04-02 14:46:54浏览次数:37  
标签:MyBatisPlus userMapper strategy gc user new id

MyBatisPlus


快速入门 使用第三方组件:

  1. 导入对应的依赖
  2. 研究依赖如何配置
  3. 代码如何编写
  4. 提高扩展技术能力

步骤

  1. 创建数据库

  2. 编写项目,初始化项目 使用springboot初始化

  3. 导入依赖

  4. 连接数据库

  5. 传统方式:pojo--dao(mybatis,mapper.xml)--service--controller

  6. 使用了mybatis-plus后

    • pojo
    • mapper接口
    • main 添加扫描包注解
    • 测试类
  7. 配置日志

  8. CRUD扩展

    • 插入操作

      User user = new User();
      user.setUsername("zhangsan"); //1774720336040734721
      user.setPassword("123456");
      user.setEmail("1234562");
      user.setPhone("1234562");
      
      user.setCreateTime(LocalDateTime.now());
      user.setUpdateTime(LocalDateTime.now());
      user.setStatus(1);
      user.setBalance(100);
      
      int insert = userMapper.insert(user);
      
    • 主键生成策略: 数据库字段自增,实体类字段上加: @TableId(value = "id", type = IdType.ASSIGN_ID)

      AUTO(0), // 数据库id自增 
      
      NONE(1), // 未设置主键 
      
      INPUT(2), // 手动输入 
      
      ID_WORKER(3), // 默认的全局唯一id 
      
      UUID(4), // 全局唯一id uuid 
      
      ID_WORKER_STR(5); //ID_WORKER 字符串表示法
      
    • 更新操作

      User user = new User();
      user.setId(29L);
      user.setUsername("zhangsan");
      user.setAge(20);
      int i = userMapper.updateById(user);
      
    • 自动填充时间 baocuo

       字段属性添加注解   
          @TableField(fill = FieldFill.INSERT)
          @ApiModelProperty(value = "创建时间")
          private LocalDateTime createtime;
      
          @TableField(fill = FieldFill.INSERT_UPDATE)
          @ApiModelProperty(value = "修改时间")
          private LocalDateTime updatetime;
      
      @Component
      public class MyMetaObjectHandler implements MetaObjectHandler {
          //插入时的填充策略
          @Override
          public void insertFill(MetaObject metaObject) {
           log.info("start insert fill......");
           //this.setFieldValByName("createTime",new Date(),metaObject);
           //this.setFieldValByName("updateTime",new Date(),metaObject);
      
          }
      
          //更新时的填充策略
          @Override
          public void updateFill(MetaObject metaObject) {
             log.info("start update fill......");
             //this.setFieldValByName("updateTime",new Date(),metaObject);
          }
      }
      
    • 乐观锁

      乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,

      再次更新值测试

      悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!

      //字段添加注解
      @Version  //乐观锁注解
      @ApiModelProperty(value = "版本号")
      private Integer version;
      
      
      @MapperScan("com.ishop.mapper")
      @EnableTransactionManagement
      @Configuration //配置类
      public class MyBatisPlusConfig {
      
          @Bean //注册乐观锁插件
          public MybatisPlusInterceptor mybatisPlusInterceptor(){
              MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
              interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
              return interceptor;
          }
      }
      
      

      C7C7139D-5A89-445b-BC11-BB024B76AE63

      B0617322-37C5-4487-A746-1D55FCDCB2B3

    • 查询操作

      批量查询:userMapper.selectBatchIds(Arrays.asList(1,2,3))

      map查询:usermapper.selectByMap(map)

    • 分页操作

      1. 原始Limit分页

      2. pageHelper第三方插件分页

      3. MP其实也内置了分页插件

    • 删除操作

      userMapper.deleteById(1L);
      userMapper.deleteBatchIds(Array.asList(1L,2L));
      
      HashMap<String,Object> map=new HashMap<>();
      map.put("name","zhangsan");
      userMapper.deleteByMap(map);
      
    • 逻辑删除

      物理删除 :从数据库中直接移除

      逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1

         字段添加注解
          @TableLogic //逻辑删除
          @ApiModelProperty(value = "使用状态(1正常 2删除)")
          private Integer status;
      
      配置文件:
            logic-delete-value: 1      #逻辑删除
            logic-not-delete-value: 0   
                
          @Test
          public void testDeleteByIDS(){
              userMapper.deleteById(1L);
          }
      
    • 性能分析插件

      性能分析拦截器,用于输出每条 SQL 语句及其执行时间

      MP也提供性能分析插件,如果超过这个时间就停止运行!

      执行sql超过了时间就抛出异常,可以帮助我们提供工作效率

    • 条件构造器

      Wrapper我们写一些复杂的sql就可以使用它来替代!

      几乎有所有的条件:
      allEq,eq,ne,gt,lt,ge,le,between,notBetween,like,notLike,likeLeft,likeRight,isNull,isNotNull,in notIn,groupBy,orderByAsc,orderByDesc,having,and,or

         @Test
          void testWrapper(){
              QueryWrapper<User> userWrapper = new QueryWrapper<>();
              userWrapper.isNotNull("username")
                      .isNotNull("email")
                      .ge("age",12)
                      .eq("username","zhangsan31");
      
              userMapper.selectList(userWrapper).forEach(System.out::println);
          }
          
          @Test
          void testWrapper2(){
              QueryWrapper<User> userWrapper = new QueryWrapper<>();
              userWrapper.inSql("id","select id from user where id<30");
      
              List<User> users = userMapper.selectList(userWrapper);
              users.forEach(System.out::println);
          }
          
           @Test
          void testWrapper3(){
              QueryWrapper<User> userWrapper = new QueryWrapper<>();
              userWrapper.orderByAsc("id");
              List<User> users = userMapper.selectList(userWrapper);
              users.forEach(System.out::println);
          }
      
    • 代码自动生成器

      AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、

      Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

      // 代码自动生成器

      public class KuangCode {public static void main(String[] args) {

      // 需要构建一个 代码自动生成器 对象

      AutoGenerator mpg = new AutoGenerator();

      // 配置策略

      // 1、全局配置

      GlobalConfig gc = new GlobalConfig();

      String projectPath = System.getProperty("user.dir");

      gc.setOutputDir(projectPath+"/src/main/java");

      gc.setAuthor("XXX");

      gc.setOpen(false);

      gc.setFileOverride(false); // 是否覆盖

      gc.setServiceName("%sService"); // 去Service的I前缀

      gc.setIdType(IdType.ID_WORKER);

      gc.setDateType(DateType.ONLY_DATE);

      gc.setSwagger2(true);

      mpg.setGlobalConfig(gc);

      //2、设置数据源

      DataSourceConfig dsc = new DataSourceConfig();

      dsc.setUrl("jdbc:mysql://localhost:3306/XXX_DB?

      useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");

      dsc.setDriverName("com.mysql.cj.jdbc.Driver");

      dsc.setUsername("root");

      dsc.setPassword("123456");

      dsc.setDbType(DbType.MYSQL);

      mpg.setDataSource(dsc);

      //3、包的配置

      PackageConfig pc = new PackageConfig();

      pc.setModuleName("blog");

      pc.setParent("com.kuang");

      pc.setEntity("entity");

      pc.setMapper("mapper");

      pc.setService("service");

      pc.setController("controller");

      mpg.setPackageInfo(pc);

      //4、策略配置

      StrategyConfig strategy = new StrategyConfig();

      strategy.setInclude("blog_tags","course","links","sys_settings","user_record","

      user_say"); // 设置要映射的表名

      strategy.setNaming(NamingStrategy.underline_to_camel);

      strategy.setColumnNaming(NamingStrategy.underline_to_camel);

      strategy.setEntityLombokModel(true); // 自动lombok;

      strategy.setLogicDeleteFieldName("deleted");

      // 自动填充配置

      TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);

      TableFill gmtModified = new TableFill("gmt_modified",

      FieldFill.INSERT_UPDATE);

      ArrayList tableFills = new ArrayList<>();

      tableFills.add(gmtCreate);

      tableFills.add(gmtModified);

      strategy.setTableFillList(tableFills);

      // 乐观锁

      strategy.setVersionFieldName("version");strategy.setRestControllerStyle(true);

      strategy.setControllerMappingHyphenStyle(true); //

      localhost:8080/hello_id_2

      mpg.setStrategy(strategy);

      mpg.execute(); //执行

      }

      }

标签:MyBatisPlus,userMapper,strategy,gc,user,new,id
From: https://www.cnblogs.com/chenshaojun2008/p/18110541

相关文章

  • MybatisPlus多参数分页查询,黑马程序员SpringBoot3+Vue3教程第22集使用MP代替pagehelpe
    前言:视频来源1:黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关视频来源2:黑马程序员最新MybatisPlus全套视频教程,4小时快速精通mybatis-plus框架创作理由:网上MP实现分页查询功能的帖子易读性太差,具体实现看下面。根据视频完成......
  • MyBatisPlus新版代码生成器(Velocity模板引擎详解)
    文章目录一、Velocity模板引擎1、velocity简介2、快速入门3、基础语法4、注释5、变量6、循环7、条件8、引入资源9、macro宏二、MybatisPlus代码生成器1、MP代码生成器2、自定义velocity模板2.1、MybatisPlus自带模板和变量2.2、公共模板`common.vm`文件2.3、实体模板`en......
  • SpringBoot集成MybatisPlus
    创建一个基于SpringBoot集成MybatisPlus的示例项目是一个相对直接且实用的过程,它结合了SpringBoot的自动配置特性与MybatisPlus的增强功能,使得数据库操作变得更为简便和高效。下面是一个简单的步骤说明和代码示例,帮助你快速搭建一个SpringBoot集成MybatisPlus的Demo项......
  • MyBatisPlus怎么多表关联查询?
    在MyBatisPlus中进行多表关联查询通常需要自定义SQL语句,因为MyBatisPlus的默认方法主要是针对单表操作。你可以在Mapper接口中定义自定义查询方法,并使用@Select注解编写SQL语句。以下是一个简单的例子,假设我们有两个表user和order,我们想要查询用户及其订单信息:定义User和Or......
  • MyBatisPlus 之四:MP 的乐观锁和逻辑删除、分组、排序、链式的实现步骤
    乐观锁乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。乐观锁采取了更加宽松的加......
  • MybatisPlus[新]逆向工程,代码生成器
    MybatisPlus旧版本的代码生成器官方新版已经不在维护了.并在新版中,将内部的构造方法改成了private,导致新版本的myabtis-plus无法使用旧版本的代码生成器.下列配置是新版本的代码生成配置添加依赖<!--代码自动生成器依赖--><dependency><groupId>com.baomidou</......
  • MybatisPlus
    入门MyBatis-Plus(opensnewwindow)(简称MP)是一个MyBatis(opensnewwindow)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。准备数据DROPTABLEIFEXISTS`user`;CREATETABLE`user`(idBIGINTNOTNULLCOMMENT'主键ID',name......
  • MyBatisPlus代码生成器(新)
    MyBatisPlus代码生成器(新)注意:适用版本:mybatis-plus-generator3.5.1以上版本参考:官网本次配置:JDK17+SpringBoot3.1.5+MyBatisPlus3.5.3.1注意:mybatis-plus-generator版本需与mybatis-plus版本一致最新依赖参考:https://mvnrepository.com/artifact/com.baomid......
  • t04_mybatisplus
    一、快速入门准备数据DROPTABLEIFEXISTSuser;CREATETABLEuser(idBIGINT(20)NOTNULLCOMMENT'主键ID',nameVARCHAR(30)NULLDEFAULTNULLCOMMENT'姓名',ageINT(11)NULLDEFAULTNULLCOMMENT'年龄',emailVARCHAR(50)......
  • mybatisPlus分页查询
    配置类:packagecom.oep.backend.config;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;importo......