前言
之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式;虽然注解方式干掉了 xml 文件,但是使用起来并不优雅,本文将介绍 mybats-plus 的常用实例,简化常规的 CRUD 操作。
mybatis-plus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
学习 mybatis-plus:https://mp.baomidou.com/guide
常用实例
1. 项目搭建
1.1 pom.xml
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-devtools
true
com.baomidou
mybatis-plus-boot-starter
3.3.0
1.2 application.yaml
# spring setting
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: zwqh@0258
1.3 实体类 UserEntity
@TableName(value="t_user")
public class UserEntity {
@TableId(value="id",type=IdType.AUTO)
private Long id;
private String userName;
private String userSex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
}
@TableName 指定数据库表名,否则默认查询表会指向 user_entity ;@TableId(value="id",type=IdType.AUTO) 指定数据库主键,否则会报错。
1.4 Dao层 UserDao
继承 BaseMapper
public interface UserDao extends BaseMapper{
}
1.5 启动类
在启动类添加 @MapperScan 就不用再 UserDao 上用 @Mapper 注解。
@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
public class SpringBootMybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisPlusApplication.class, args);
}
}
1.6 分页插件配置
@Configuration
public class MybatisPlusConfig {
/**
* mybatis-plus分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor page = new PaginationInterceptor();
page.setDialectType("mysql");
return page;
}
}
2.示例
2.1 新增
新增用户
UserEntity user=new UserEntity();
user.setUserName("朝雾轻寒");
user.setUserSex("男");
userDao.insert(user);
2.2 修改
根据id修改用户
UserEntity user=new UserEntity();
user.setUserName("朝雾轻晓");
user.setUserSex("男");
user.setId(25L);
userDao.updateById(user);
根据entity条件修改用户
UserEntity user=new UserEntity();
user.setUserSex("女");
userDao.update(user,new QueryWrapper().eq("user_name", "朝雾轻寒"));
2.3 查询
根据id查询用户
UserEntity user = userDao.selectById(id);
根据entity条件查询总记录数
int count = userDao.selectCount(new QueryWrapper().eq("user_sex", "男"));
根据 entity 条件,查询一条记录,返回的是实体
QueryWrapper queryWrapper=new QueryWrapper();
UserEntity user=new UserEntity();
user.setUserName("朝雾轻寒");
user.setUserSex("男");
queryWrapper.setEntity(user);
user = userDao.selectOne(queryWrapper);
如果表内有两条或以上的相同数据则会报错,可以用来判断某类数据是否已存在
根据entity条件查询返回第一个字段的值(返回id列表)
QueryWrapper queryWrapper=new QueryWrapper();
UserEntity user=new UserEntity();
user.setUserSex("男");
queryWrapper.setEntity(user);
List
根据map条件查询返回多条数据
Map map=new HashMap();
map.put("user_name", username);
map.put("user_sex",sex);
List list = userDao.selectByMap(map);
根据entity条件查询返回多条数据(List)
Map map=new HashMap();
map.put("user_sex","男");
List list = userDao.selectList(new QueryWrapper().allEq(map));
根据entity条件查询返回多条数据(List
Map map=new HashMap();
map.put("user_sex","男");
List
根据ID批量查询
List ids=new ArrayList();
ids.add(1L);
ids.add(2L);
ids.add(3L);
List list = userDao.selectBatchIds(ids);
主键ID列表(不能为 null 以及 empty)
分页查询
Page page=userDao.selectPage(new Page<>(1,5), new QueryWrapper().eq("user_sex", "男"));
Page
需先配置分页插件bean,否则分页无效。如有pagehelper需先去除,以免冲突。
new Page<>(1,5),1表示当前页,5表示页面大小。
2.4 删除
根据id删除用户
userDao.deleteById(1);
根据entity条件删除用户
userDao.delete(new QueryWrapper().eq("id", 1));
根据map条件删除用户
Map map=new HashMap();
map.put("user_name", "zwqh");
map.put("user_sex","男");
userDao.deleteByMap(map);
根据ID批量删除
List ids=new ArrayList();
ids.add(1L);
ids.add(2L);
ids.add(3L);
userDao.deleteBatchIds(ids);
主键ID列表(不能为 null 以及 empty)
小结
本文介绍了 mybatis-plus 相关的 Mapper层 CRUD 接口实现,其还提供了 Service层 CRUD 的相关接口,有兴趣的小伙伴可以去使用下。 mybatis-plus 真正地提升了撸码效率。
其他学习要点:
- mybatis-plus 条件构造器
- lamda 表达式
- 常用注解
- ...
学习地址:https://mp.baomidou.com/guide/
示例代码
github
码云