创建一个简单的MybatisPlus项目在上一篇博客:MybatisPlus入门程序

一、CRUD

1. select

1.1 查找全部用户

//查
@Test
public void select(){

//查询全部用户
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);

}

结果

1.2 通过id查找

@Test
public void select() {

//查 by id
User user = userMapper.selectById(1L);
System.out.println(user);

}

结果

2. insert

2.1 设置对象的所有属性(包括id的时候)

//增
@Test
public void insert(){

User user = new User(6L, "Windy", 12, "10213@qq.com");
int i = userMapper.insert(user);
if (i!=0){
System.out.println("添加成功");
User userWindy = userMapper.selectById(user.getId());
System.out.println("新用户名为:"+userWindy);
}else System.out.println("添加失败");
}

结果

2.2 只设置部分属性(不包含id)

@Test
public void insert() {

//User user = new User(6L, "Windy", 12, "10213@qq.com");
User user = new User();
user.setName("Windy");
user.setAge(12);
user.setEmail("10213@qq.com");
int i = userMapper.insert(user);

System.out.println(i);
System.out.println("新用户为:" + user);
}

结果

2.3 错误盘点

插入时没有自动配值,而是将0赋给id,再进行一次插入就报错

  org.springframework.dao.DuplicateKeyException

第一次

第二次

原因:实体类User中的 id 使用的是原始数据类型 long

解决:将 long 改为 包装类 Long

3. update

注意使用updateById,这样才能通过id修改

//改
@Test
public void update() {

User user = new User(6L, "Ridden", 65, "67542@qq.com");
int i = userMapper.updateById(user);
if (i != 0) {
System.out.println("修改成功");
User userRidden = userMapper.selectById(user.getId());
System.out.println("修改后用户为:" + userRidden);
} else System.out.println("修改失败");
}

结果

4. delete

//删
@Test
public void delete() {

int i = userMapper.deleteById(6L);
if (i != 0) {
System.out.println("删除成功");
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}else System.out.println("删除失败");
}

结果

二、拓展

1. select

1.1 批量查询

@Test
public void select() {

//查询 1,2,3号用户
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);

}

结果

1.2 条件查询

@Test
public void selectByMap(){
HashMap<String,Object> map=new HashMap<>();

//自定义查询
map.put("name","Tom");

List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);

}

结果

1.3 分页查询

在配置类 MybatisPlusConfig 加入分页插件

//分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}

测试

@Test
public void selectByPage(){
Page<User> page=new Page<>(1,5);
//current:当前页
//size:页面大小
userMapper.selectPage(page,null);

page.getRecords().forEach(System.out::println);
}

结果

2. delete

2.1 批量删除

@Test
public void delete() {

//批量删除
userMapper.deleteBatchIds(Arrays.asList(4L,5L,6L));

}

结果

2.2 map删除

@Test
public void deleteByMap() {
HashMap<String, Object> map = new HashMap<>();

map.put("name","Jack");

userMapper.deleteByMap(map);
}

结果

2.3 逻辑删除

  • 物理删除:从数据库中直接移除

  • 逻辑删除:在数据库中没有被移除,而是通过一个变量让其失效( delete=0 --> delete=1 )

    比如:管理员可以查看删除记录

数据库添加deleted

User
package com.zy.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

//对应数据库的主键(UUID,自增id,雪花算法,redis,zookeeper)
//@TableId(type = IdType.ID_WORKER) //全局唯一id
@TableId(type = IdType.AUTO) //主键自增,对应数据库字段一定要自增
//@TableId(type = IdType.INPUT) //手动输入
private Long id;
private String name;
private Integer age;
private String email; @TableLogic //逻辑删除
private Integer deleted; }

要点: @TableLogic

配置了添加逻辑删除插件

MybatisPlusConfig

//逻辑删除插件
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
配置文件配置逻辑删除
application.properties

 # 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value= 1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value= 0
测试
@Test
public void deleteLog(){
userMapper.deleteById(5L);
}

结果

再查询被删用户
@Test
public void select() {

User user = userMapper.selectById(5L);
System.out.println(user);

}

结果

