一、标准CRUD使用

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

我们先来看张图:

1.1 环境准备

这里用的环境就是Java开发学习(四十)----MyBatisPlus入门案例与简介中使用的环境

二、新增

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

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

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

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

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

   @Autowired
   private UserDao userDao;

   @Test
   void testSave() {
       User user = new User();
       user.setName("黑马程序员");
       user.setPassword("itheima");
       user.setAge(12);
       user.setTel("4006184000");
       userDao.insert(user);
  }
}

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

但是数据中的主键ID,有点长,那这个主键ID是如何来的?我们更想要的是主键自增,应该是5才对,这个是我们后面要介绍的主键ID生成策略,这块的这个问题,我们暂时先放放。

三、删除

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

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

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

      从这张图可以看出,

      • String和Number是Serializable的子类,

      • Number又是Float,Double,Integer等类的父类,

      • 能作为主键的数据类型都已经是Serializable的子类,

      • MyBatisPlus使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

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

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

 @SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

   @Autowired
   private UserDao userDao;

   @Test
   void testDelete() {
       // 传入主键id
       userDao.deleteById(1401856123725713409L);
  }
}

四、修改

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

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

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

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

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

   @Autowired
   private UserDao userDao;

   @Test
   void testUpdate() {
       User user = new User();
       user.setId(1L);
       user.setName("Tom888");
       user.setPassword("tom888");
       userDao.updateById(user);
  }
}

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

五、根据ID查询

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

T selectById (Serializable id)
  • Serializable:参数类型,主键ID的值

  • T:根据ID查询只会返回一条数据

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

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

   @Autowired
   private UserDao userDao;
   
   @Test
   void testGetById() {
       User user = userDao.selectById(2L);
       System.out.println(user);
  }
}

六、查询所有

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

List<T> selectList(Wrapper<T> queryWrapper)
  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null

  • List<T>:因为查询的是所有,所以返回的数据是一个集合

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

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

   @Autowired
   private UserDao userDao;
   
   @Test
   void testGetAll() {
       List<User> userList = userDao.selectList(null);
       System.out.println(userList);
  }
}

七、Lombok

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

  • 私有属性

  • setter...getter...方法

  • toString方法

  • 构造函数

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

概念

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

使用步骤

步骤1:添加lombok依赖
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <!--<version>1.18.12</version>-->
</dependency>

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

步骤2:安装Lombok的插件

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

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

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

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

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

Lombok常见的注解有:

  • @Setter:为模型类的属性提供setter方法

  • @Getter:为模型类的属性提供getter方法

  • @ToString:为模型类的属性提供toString方法

  • @EqualsAndHashCode:为模型类的属性提供equals和hashcode方法

  • @Data:是个组合注解,包含上面的注解的功能

  • @NoArgsConstructor:提供一个无参构造函数

  • @AllArgsConstructor:提供一个包含所有参数的构造函数

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
   private Long id;
   private String name;
   private String password;
   private Integer age;
   private String tel;
}

说明:

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
   private Long id;
   private String name;
   private String password;
   private Integer age;
   private String tel;

   public User(String name, String password) {
       this.name = name;
       this.password = password;
  }
}

这种方式是被允许的。

八、分页功能

分页查询使用的方法是:

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
  • IPage:用来构建分页查询条件

  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null

  • IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage

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

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

@SpringBootTest
class Mybatisplus01QuickstartApplicationTests {

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

步骤2:设置分页拦截器

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

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

说明:上面的代码记不住咋办呢?

这些内容在的官方文档中有详细的说明,我们可以查看官方文档类配置

步骤3:运行测试程序

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

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

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

Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发的更多相关文章

  1. 利用dbutils工具实现数据的增删查改操作(dbutis入门)

    一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...

  2. EAS开发之对已有单据的增删查改功能开发

      一:对于一个已经在其他业务部门定义好的业务单元,在另一个部门新增该业务单元的增删查改操作,应该怎么做?     由于业务单元已经定义过了,所以我们不能再进行建模.定义单据ui.而是要开发出一个单据 ...

