• Spring Boot 2.X(十九):集成 mybatis-plus 高效开发


    前言

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

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

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

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

  • 相关阅读:
    python三元表达式
    购物车的升级系统
    python迭代器
    python函数装饰器
    python 闭包函数
    python名称空间与作用域
    python函数的嵌套
    python函数对象
    python函数之可变长参数
    python函数的参数
  • 原文地址:https://www.cnblogs.com/zwqh/p/12205311.html
Copyright © 2020-2023  润新知