MybatisPlus的CRUD及拓展的更多相关文章

  1. Mybatis插件之Mybatis-Plus的CRUD方法

    使用Mybatis-plus进行基本的CRUD(增查改删)操作. 实体类(User)代码: import com.baomidou.mybatisplus.annotation.IdType; imp ...

  2. 使用 Mybatis-plus 进行 crud 操作

    1 Mybatis-Plus简介 1.1 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化 ...

  3. 【mybatis-plus】CRUD必备良药,mybatis的好搭档

    做开发,免不了对数据进行增删改查,那么mybatis-plus我觉得很适合我这个java新手,简单好用. 官网在这 一.什么是mybatis-plus MyBatis-Plus(简称 MP),是一个M ...

  4. SpringBoot整合Mybatis-plus实现增删查改

    今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例. pom.xml <?xml version="1.0" encoding="UT ...

  5. 详细!Mybatis-plus常用API全套教程,我就不信你看完还不懂!

    前言 官网:Mybatis-plus官方文档 简化 MyBatis ! 创建数据库 数据库名为mybatis_plus 创建表 创建user表 DROP TABLE IF EXISTS user; C ...

  6. 一个简单的springboot+mybatis-plus+thymeleaf的学生管理系统

    一.登录功能 1.1登录所涉及的功能主要包括拦截器,过滤器,用户在未登录的时候,访问页面会阻止访问的,如图所示: 实现这个功能的主要代码如下所示 1 //拦截器 2 public class Logi ...

  7. 从架构师角度谈谈mybatis-plus可能存在的问题

    存在这么一个情况:对于缺营养的人来说,医生更倾向于建议他选择纯牛奶,而不是有机奶(因其有添加剂).然而,大部分人却更加倾向于选择有机奶, 因其口感不错,因此,对于选择纯牛奶还是有机奶,这是个博弈问题. ...

  8. SpringBoot | 3.3 整合MyBatis-Plus

    目录 前言 1. 什么是MyBatis-Plus 1.1 BaseMapper接口 1.2 IService接口 2. 整合MyBatis-Plus以及CRUD功能 2.1 导入场景依赖 2.2 CR ...

  9. 19.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos配置中心

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

随机推荐

  1. 热身训练4 Article

    Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...

  2. cadence 技巧

    pcb中如何选中完整的一条网络? 1 edit  properties  右边 find nets 2 cadence 选中不同的网络高亮 display--->assign color在opt ...

  3. 广域网(ppp协议、HDLC协议)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105028759 学习课程:<2019王道考研计算机网络> 学习目的 ...

  4. 设计AOV网拓扑排序的算法

    拓扑排序 对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一) 思想 从AOV网选择一个没有前驱的顶点并输出 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧 重复上述两步,直到全部顶点都被输出, ...

  5. 洛谷 P5785 [SDOI2012] 任务安排

    链接: P5785 弱化版:P2365 题意: 有 \(n\) 个任务待完成,每个任务有一个完成时间 \(t_i\) 和费用系数 \(f_i\),相邻的任务可以被分成一批.从零时刻开始这些任务会被机器 ...

  6. 21.6.29 test

    \(NOI\) 模拟赛 \(T1\) 正解是个题解难以理解的数论,结果是组合数相加.暴力分拿满了,尝试打了 \(20*20\) 的表,最后大概打出了个三角形的表,并且帮我找到了一些性质.\(45\)p ...

  7. 同人逼死官方系列!从 DDC 嗅探器到 sddc_sdk_lib 的数据解析

    从 DDC 嗅探器到 sddc_sdk_lib 的数据解析 之前的 DDC 协议介绍 主要讲了设备加入.退出以及维持设备状态,而 SDK框架 sddc_sdk_lib 解析 主要讲了 SDK 库的结构 ...

  8. VNC服务器的搭建(带图形化支持)

    环境:centos7.6最小化安装 图形化支持 如果希望安装简单的图形支持的话,仅包含gnome的最最最最基础的包的话可以使用以下命令 yum groups install "X Windo ...

  9. 二.什么是Promise

    二.什么是Promise 1.理解 2.promise 的状态改变 3.promise的基本流程 4.promise的基本使用 1.理解 抽象表达: Promise 是JS 中进行异步编程的新的解决方 ...

  10. Oracle Error while trying to retrieve text for error ORA-01804

    我在Linux上编译C++程序,有这个错误. 本机情况: Linux上Oracle的安装情况,服务器上有两个Client版本.我在Makefile中使用了高版本的动态库. 原因: 1.首先排查下 tn ...