栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatisPlus

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatisPlus

目录
  • 概述
  • 搭建
  • 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坐标


    com.baomidou
    mybatis-plus-boot-starter
    3.5.1



    mysql
    mysql-connector-java



    com.alibaba
    druid
    1.2.8



    org.projectlombok
    lombok

修改设置

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. 使用枚举
代码生成器

自动生成各层模板

添加依赖


    com.baomidou
    mybatis-plus-generator
    3.5.2



    org.freemarker
    freemarker

@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快速开发插件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号