  3. Java开发学习(四十)----MyBatisPlus入门案例与简介

    一.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来 ...

  4. mysql数据库,数据表,数据的增删查改语句

    查询mysql支持的引擎 show engines; 查询mysql支持的字符集 show character set; 设置mysql默认存储引擎 set default_storage_engin ...

  5. MyBatis3-实现单表数据的增删查改

    继续前一篇文章http://www.cnblogs.com/EasonJim/p/7050710.html所示的例子,返回的是单个实体,而接下来将进行列表的返回等操作: 一.查询列表 查询出列表,也就 ...

  6. SQLServer数据操作(建库、建表以及数据的增删查改)

              SQLSever数据操作   一.建立数据库:   create database DB ---数据库名称 (          name=data1 --文件名,         ...

  7. SQLServer数据操作(建库、建表以及数据的增删查改)[转]

    SQLSever数据操作   一.建立数据库:   create database DB ---数据库名称 (          name=data1 --文件名,          filename ...

  8. 如何在Vue中使用Mockjs模拟数据的增删查改

    之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...

  9. ASP.NET使用EasyUI-DataGrid + ashx + JQuery Ajax:实现数据的增删查改,查询和分页!

    转自:http://www.cnblogs.com/lt-style/p/3457399.html 数据表: 学生表:学生编号.姓名.性别.班级编号.年龄 班级表:班级编号.班级名称 开发过程: 1. ...

随机推荐

  1. Util和Helper类

    Util和Helper Util Util类,应该是一个无状态的类,只有静态方法. 比如在获取某些类的全局实例化对象的时候可以使用. public class ParamUtil { ... publ ...

  2. 配置IConfiguration

    前言 配置是我们必不可少的功能,我们在开发中,经常会遇到需要获取配置信息的需求,那么如何才能优雅的获取配置信息? 我们希望新的配置: 支持强类型 配置变更后通知 学习难度低 快速入门 根据使用场景我们 ...

  3. Hadoop集群运行

    在Hadoop文件参数配置完成之后 在master上操作 su - hadoop cd /usr/local/src/hadoop/ ./bin/hdfs namenode -format hadoo ...

  4. KingbaseES R6 集群物理copy方式手工添加新备库节点

    案例说明: 对于主库数据量比较大的环境,在添加新节点是可以采用在线clone方式创建新的备库节点,也可以在离线的状态下,直接拷贝其中一个备库的所有集群相关目录来创建新的备库节点.本案例介绍了通过离线物 ...

  5. K8S Service_Ingress

    Service 在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失 Service(服务)就是用来解决这个问题的核心该你啊 一个Service可以看作 ...

  6. 新建Github仓库并上传本地代码

    按照Github的教程 Adding a local repository to GitHub using Git 1. 创建空的Github仓库 创建远程仓库 ,注意不要勾选Add a README ...

  7. spring native 初体验实现 小米控制美的空调

    目前关于 spring native 分享的文章还比较少 写这篇文章的主要目前是分享一下自己写的一个 小米控制美的空调 的程序 集成 spring native 过程中碰到的一些问题和解决方法 先放地 ...

  8. 我的Vue之旅、02 ES6基础、模块、路径、IO

    自定义模块 为什么要模块?模块化源代码能给我们带来什么好处? 试想一个巨无霸网购平台,在没有模块化的情况下,如果出现bug,程序员就要在几百万行代码里调试,导致后期维护成本上升,为了解决问题,模块化按 ...

  9. .NET WebAPI 自定义 NullableConverter 解决请求入参 “”空字符触发转换异常问题

    最近在项目中启用了Nullable 可为空的类型,这个特性确实很好用,在 WebAPI 的入参上可以直接采用 ? 来标记一个字段是否允许为空,但是使用过程中遇到了如下一个问题,比如创建部门接口 我们定 ...

  10. Git将本地仓库上传到github

    这里采用简单的描述,提供两种方式: 一.连接本地文件夹和远程仓库 1.使用pull--拉取github项目文件 (1)进入到自己要上传的文件夹内部,然后git bash here (2)输入命令 gi ...