MyBatis-Plus标准数据层开发

1. 标准CRUD使用

对于标准的CRUD功能都有哪些以及MP都提供了哪些方法可以使用呢?

我们先来看张表:

功能 自定义接口 MP接口
新增 boolean save(T t) int insert(T t)
删除 boolean delete(int id) int deleteById(Serializeble id)
修改 boolean update(T t) int updateById(T t)
根据ID查询 T getById(int id) T selectById(Serializeble id)
查询全部 List getAll() List selectList(Wapper queryWrapper)
分页查询 PageInfo getAll(int page, int size) IPage selectPage(IPage page,Wapper queryWrapper)
按条件分页查询 List getAll(Condition condition) IPage selectPage(IPage page,Wapper queryWrapper)

对于这张表的方法,我们挨个来演示下:

2. 新增

在进行新增之前,我们可以分析下新增的方法:

int insert (T t)
  • T:泛型,新增用来保存新增数据

  • int:返回值,新增成功后返回1,没有新增成功返回的是0

在测试类中进行新增操作:

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	void testInsert() {
		User user = new User();
		user.setUserName("奋进吧");
		user.setEmail("[email protected]");
		user.setBranchName("上海奋进吧");
		int i = userDao.insert(user);
		System.out.println(i);
	}

}

执行测试后,数据库表中就会添加一条数据。

在这里插入图片描述

在这里插入图片描述

3. 删除

在进行删除之前,我们可以分析下删除的方法:

int deleteById (Serializable id)
  • Serializable:参数类型

    • 思考:参数类型为什么是一个序列化类?

      • String和Number是Serializable的子类,
    • Number又是Float,Double,Integer等类的父类,

      • 能作为主键的数据类型都已经是Serializable的子类,
    • MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

  • int:返回值类型,数据删除成功返回1,未删除数据返回0。

在测试类中进行新增操作:

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;


	@Test
	void  testDelete(){
		int i = userDao.deleteById(132);
		System.out.println(i);
	}

}

4. 修改

在进行修改之前,我们可以分析下修改的方法:

int updateById(T t);
  • T:泛型,需要修改的数据内容,注意因为是根据ID进行修改,所以传入的对象中需要有ID属性值

  • int:返回值,修改成功后返回1,未修改数据返回0

在测试类中进行新增操作:

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;
	
	@Test
	void testUpdate(){
		User user = new User();
		user.setUserId(146);
		user.setUserName("奋进吧2");
		user.setEmail("[email protected]");
		user.setBranchName("奋进吧");
		int i = userDao.updateById(user);
		System.out.println(i);
	}
}

说明: 修改的时候,只修改实体对象中有值的字段。

5. 根据ID查询

在进行根据ID查询之前,我们可以分析下根据ID查询的方法:

T selectById (Serializable id)
  • Serializable:参数类型,主键ID的值
  • T:根据ID查询只会返回一条数据

在测试类中进行新增操作:

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	void testSelectById(){
		User user = userDao.selectById(146);
		System.out.println(user.toString());
	}
}

6. 查询所有

在进行查询所有之前,我们可以分析下查询所有的方法:

List<T> selectList(Wrapper<T> queryWrapper)
  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
  • List:因为查询的是所有,所以返回的数据是一个集合

在测试类中进行新增操作:

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	void testSelectAll(){
		List<User> userList = userDao.selectList(null);
		userList.forEach(System.out::println);
	}
}

7. Lombok

代码写到这,我们会发现DAO接口类的编写现在变成最简单的了,里面什么都不用写。反过来看看模型类的编写都需要哪些内容:

  • 私有属性
  • setter…getter…方法
  • toString方法
  • 构造函数

虽然这些内容不难,同时也都是通过IDEA工具生成的,但是过程还是必须得走一遍,那么对于模型类的编写有没有什么优化方法?就是我们接下来要学习的Lombok。

概念

  • Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发。

使用步骤

步骤1:添加lombok依赖

		<dependency>
			<groupId>org.projectlombokgroupId>
			<artifactId>lombokartifactId>
		dependency>

注意: 版本可以不用写,因为SpringBoot中已经管理了lombok的版本。

步骤2:安装Lombok的插件

新版本IDEA已经内置了该插件,如果删除setter和getter方法程序有报红,则需要安装插件

MyBatis-Plus标准数据层开发_第1张图片

如果在IDEA中找不到lombok插件,可以访问如下网站

https://plugins.jetbrains.com/plugin/6317-lombok/versions

根据自己IDEA的版本下载对应的lombok插件,下载成功后,在IDEA中采用离线安装的方式进行安装。

MyBatis-Plus标准数据层开发_第2张图片

步骤3:模型类上添加注解

Lombok常见的注解有:

  • @Setter:为模型类的属性提供setter方法
  • @Getter:为模型类的属性提供getter方法
  • @ToString:为模型类的属性提供toString方法
  • @EqualsAndHashCode:为模型类的属性提供equals和hashcode方法
  • @Data:是个组合注解,包含上面的注解的功能
  • @NoArgsConstructor:提供一个无参构造函数
  • @AllArgsConstructor:提供一个包含所有参数的构造函数

Lombok的注解还有很多,上面标识的三个是比较常用的。

@TableName(value = "platform_user")
//当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private  Integer userId;
    private  String email;
    private  String userName;
    private  String branchName;
}

说明:

Lombok只是简化模型类的编写,我们之前的方法也能用,比如有人会问:我如果只想要有userName和email的构造函数,该如何编写?

@TableName(value = "platform_user")
//当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private  Integer userId;
    private  String email;
    private  String userName;
    private  String branchName;

    public User(String userName,String email){
        this.setUserName(userName);
        this.setEmail(email);
    }
}

这种方式是被允许的。

8. 分页功能

基础的增删改查就已经学习完了,刚才我们在分析基础开发的时候,有一个分页功能还没有实现,在MP中如何实现分页功能,就是咱们接下来要学习的内容。

分页查询使用的方法是:

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
  • IPage:用来构建分页查询条件
  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
  • IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage

IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+h,会找到其有一个实现类为Page

步骤1:调用方法传入参数获取返回值

@SpringBootTest
class SpringbootMp02CrudApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	void testPageSelect(){
		//1 创建IPage分页对象,设置分页参数,1为当前页码,5为每页显示的记录数
		IPage<User> userIPage = new Page<>(1,5);
		//2 执行分页查询
		userIPage = userDao.selectPage(userIPage,null);
		System.out.println("当前页码值 = " + userIPage.getCurrent());
		System.out.println("一共多少页 = " + userIPage.getPages());
		System.out.println("每页显示数 = " + userIPage.getSize());
		System.out.println("一共多少条数据 = " + userIPage.getTotal());
		System.out.println("数据 = ↓↓↓↓ ");
		userIPage.getRecords().forEach(System.out::println);
	}
}

步骤2:设置分页拦截器

这个拦截器MP已经为我们提供好了,我们只需要将其配置成Spring管理的bean对象即可。

@Configuration
public class MpConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1 创建MybatisPlusInterceptor拦截器对象
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2 添加分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
    
}

步骤3:运行测试程序

MyBatis-Plus标准数据层开发_第3张图片

如果想查看MP执行的SQL语句,可以修改application.yml配置文件,

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #打印SQL日志到控制台

打开日志后,就可以在控制台打印出对应的SQL语句,开启日志功能性能就会受到影响,调试完后记得关闭。

MyBatis-Plus标准数据层开发_第4张图片


项目代码

  • gitee 代码下载

  • github 代码下载

你可能感兴趣的:(MyBatisPlus,java,spring,boot,maven,mybatisplus)