Mybatis-plus的CURD操作详解

基础知识

前情提要:这只是我个人的一个笔记,分享给大家是希望像我这样的初学者,能够更好的学习,如果有什么问题欢迎指出,谢谢大家!!
当然最重要的还是看文档 , CURD的文档
CURD
文档中有一些我截图下来放在了文章中,有一些希望大家自己去看噢!

  1. mybatis 在持久层框架比较火 , 一般项目都是基于ssm . (ssm : spring+springMVC+mybatis)

  2. mybatis-plus 称为增强mybatis ;

  3. mybatis-plus 对于mybatis只做增强,不做改变 . ----> 封装了一些 curd 方法 , 我们不需要再写 xml 了 . (CURD定义了数据库的基本原子操作 . 它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。)

  4. 使用pom.xml配置依赖的时候,集成mybatis-plus要把mybatis、mybatis-spring去掉,避免冲突;

  5. lombok工具,添加了它的依赖,开发工具再安装Lombok插件,就可以使用它了,最常用的用法就是在实体类中使用它的@Data注解,这样实体类就不用写set、get、toString等方法了。

  6. 一些参数
    @Data是Lombok插件的一个注解,这样实体类就不用写set,get这些方法了 .
    @TableName("…") 入参value 用于指定表名 也可以写成@TableName(value = “…”)
    value值要和数据库主键的列名一致 . 如果实体类的属性名和数据库主键列名一致 , 可省略value .
    type = IdType.AUTO 指定自增策略

@TableId(value = "contact_id" , type = IdType.AUTO)  
 private Integer contactId;

若没有开启驼峰命名,或者表中列名不符合驼峰规则,可通过该@TableField注解指定数据库表中的列名
exist标明数据表中有没有对应列

@TableField(value = "last_name",exist = true)
private String lastName;

CURD操作

现在先定义一下我们会用到的东西: 1.class Employee (这是一个实体类!里面会封装一些字段,例如LastName , Id 等等 ) 2.interface EmplopyeeDao(这是一个Mapper继承了BaseMapper)

1.insert

首先将定义的Mapper接口,创建其对象.

private EmplopyeeDao emplopyeeDao;

其次将定义的实体类实例化,创建实体类的Java bean .

Employee employee = new Employee();

然后设置Java bean的属性 .

emplopyee.setName("帅哥");
emplopyee.setEmail("[email protected]");//这个gmail可不是我的^.^

最后Java bean调用Mapper的insert方法,传入实体 .

emplopyeeDao.insert(employee);

mybatis plus会自动把当前插入对象在数据库中的id写回到该实体中
Mybatis-plus的CURD操作详解_第1张图片

2.update

首先将定义的Mapper接口,创建其对象.

private EmplopyeeDao emplopyeeDao;

其次将定义的实体类实例化,创建实体类的Java bean .

Employee employee = new Employee();

设置要修改的属性

emplopyee.setId(1);
emplopyee.setEmail("[email protected]");//别想了,这个也不是我的

最后Java bean调用Mapper的updateById方法,传入实体 . 根据id进行更新,没有传值的属性就不会更新

emplopyeeDao.updateById(employee);

mybatis-plus还有另一个方法叫做updateAllColumnById , 根据id进行更新,没传值的属性就更新为null

emplopyeeDao.updateAllColumnById(employee);
``
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331190958247.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01fbV9tX1o=,size_16,color_FFFFFF,t_70)

