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

之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式;虽然注解方式干掉了 xml 文件,但是使用起来并不优雅,本文将介绍 mybats-plus 的常用实例,简化常规的 CRUD 操作。

mybatis-plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

学习 mybatis-plus: 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. 常用注解

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

原文 

https://juejin.im/post/5e2120aff265da3e2f4f186d

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址