MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 (摘自官网)。
一.pom.xml添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
版本可以根据自己的spring版本而定。
最好配合lombok使用,不必一个一个编写get/set方法,lombok依赖如下。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
二.编辑配置
在application.yml文件中对mybatis进行配置:
mybatis-plus:
configuration:
# 数据库命名与驼峰命名自动对应
map-underscore-to-camel-case: true
global-config:
db-config:
# 雪花算法生成id
id-type: assign_id
设置 map-underscore-to-camel-case: true 以后,Mybatis-Plus会自动把数据库中名为 user_order 的表与用驼峰命名的实体类 userOrder 对应
设置 id-type: ASSIGN_ID 以后,实体类的id会使用雪花算法自动生成
三.实体类
(例子如下)
@Data
public class User implements Serializable {
private static final Long serialVersionUID = 1L;
private Long id;
private String username;
private String password;
private String gender;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
private Integer status;
private String icon;
private String phoneNumber;
private String nickname; //昵称
}
User实体类会自动和数据库中的user表对应。
切记加@Data注解,否则会出现数据无法注入的情况。
四.三层架构(持久层 业务层 表现层)
1.持久层:继承BaseMapper<T>,泛型为对应的实体类
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
其实继承完BaseMapper以后,其实mapper里就已经有很多封装方法了,如下
其实这时候初步的简化开发已经做完了(不需要再手写SQL了),service层直接包装、组合这些方法就可以,就像之前用普通的Mybatis一样。
如果想继续简化,就需要对service层做修改。
2.业务层:继承 IService 和 ServiceImpl
userService代码如下
public interface UserService extends IService<User> {
}
userServiceImpl代码如下
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
可以发现业务层不需要写任何代码,只需要继承Mybatis-Plus提供的类即可,之后在表现层注入userService后,会发现里面已经完美的封装了userMapper中的代码,如下:
五.查询(queryWrapper等)
在controller中调用service层的方法,举个例子:
@GetMapping
public Result<User> get(String username){
//新建一个条件构造器
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
//.eq() 即equal,等于的意思 status=1,username=username
queryWrapper.eq(User::getStatus,1).eq(User::getUsername,username);
//调用service查询
User user = userService.getOne(queryWrapper);
return Result.success(user);
}
还有很多种条件构造器和查询函数,不一一介绍了,链接