首页 > 其他分享 >MybatisPlus学习笔记

MybatisPlus学习笔记

时间:2023-03-22 11:11:06浏览次数:45  
标签:实体类 MybatisPlus 笔记 学习 strategyConfig 设置 mybatisplus globalConfig com

MybatisPlus

初始化

  • 创建boot项目的时候导入mysql的依赖,创建好以后在里边导入MybatisPlus的坐标(这个坐标包含和mybatis的相关坐标和spring整合mybatis的相关坐标,所以自己不需要再导入这些坐标了)

CRUD操作

  • image-20220821094924682

使用lombok简化实体类的书写

  •     <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    
  • 在实体类上边加上可以不用写相关方法的重写方法

    • @Data // TODO Data的注解相当于@Setter @Getter @ToString @EqualsAndHashCode这四个注解合起来
      @NoArgsConstructor
      @AllArgsConstructor
      

打印MybatisPlus的日志信息(里边有sql语句)

  • # TODO 在这里添加mybatisplus的配置属性,可以在控制台打印mybatis的日志(里边包括sql)
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    

聚集函数的使用

适配问题

数据库字段名和实体类属性名不匹配的问题

  • image-20220821204041204

实体类中的数据比数据表里边的数据多

  • image-20220821204241630

设置某个字段不参与查询

  • image-20220821204427002

表名和实体类名不匹配

  • 使用@TableName("表名")

  • 因为在LambdaQueryWrapper里边的User MP就会认为这张表的名字就是user(应该是忽略大小写),但是如果表名和字段名不匹配, MP就不知道要查那张表了,所以需要在实体上边标明是查那张表

  • image-20220821204544458

id生成策略

  • image-20220821233208872
  • 雪花算法
    • 里边的时间戳和系统时间的算法是不一样的(可能不是同一个起点开始计算的)
    • 机器码可以理解位计算机的mac地址
    • image-20220821234936467

逻辑删除

  • 逻辑删除就是为了避免直接删除数据造成的数据丢失,所以通过设置一个状态字段,装态字段为1表示这个数据已经删除了,为0表示这个数据还没被删除
  • 在通过mybatisplus查询的时候逻辑删除的数据已经认为是被删除了,查询是无法查出来的,如果想要得到所有的数据需要自己手动写sql
  • 数据库中有的字段实体类中没有是不会报错的,但是实体类中有的字段数据库中没有是会报错的,所以如果数据库中加了逻辑删除的字段,在一个项目中没有添加逻辑删除的功能,实体类还是原来的实体类,那么这个项目对这个数据表的增删改查是不受影响的
  • image-20220822001352899

乐观锁

  • 这个乐观锁在控制同时访问的请求数在2000个请求以下(左右)

  • 就是在数据表中增加一个version字段,然后在实体类中对这个字段增加一个@Version注解,在配置类中增加OptimisticLockerInnerInterceptor的拦截器

  • 然后在update的时候 设置version的值,这样MP在执行update操作的时候会判断给的version的值是否正确(如果不正确不会修改这个值),然后更新的时候会将这条数据的version+1

  • 这样如果有两个人都想修改version的值,那么他们进来的时候获取的version会是相等的,这样只有一个人能修改,另一个是不能修改的,是需要重新进入才可以

  • image-20220823212010717

