MyBatisPlus

MyBatisPlus,第1张

目录
  • 概述
  • 搭建
  • Pojo类
  • 雪花算法
      • 垂直拆分
      • 水平拆分
      • 雪花算法
  • 自动生成语句
      • 插入
      • 删除
      • 修改
      • 查询
  • Service CRUD
  • 条件构造器
      • queryWrapper
      • UpdateWrapper
  • 分页插件
  • MyBatisPlus乐观锁
  • 枚举
  • 代码生成器
  • MyBatisX

概述

MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等 *** 作。

  1. 扫描pojo实体类
  2. 通过反射技术将实体类中的属性抽取,分析数据库表和实体类映射关系,实现表与表之间,属性与属性之间映射
  3. 根据调用的方法生成相对应的sql语句
  4. 将生成的语句注入到mybatis容器中从而实现功能
搭建

引入jar坐标

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.5.1version>
dependency>

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
dependency>

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.2.8version>
dependency>

<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
dependency>

修改设置

server:
  port: 8099
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1/mybatis_plus?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 152475
    type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Pojo类
  1. lombok:简化实体类开发
    只需在实体类上添加@Data,就可以自动生成
    构造方法、get()、set()、equals()、canEqual()、hashCode()、toString()
  2. @Accessors(chain = true),就可以使用链式set值
  3. @TableName("t_user"):映射数据库中的表名
    或者使用全局配置global-config:db-config:table-prefix: t_
  4. @TableId:表示主键字段映射
  5. @TableId(value = "uid"):指定作为主键的字段
  6. @TableId(value = "uid", type = IdType.AUTO):id生成策略,默认雪花算法,设置主键自增,需要数据库同时设置;或者全局设置 global-config:db-config:id-type: auto
  7. 字段默认驼峰映射,@TableField("user_name")设置对应的表中字段名
  8. @TableLogic:被标记的属性字段为逻辑删除属性字段;删除时改变此字段
雪花算法

垂直拆分

垂直分表适合将表中某些不常用且占了大量空间的列拆分出去

水平拆分

水平分表适合表行数特别大的表

  • 主键自增:分段大小选取困难;分段不均匀
  • hash取模:分布均匀;但表扩充困难,需要重新分布所有数据
  • 雪花算法
雪花算法

能保证不同表的主键不重复性,相同表的主键有序性

整个分布式系统内ID不重复,效率高

自动生成语句

需要将mapper接口继承BaseMapper<实体类>

插入


可以自动使用雪花算法生成主键id

删除

通过id删除:int类型,所以加L

条件删除

通过多个id批量删除

修改

通过id修改,只修改set()的属性

查询

如果要自定义方法,如myBatis一样

Service CRUD

在service层调用方法,需要既可以使用通用功能,还可以实现自己定义的接口

  1. 创建IUserService.java接口
  2. 创建UserServiceImpl实现类

    批量添加
条件构造器 queryWrapper



排序

UpdateWrapper



优先级设置

部分字段查询

子查询

给查询条件加条件(下面为简写)



分页插件

配置

@Configuration
public class MyBatisPlusConfig {
    /**
     * 分页配置:拦截器
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //数据库类型,每个数据库原理分页不一样
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}


自定义sql实现分页

  1. 定义dao
  2. 写sql
  3. 查询
MyBatisPlus乐观锁

innodb隔离级别默认为rr自带乐观锁;

  1. @Version private Integer version;
    标识乐观锁版本号字段;数据库也加上这个字段
  2. 添加乐观锁插件
    //乐观锁插件
    interceptor.addInnerInterceptor(new    OptimisticLockerInnerInterceptor());
    
枚举
  1. 配置
    mybatis-plus:type-enums-package: com.ff.myBatisPlus.enums #扫描枚举   所在的包
    
  2. 枚举类
  3. 使用枚举
代码生成器

自动生成各层模板

添加依赖

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-generatorartifactId>
    <version>3.5.2version>
dependency>

<dependency>
    <groupId>org.freemarkergroupId>
    <artifactId>freemarkerartifactId>
dependency>
/**
 * 代码生成器
 */
@Test
public void TestGenerator() {
    FastAutoGenerator.create("jdbc:mysql://127.0.0.1/mybatis_plus?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai", "root", "152475")
            .globalConfig(builder -> {
                builder.author("Deevan") // 设置作者
                        //.enableSwagger() // 开启 swagger 模式
                        //.fileOverride() // 覆盖已生成文件
                        .outputDir("F://MyBatisPlusGenerator"); // 指定输出目录
            })
            .packageConfig(builder -> {
                builder.parent("com.ff") // 设置父包名
                        .moduleName("myBatisPlus") // 设置父包模块名
                        .pathInfo(Collections.singletonMap(OutputFile.xml, "F://MyBatisPlusGenerator")); // 设置mapperXml生成路径
            })
            .strategyConfig(builder -> {
                builder.addInclude("t_user") // 设置需要生成的表名
                        .addTablePrefix("t_", "c_"); // 设置过滤表前缀
            })
            .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
            .execute();
}

MyBatisX

链接: MybatisX快速开发插件

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/732962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存