前言

之前介绍了 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

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <!-- 热部署模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency> <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>

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,T表示对应实体类

public interface UserDao extends BaseMapper<UserEntity>{

}

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<UserEntity>().eq("user_name", "朝雾轻寒"));

2.3 查询

根据id查询用户
UserEntity user = userDao.selectById(id);
根据entity条件查询总记录数
int count = userDao.selectCount(new QueryWrapper<UserEntity>().eq("user_sex", "男"));
根据 entity 条件,查询一条记录,返回的是实体
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
UserEntity user=new UserEntity();
user.setUserName("朝雾轻寒");
user.setUserSex("男");
queryWrapper.setEntity(user);
user = userDao.selectOne(queryWrapper);

如果表内有两条或以上的相同数据则会报错,可以用来判断某类数据是否已存在

根据entity条件查询返回第一个字段的值(返回id列表)
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
UserEntity user=new UserEntity();
user.setUserSex("男");
queryWrapper.setEntity(user);
List<Object> objs= userDao.selectObjs(queryWrapper);
根据map条件查询返回多条数据
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_name", username);
map.put("user_sex",sex);
List<UserEntity> list = userDao.selectByMap(map);
根据entity条件查询返回多条数据(List)
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<UserEntity> list = userDao.selectList(new QueryWrapper<UserEntity>().allEq(map));
根据entity条件查询返回多条数据(List<Map<String, Object>> )
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<Map<String, Object>> list = userDao.selectMaps(new QueryWrapper<UserEntity>().allEq(map));
根据ID批量查询
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
List<UserEntity> list = userDao.selectBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

分页查询
Page<UserEntity> page=userDao.selectPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
Page<Map<String, Object>> page=userDao.selectMapsPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));

需先配置分页插件bean,否则分页无效。如有pagehelper需先去除,以免冲突。

new Page<>(1,5),1表示当前页,5表示页面大小。

2.4 删除

根据id删除用户
userDao.deleteById(1);
根据entity条件删除用户
userDao.delete(new QueryWrapper<UserEntity>().eq("id", 1));
根据map条件删除用户
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_name", "zwqh");
map.put("user_sex","男");
userDao.deleteByMap(map);
根据ID批量删除
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
userDao.deleteBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

小结

本文介绍了 mybatis-plus 相关的 Mapper层 CRUD 接口实现,其还提供了 Service层 CRUD 的相关接口,有兴趣的小伙伴可以去使用下。 mybatis-plus 真正地提升了撸码效率。

其他学习要点:

  1. mybatis-plus 条件构造器
  2. lamda 表达式
  3. 常用注解
  4. ...

学习地址:https://mp.baomidou.com/guide/

示例代码

github

码云

非特殊说明,本文版权归 朝雾轻寒 所有,转载请注明出处.

原文标题:Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

原文地址:https://www.zwqh.top/article/info/33

如果文章有不足的地方,欢迎提点建议,后续会完善~

如果文章对您有帮助,请给我点个赞哦~

关注下我的公众号,文章持续更新中...

最新文章

  1. C# 如何强制关闭WINWORD进程
  2. Mysql自动备份工具1.0(2013年11月15日更新)
  3. android 系统应用在运行时被卸载
  4. ImageSwitcher的应用
  5. js 前加分号和感叹号是什么意思?
  6. Java [Leetcode 219]Contains Duplicate II
  7. 2.2CUDA-Memory(存储)和bank-conflict
  8. struts2 自定义拦截,防止非法操作
  9. qt的资源替换搜索QDir具体解释
  10. 2.1 实践篇:使用ping来检测网速
  11. 基于JAVA语言的多线程技术
  12. Python二级-----------程序冲刺5
  13. Python内置函数(40)——map
  14. NOIP2015题解
  15. [development][suricata] linux下一代权限控制 capabilities
  16. vue 局部引入js插件
  17. Codeforces Recycling Bottles 模拟
  18. java绘图drawString位置的确定
  19. android布局自适应小示例(用户反馈界面)
  20. 机器学习之线性回归(纯python实现)][转]

热门文章

  1. Python--day25--面向对象之封装
  2. java StringBuffer 与 StringBuilder
  3. Python--day46--今日概要
  4. webpack优化 -- happypack
  5. 四叶草(css)
  6. 21个项目玩转深度学习:基于TensorFlow的实践详解02—CIFAR10图像识别
  7. C# 自动翻页 PPT 测试脚本
  8. int32 无符号范围 -2147483648~2147483647
  9. DEVOPS技术实践_04:Jenkins参数化构建
  10. Python学习3月8号【python编程 从入门到实践】---》笔记(1)