代码生成器

  • package com.li;
    
    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 javax.sql.DataSource;
    
    /**
     * @projectName: MybatisPlus
     * @package: com.li
     * @className: Generator
     * @author: YiFan
     * @description: TODO
     * @date: 2022/8/23 21:45
     */
    public class Generator {
        public static void main(String[] args) {
            AutoGenerator autoGenerator = new AutoGenerator();
    //        todo 配置数据源
            DataSourceConfig dataSource = new DataSourceConfig();
            dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");
            dataSource.setUsername("root");
            dataSource.setPassword("123456");
            autoGenerator.setDataSource(dataSource);
    //        todo 设置全局配置
            GlobalConfig globalConfig = new GlobalConfig();
    //        设置代码生成位置
            globalConfig.setOutputDir(System.getProperty("user.dir")+"\\MybatisPlusGenerator\\src\\main\\java");
    //        设置生成后是否打开代码所在目录
            globalConfig.setOpen(false);
    //        设置作者
            globalConfig.setAuthor("YiFan");
    //        设置是否覆盖原始生成的文件
            globalConfig.setFileOverride(true);
    //        设置数据层接口名,%s为占位符,指代模块名称
            globalConfig.setMapperName("%sDao");
    //        设置Id生成策略
            globalConfig.setIdType(IdType.ASSIGN_ID);
            autoGenerator.setGlobalConfig(globalConfig);
    
    //        todo 设置包名相关配置
            PackageConfig packageInfo = new PackageConfig();
    //        设置生成文件是在那个包下的
            packageInfo.setParent("com.li");
    //        设置实体类所在包的名称,默认会设置成entity
            packageInfo.setEntity("domain");
    //        设置数据层包的名称,默认是mapper
            packageInfo.setMapper("dao");
            autoGenerator.setPackageInfo(packageInfo);
    
    //        todo 策略配置
            StrategyConfig strategyConfig = new StrategyConfig();
    //        设置生成的表名,是可变参数,可以设置多个表(如果不设置默认生成所有的表)
            strategyConfig.setInclude("tbl_user");
    //        设置表名的通用前缀,这样在通过表名设置对应的名称的时候会吧这个前缀去掉
            strategyConfig.setTablePrefix("tbl_");
    //        设置是否启用Rest风格
            strategyConfig.setRestControllerStyle(true);
    //        设置乐观锁字段名
            strategyConfig.setVersionFieldName("version");
    //        设置逻辑删除字段名
            strategyConfig.setLogicDeleteFieldName("deleted");
    //        设置是否启用lombok
            strategyConfig.setEntityLombokModel(true);
            autoGenerator.setStrategy(strategyConfig);
    
            autoGenerator.execute();
        }
    }
    
    
  • 这样生成的service方法继承了baseService,将dao测基础方法都弄过来了,但是一般不会用,因为在service层一般不会单独调用dao层的方法作为一个类,会混合使用

标签:实体类,MybatisPlus,笔记,学习,strategyConfig,设置,mybatisplus,globalConfig,com
From: https://www.cnblogs.com/gufanyuanying/p/17242965.html

相关文章

  • 性能测试技术笔记(三):如何设计一个压测平台
    转载:https://www.cnblogs.com/imyalost/p/17031603.html前面两篇笔记介绍了如何快速上手压测项目以及压测前准备测试环境和测试数据的一些方法。这篇文章,我想分享下关于......
  • 基于深度学习的安全帽检测系统(YOLOv5清新界面版,Python代码)
    摘要:安全帽检测系统用于自动化监测安全帽佩戴情况,在需要佩戴安全帽的场合自动安全提醒,实现图片、视频和摄像头等多种形式监测。在介绍算法原理的同时,给出Python的实现代......
  • 机器学习算法(二): 朴素贝叶斯(Naive Bayes)
    机器学习算法(二):朴素贝叶斯(NaiveBayes)1.实验室介绍1.1实验环境1.python3.72.numpy>='1.16.4'3.sklearn>='0.23.1'1.2朴素贝叶斯的介绍朴素贝叶斯算法......
  • 机器学习算法(一): 基于逻辑回归的分类预测
    机器学习算法(一):基于逻辑回归的分类预测项目链接参考fork一下直接运行:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc1逻辑回归的介绍和应用1.1逻......
  • solidity学习记
    合约的实例会一直运行在区块链上吗合约的实例不会一直运行在区块链上,而是在执行完交易后,将其状态存储在区块链上。当需要访问合约时,可以通过调用其函数来重新激活它,执行相......
  • 笔记-应用向量自回归模型脉冲效应函数的注意事项
    计量经济模型Econometricmodels2022-07-2718:51发表于江苏https://mp.weixin.qq.com/s/_ZVeVySe319Ap4UvvmnHWA向量自回归模型,VectorAutoregressionModels,VAR,......
  • 学习方法
    看马林老师讲关于学习方法的视频,做了一个思维导图。B站链接:点这 ......
  • markdown学习
    markdown学习标题(几个#就是几级标题)+标题名字字体字体Hello,WorldHello,WorldHello,Worldy引用疏影横斜水清浅,暗香浮动月黄昏分割线图片超链接[点击跳......
  • 3/21人月神话读书笔记
    作为开章第一篇,就先来说说为什么“人月”是“神话”。小学的时候我们都做过这样的应用题:“工厂需要加工一批零件,安排5名工人的话需要10小时完成,那么安排25名工人加工,多少......
  • springcloud学习——nacos
    1介绍nacos是阿里巴巴开发的,现在已属于springcloud框架,功能比eureka更加丰富2安装与启动下载:GitHub主页:https://github.com/alibaba/nacos解压安装包后,在bin文件夹中......