前言
之前介绍了 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 真正地提升了撸码效率.
其他学习要点:
mybatis-plus 条件构造器
lamda 表达式
常用注解
...
学习地址: https://mp.baomidou.com/guide/
示例代码
码云
来源: https://www.cnblogs.com/zwqh/p/12205311.html