- 概述
- 搭建
- Pojo类
- 雪花算法
- 垂直拆分
- 水平拆分
- 雪花算法
- 自动生成语句
- 插入
- 删除
- 修改
- 查询
- Service CRUD
- 条件构造器
- queryWrapper
- UpdateWrapper
- 分页插件
- MyBatisPlus乐观锁
- 枚举
- 代码生成器
- MyBatisX
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等 *** 作。
- 扫描pojo实体类
- 通过反射技术将实体类中的属性抽取,分析数据库表和实体类映射关系,实现表与表之间,属性与属性之间映射
- 根据调用的方法生成相对应的sql语句
- 将生成的语句注入到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类
- lombok:简化实体类开发
只需在实体类上添加@Data
,就可以自动生成
构造方法、get()、set()、equals()、canEqual()、hashCode()、toString() @Accessors(chain = true)
,就可以使用链式set值@TableName("t_user")
:映射数据库中的表名
或者使用全局配置global-config:db-config:table-prefix: t_
@TableId
:表示主键字段映射@TableId(value = "uid")
:指定作为主键的字段@TableId(value = "uid", type = IdType.AUTO)
:id生成策略,默认雪花算法,设置主键自增,需要数据库同时设置;或者全局设置global-config:db-config:id-type: auto
- 字段默认驼峰映射,
@TableField("user_name")
设置对应的表中字段名 @TableLogic
:被标记的属性字段为逻辑删除属性字段;删除时改变此字段
垂直分表适合将表中某些不常用且占了大量空间的列拆分出去
水平拆分水平分表适合表行数特别大的表
- 主键自增:分段大小选取困难;分段不均匀
- hash取模:分布均匀;但表扩充困难,需要重新分布所有数据
- 雪花算法
能保证不同表的主键不重复性,相同表的主键有序性
整个分布式系统内ID不重复,效率高
需要将mapper接口继承BaseMapper<实体类>
可以自动使用雪花算法
生成主键id
通过id删除:int类型,所以加L
条件删除
通过多个id批量删除
通过id修改,只修改set()
的属性
如果要自定义方法,如myBatis一样
Service CRUD在service层调用方法,需要既可以使用通用功能,还可以实现自己定义的接口
- 创建
IUserService.java
接口
- 创建
UserServiceImpl
实现类
批量添加
排序
优先级设置
部分字段查询
子查询
给查询条件加条件(下面为简写)
配置
@Configuration
public class MyBatisPlusConfig {
/**
* 分页配置:拦截器
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//数据库类型,每个数据库原理分页不一样
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
自定义sql实现分页
- 定义dao
- 写sql
- 查询
innodb隔离级别默认为rr自带乐观锁;
@Version
private Integer version;
标识乐观锁版本号字段;数据库也加上这个字段- 添加乐观锁插件
//乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
- 配置
mybatis-plus:type-enums-package: com.ff.myBatisPlus.enums #扫描枚举 所在的包
- 枚举类
- 使用枚举
自动生成各层模板
添加依赖
<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快速开发插件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)