MybatisPlus
基本用法
1.引入依赖
1 2 3 4 5
| <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>
|
2.定义Mapper
自定义的mapper需要继承MybatisPlus提供的BaseMapper接口
1 2 3
| public interface UserMapper extends BaseMapper<User>{ }
|
常见注解
MyBatisPlus通过扫描实体类。并基于反射获取实体类信息作为数据库表信息
这个过程遵循一些约定俗成:
若不符合约定,则通过注解来得到数据库表信息
- @TableName:用来指定表名
- @TableId:用来指定表中的主键字段信息
- @TableField:用来指定表中的普通字段信息
1 2 3 4 5 6 7 8 9 10 11 12 13
| @TableName("tb_user") public class User{ @TableId(value="id",type=Idtype.AUTO) private Long id; @TableField("username") private String name; @TableField("is_married") private Boolean isMarried; @TableField("'order'") private Integer order; @TableField(exist=false) private String address; }
|
常见配置
MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:
1 2 3 4 5 6 7 8 9 10
| mybatis-plus: type-aliases-package:com.itheima.mp.domain.po mapper-locations:"classpath*:/mapper/**/*.xml" configuration: map-underscore-to-camel-case:true cache-enabled:false global-config: db-config: id-type:assign_id update-strategy:not_null
|
条件构造器
mp支持各种复杂的where条件
QueryWrapper拓展了查询相关的功能
UpdateWrapper拓展了更新相关的功能
基于QueryWrapper的查询
Mybatis-plus实现:
1 2 3 4 5 6 7 8 9 10
| @Test void testQueryWrapper(){ QueryWrapper<User> wrapper = new QueryWrapper<User>() .select("id","username","info","balance") .like("username","o") .ge("balance",1000); List<User> users = userMapper.selectList(wrapper); }
|
1 2 3 4 5 6 7 8 9 10
| @Test void testUpdateByQueryMapper(){ User user = new User(); user.setBalance(2000); QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username","jack"); userMapper.update(user,wrapper); }
|
基于UpdateWrapperd的更新
Mybatis-plus实现:
1 2 3 4 5 6 7 8
| @Test void testUpdateWrapper(){ List<Long> id = LIst.of(1L,2L,4L); UpdateWrapper<User> wrapper = new UpdateWrapper<User>() .setSql("balance = balance - 200") .in("id",ids); iserWrapper.update(null,wrapper); }
|
LambdaQueryWrapper
区别:通过反射防止了字符串硬编码
1 2 3 4 5 6 7 8 9 10
| @Test void testLambdaQueryWrapper(){ LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>() .select(User::getId,User::getUsername,User::getInfo,User::getBalance) .like(User::getUsername,"o") .ge(User::getBalance,1000); List<User> users = userMapper.selectList(wrapper); }
|
自定义SQL
利用MYbatisPlus的wrapper来构建复杂的Where条件,然后自定义SQL语句中剩下的部分
example:
我们可以利用MybatisPlus的Wrapper来构建复杂的Where条件,然后自定义SQL语句中剩下的部分
Service接口
你的Servicr接口需要继承IService,ServicrImpl需要继承Mybatis-plus的ServiceImpl类