赞
踩
环境版本号
springboot 2.7.12
java 11
MyBatis-Plu 是MyBatis的增强工具,为MyBatis提供了一些增强特性,简化了数据库操作的开发。
代码如下:由于这个starter包含对mybatis的⾃动装配,因此完全可以替换掉Mybatis的starter。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
代码如下:Mapper要继承 BaseMapper,需要写上对应pojo的泛型,不再需要编写查询语句和方法
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
代码如下:直接调用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); } } }
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; }
代码如下:
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 # 更新策略:只更新非空字段
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); } }
提供了通用的Mapper接口,通过继承该接口,可以实现基础的增删改查操作,无需手动编写SQL语句。
引入Lambda表达式和条件构造器,使得查询条件的拼接更加直观、简洁,提高代码的可读性。
支持在实体类中定义字段的填充策略,例如创建时间、更新时间等,在插入和更新时自动填充相应的字段。
提供了方便的分页查询方法,简化了对分页的处理,支持多种分页插件。
支持逻辑删除功能,通过在实体类中定义逻辑删除字段,删除时仅更新标记字段而非真正删除记录。
集成了性能分析插件,可以方便地查看SQL执行性能,帮助进行性能优化。
提供了乐观锁的支持,通过在实体类中定义版本字段,实现对数据的乐观锁控制。
MyBatis-Plus内置了代码生成器,可以根据数据库表结构生成相应的实体类、Mapper接口等代码,加速开发过程。
提供了多租户的支持,方便在一个系统中处理多租户的数据隔离需求。
支持二级缓存,可以配置缓存策略提升查询性能。
提供自定义SQL注入功能,可以在运行时动态注入SQL,满足复杂业务场景的需求。
支持复杂的查询条件,包括嵌套条件、自定义SQL片段等。
对多种数据库(MySQL、Oracle、SQL Server等)提供了兼容性支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。