mybtais-plus
1.需要用的依赖
<!--数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--Druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2.快速入门
1.建表语句
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
2.数据语句
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
3.配置完成连接数据库
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=qq2315290571
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&&characterEncoding=utf-8
3.配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
4.然后只需要配置一个pojo实体类和一个mapper接口继成BaseMapper
1.实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}
2.mapper接口(wrapper是条件构造器)
@Repository
public interface UserMapper extends BaseMapper<User> {
}
3.最后在启动类扫描一下
3.插入测试(主键生成策略)
1.插入记录进行测试,我在添加记录的时候没有添加id
2.数据库中也没有设置主键自增
3.但是在执行的时候发现,有主键id
这时候就是mybtais-plus的几种主键策略了,我们在实体类中的id成员变量上加上注解@TableId,发现有以下几种策略
public enum IdType {
AUTO(0), // id自增,要在数据库中也设置id自增
NONE(1), // 未设置主键
INPUT(2), // 手动添加
ID_WORKER(3), // 默认的全局唯一ID
UUID(4), // 全局唯一ID,uuid
ID_WORKER_STR(5); // 默认的全局唯一ID的字符串表示形式
}
4.自动填充处理
代码级别填充,首先在数据库中加入create_time,update_time 两个字段
再把实体类更新一下
然后在实体类中加入自动填充的注解
还需要我们自己配置一下
5.乐观锁
1.在实体类中加入字段version并加上注解 @Version
@Version
private Integer version;
2.注册配置
@Configuration
@EnableTransactionManagement
public class OptimisConfig {
// 注册bean
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
6.查询操作
1.通过id批量查询(selectBatchIds)
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
System.out.println(users);
2.根据map的条件进行查询(selectByMap)
// 根据要查询的条件批量进行查询
HashMap<String, Object> map = new HashMap<>();
map.put("version",1);
List<User> users = userMapper.selectByMap(map);
7.分页操作
首先在配置类中加入以下内容
代码如下
// 注册分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
分页测试
// current:当前页 size:每页显示几条数据
Page<User> page = new Page<>(2,5);
// 分页查询
userMapper.selectPage(page,null);
page.getRecords().forEach(System.out::println);
8.删除操作
// 批量删除
userMapper.deleteBatchIds(Arrays.asList(8, 9));
// 根据id删除
userMapper.deleteById(10L);
// 根据map的key进行删除
userMapper.deleteByMap(map);
9.逻辑删除
1.在properties中配置以下
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
2.在数据库中添加字段deleted
3.在实体类中添加以下字段并添加注解@TableLogic
@TableLogic
private Integer deleted;
4.配置类中添加配置
@Bean
public ISqlInjector ISqlInjector(){
return new LogicSqlInjector();
}
5.测试
然后发现我们在删除的时候,其实执行的是一条更新语句
10.性能分析插件
1.首先在properties中开启开发测试环境
spring.profiles.active=dev
2.然后在配置类中配置以下
// sql执行插件(性能分析)
@Bean
@Profile({"dev","test"}) // 设置dev测试开发环境
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// sql最大执行时间 单位毫秒
performanceInterceptor.setMaxTime(12);
// 开启格式化
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
7.wrapper(条件构造器)
1.测试
// 条件构造器的测试
// 测试姓名不为空并且年龄大于20岁的
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("name").ge("age",20);
userMapper.selectList(wrapper);
2.相关api
1.allEq #全条件执行,参数是map
2.eq #等于,参数是String,Object
3.ne #不等于
4.gt #大于
5.ge #大于或等于
6.lt #小于
7.le #小于或等于
8.between #BETWEEN 值1 AND 值2
9.notBetween #NOT BETWEEN 值1 AND 值2
10.isNull #是空的
11.isNotNull #非空
12.in #LIKE '%值%'
13.like #模糊查询
14.like #LIKE '%值%'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)