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>{

}

6

常见注解

MyBatisPlus通过扫描实体类。并基于反射获取实体类信息作为数据库表信息

这个过程遵循一些约定俗成:

  • 驼峰转下划线
  • 名为id发字段作为主键

若不符合约定,则通过注解来得到数据库表信息

  • @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) //一定要指定type为自增长,否则默认为雪花算法
private Long id;
@TableField("username")
private String name;
@TableField("is_married") //使用is开头的字段,mp在反射的时候会自动将is去掉,所以一定要加@TableField
private Boolean isMarried;
@TableField("'order'") //名称与数据库关键字冲突,使用@TableField并加''转译字符
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" # 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 #更新策略:只更新非空字段

条件构造器

mp支持各种复杂的where条件

7

QueryWrapper拓展了查询相关的功能

UpdateWrapper拓展了更新相关的功能

基于QueryWrapper的查询

9

Mybatis-plus实现:

1
2
3
4
5
6
7
8
9
10
@Test
void testQueryWrapper(){
//1.构建查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id","username","info","balance")
.like("username","o")
.ge("balance",1000);
//2.查询
List<User> users = userMapper.selectList(wrapper);
}
1
2
3
4
5
6
7
8
9
10
@Test
void testUpdateByQueryMapper(){
//1.需要更新的数据
User user = new User();
user.setBalance(2000);
//2.更新的条件
QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username","jack");
//3.执行更新
userMapper.update(user,wrapper);
}

基于UpdateWrapperd的更新

8

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(){
//1.构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.select(User::getId,User::getUsername,User::getInfo,User::getBalance)
.like(User::getUsername,"o")
.ge(User::getBalance,1000);
//2.查询
List<User> users = userMapper.selectList(wrapper);
}

自定义SQL

利用MYbatisPlus的wrapper来构建复杂的Where条件,然后自定义SQL语句中剩下的部分

example:

10

我们可以利用MybatisPlus的Wrapper来构建复杂的Where条件,然后自定义SQL语句中剩下的部分

11

Service接口

12

你的Servicr接口需要继承IService,ServicrImpl需要继承Mybatis-plus的ServiceImpl类