## 3.select
### 3.1 根据id进行查询
employee是实体类Employee的实例 , emplopyeeDao是Mapper接口的对象
```java
Employee employee = emplopyeeDao.selectById(1);

3.2 根据id进行条件查询

private EmplopyeeDao emplopyeeDao;
实例化一个Employee的对象,用于承载条件, 现在的条件是查询eamil是xxx,id为1的.

SELECT employee FROM tb_employee WHERE id = 1 AND Email = '[email protected]';
//上面是sql语句的实现
Employee employee = new Employee();
employee.setEmail("[email protected]");
employee.setId(1);
Employee employee2 = emplopyeeDao.selectOne(employee);

若是数据库中符合传入的条件的记录有多条,那就不能用这个方法,会报错.

3.3 根据查询返回多条语句

查询条件用map集合封装,columnMap中String类型的参数应该写的是数据表中的列名,而非实体类的属性名。
比如属性名为lastName,数据表中字段为last_name,这里应该写的是last_name。

Map<String,Object> columnMap = new HashMap<>();
columnMap.put("last_name","yang");
columnMap.put("gender","1");//这里用1代表男性哈
//selectByMap方法返回值用list集合接收。
List<Employee> employees = emplopyeeDao.selectByMap(columnMap);
System.out.println(employees.size());

3.4 通过id进行批量查询

mybatis plus有一个selectBatchIds方法,用于通过id进行批量查询,传入的是List id;

List<Integer> ids = new List<>();
ids.add(1);
ids.add(2);
ids.add(3);
//把需要查询的id全部塞到数组中去 , 该方法返回的是对应id的所有记录,所有返回值也是用list接收。
List<Employee> employees = emplopyeeDao.selectBatchIds(ids)

3.5 分页查询

mybatis plus有一个selectPage方法,可以进行条件分页查询
我之前就被page和limit困扰好久,可能大家觉得太简单了,所以没人来解释.我会在文章的末尾做一个详细的解释.

//使用条件查询LambdaQueryWrapper,条件为id为1
LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq("id" , 1);
//实例化分页对象,用于指定分页查询的页码以及每一页的数据数量,page为页码,limit为每一页的数据数量
Page<Employee> queryPage = new Page<>(page , limit);
//emplopyeeDao为Mapper的对象,selectPage方法的入参为,queryPage分页对象和lambdaQueryWrapper条件查询
Ipage<Employee> ipage = emplopyeeDao.selectPage(queryPage , lambdaQueryWrapper);
//使用list集合来接收数据
List<StuInfo> list = ipage.getRecords();
//getTotal可以获取数据总数
Long total = ipage.getTotal();

4.delet

4.1 根据id删除&根据id批量删除

根据id删除

emplopyeeDao.deleteById(1);

根据id批量删除

List<Employee> ids = new List<>();
ids.add(1);
ids.add(2);
emplopyeeDao.deleteBatchIds(idList);

4.2 根据条件删除

Map<String , object> map = new Map<>();
map.put("id" , 2);
map.put("last_name" , "yang");
emplopyeeDao.deleteByMap(map);

5.QueryWrapper自定义条件查询

QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("last_name" , "yang");
queryWrapper.eq("gender" , 1);
Employee employee = new Employee();
List<Employee> list = emplopyeeDao.selectList(queryWrapper);

答应大家的详细解释

在mysql中 , 我们要对于数据进行分页 , 会怎么做呢?
好吧 , 我不知道你会不会回答我 . 我们会使用limit

SELECT * FROM employee LIMIT 0,5 ; 
//这个sql语句的作用是从查询第1页开始,每页5条信息

为什么会这样写呢 , 那是因为sql有一个页数处理的公式:(页码-1) * 每页的数据数量
如果我们要找第十页,每页10条呢?

SELECT * FROM employee LIMIT 90,10 ; 

而我们使用mybatis也是为了进行数据库操作,那么就能想得通
Page queryPage = new Page<>(page , limit);语句中的page和limit是什么了 page是当前页码(mybatis plus帮我们省略了繁琐的计算步骤) , limit则是每页的数据数量 .

条件构造器(EntityWrapper)

条件构造器的方法呢其实和之前提到的自定义查询差不多,里面会有一些操作符,我在这里列给大家:
Mybatis-plus的CURD操作详解_第2张图片

有问题或者我表述有错误的地方,欢迎大家指出! 我会愿意一直学习! 冲!

你可能感兴趣的:(Mybatis,mybatis,java,spring,mysql,数据库)