MybatisPlus安装及使用快速上手
前言
环境版本号
springboot 2.7.12
java 11
MyBatis-Plu 是MyBatis的增强工具,为MyBatis提供了一些增强特性,简化了数据库操作的开发。
使用步骤
1.步骤引入依赖
代码如下:由于这个starter包含对mybatis的⾃动装配,因此完全可以替换掉Mybatis的starter。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
2.步骤定义Mapper
代码如下:Mapper要继承 BaseMapper,需要写上对应pojo的泛型,不再需要编写查询语句和方法
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
3.步骤测试
代码如下:直接调用BaseMapper里面的增删改查方法
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void testInsert() {
User user = new User();
user.setId(5L);
user.setUsername("Lucy");
user.setPassword("123");
user.setPhone("18688990011");
user.setBalance(200);
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
userMapper.insert(user);
}
@Test
void testSelectById() {
User user = userMapper.selectById(5L);
System.out.println("user = " + user);
}
//通过id批量查询
@Test
void testQueryByIds() {
List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));
users.forEach(System.out::println);
}
@Test
void testUpdateById() {
User user = new User();
user.setId(5L);
user.setBalance(20000);
userMapper.updateById(user);
}
@Test
void testDeleteUser() {
userMapper.deleteById(5L);
}
}
}
4.注意事项及常用注解
MyBatis-Plus默认采用驼峰命名法映射Java对象的字段,而数据库表字段通常使用下划线命名法。因此,MyBatis-Plus会自动将Java对象字段的驼峰命名转换为数据库表字段的下划线命名。
例如:
Java对象字段:userName
数据库表字段:user_name
字段名和数据库列名一致:
如果Java对象的字段名和数据库表的字段名已经一致,MyBatis-Plus会直接使用它们之间的对应关系,无需转换。
例如:
Java对象字段:age
数据库表字段:age
在这种自动映射的情况下,MyBatis-Plus能够根据命名规则自动匹配Java对象的字段和数据库表的字段,无需额外的配置。
如果需要进行更复杂或特定的映射,可以通过注解进行配置。例如,使用@TableField注解标记Java对象字段和数据库表字段之间的映射关系,或者使用@TableId注解标记主键字段。
代码如下:
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
//用于标记Java对象和数据库表之间的映射关系。
@TableName("user_table")
public class User {
//主键生成策略为自增长。
//@TableId(value = "user_id", type = IdType.AUTO)
//用于标记主键字段,可以指定数据库表字段名。
@TableId("user_id")
private Long userId;
//布尔类型且是is开头也要标准,否则会识别成is后面的字段
@TableField("is_married")
private Boolean isMarried;
//关键字冲突用转义字符``包裹
@TableField("`order`")
private Integer order;
//数据库不存在字段标注
@TableField(exist = false)
private String address;
//用于标记Java对象字段和数据库表字段之间的映射关系。
@TableField("user_name")
private String userName;
}
5.常见配置
代码如下:
mybatis-plus:
type-aliases-package: com.dong.mp.domain.po #起别名,扫描包
#以下为默认配置
mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
configuration:
map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
cache-enabled: false # 是否开启二级缓存
global-config:
db-config:
id-type: assign_id # id为雪花算法生成
update-strategy: not_null # 更新策略:只更新非空字段
6.条件构造器
Wrapper是MyBatis-Plus提供的条件构造器接口,用于构建查询、更新和删除的条件。它提供了一系列方法,允许开发者通过链式调用来构建复杂的WHERE条件。Wrapper接口位于com.baomidou.mybatisplus.core.conditions包中。
以下是一些常用的Wrapper接口的实现类:
QueryWrapper:
用于构建查询条件。
UpdateWrapper:
用于构建更新条件。
LambdaQueryWrapper:
使用Lambda表达式构建查询条件。
LambdaUpdateWrapper:
使用Lambda表达式构建更新条件。
这些Wrapper接口都提供了类似的方法,用于构建各种条件,例如:
eq(String column, Object val): 等于 =
ne(String column, Object val): 不等于 <>
gt(String column, Object val): 大于 >
ge(String column, Object val): 大于等于 >=
lt(String column, Object val): 小于 <
le(String column, Object val): 小于等于 <=
like(String column, Object val): 模糊查询 LIKE
in(String column, Collection<?> coll): 在集合中 IN notIn(String column, Collection<?> coll): 不在集合中 NOT IN
isNull(String column): 为NULL IS NULL
isNotNull(String column): 不为NULL IS NOT NULL
and(): AND关系
or(): OR关系
nested(Consumer<Param<?>> consumer): 嵌套条件
apply(String applySql, Object… value): 自定义SQL片段,如 apply(“age = {0} and name = {1}”, 18, “John”)
代码如下:
@Test
void testQueryWrapper() {
// 1.构建查询条件(查询用户名包含字母"o"且账户余额大于等于1000的用户信息,并通过.select("id", "username", "info", "balance")指定查询的字段。)
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id", "username", "info", "balance")
.like("username", "o")
.ge("balance", 1000);
// 2.查询
List<User> userList = userMapper.selectList(wrapper);
// 3.处理查询结果,例如打印或进行断言
for (User user : userList) {
System.out.println(user);
}
}
总结
- 简化CRUD操作:
提供了通用的Mapper接口,通过继承该接口,可以实现基础的增删改查操作,无需手动编写SQL语句。
- Lambda查询:
引入Lambda表达式和条件构造器,使得查询条件的拼接更加直观、简洁,提高代码的可读性。
- 自动填充:
支持在实体类中定义字段的填充策略,例如创建时间、更新时间等,在插入和更新时自动填充相应的字段。
- 分页查询:
提供了方便的分页查询方法,简化了对分页的处理,支持多种分页插件。
- 逻辑删除:
支持逻辑删除功能,通过在实体类中定义逻辑删除字段,删除时仅更新标记字段而非真正删除记录。
- 性能分析:
集成了性能分析插件,可以方便地查看SQL执行性能,帮助进行性能优化。
- 乐观锁:
提供了乐观锁的支持,通过在实体类中定义版本字段,实现对数据的乐观锁控制。
- 代码生成器:
MyBatis-Plus内置了代码生成器,可以根据数据库表结构生成相应的实体类、Mapper接口等代码,加速开发过程。
- 多租户支持:
提供了多租户的支持,方便在一个系统中处理多租户的数据隔离需求。
- 缓存支持:
支持二级缓存,可以配置缓存策略提升查询性能。
- 自定义SQL注入:
提供自定义SQL注入功能,可以在运行时动态注入SQL,满足复杂业务场景的需求。
- 强大的条件构造器:
支持复杂的查询条件,包括嵌套条件、自定义SQL片段等。
- 多种数据库支持:
对多种数据库(MySQL、Oracle、SQL Server等)提供了兼容性支持。