创建一个简单的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. linux shell 基本语法之快速上手shell编程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  2. 升级 dubbo 小心 default.version

    上周遇到个关于升级dubbo 2.6 到2.7的兼容性问题,差点造成线上故障,这里记录下,也给大家提个醒. 问题回放 有一个接口的提供方(dubbo 2.6.6)这么配置接口的版本号 <dubb ...

  3. Docker+nginx搭建tomcat集群

    1.环境准备: a.宿主机CentOS7 b.连接工具FinalShell c.镜像nginx1.20.1,tomcat (镜像拉取:docker pull 镜像名称) 2.创建nginx文件夹,to ...

  4. C# StringBuilder和string

    StringBuilder和string 1.string是引用类型还是值类型 MSDN官方说string是引用类型: 引用类型:引用分配栈内存,引用类型本身的数据存储在堆中: 值类型:在函数中创建, ...

  5. docker 加入域名

    先运行docker镜像 # 进入 docker 容器 mynginx 是容器名 docker exec -i -t mynginx /bin/bash #安装vim apt-get install v ...

  6. 虚拟化与kvm

    cpu指令级别 传统中操作系统运行于R0中称之为特权级别,直接与硬件进行交互. 应用程序运行于r3级别称之为低权限,无法与硬件直接进行交互.也就是说程序是运行于用户态,系统运行于内核态中. 虚拟化要解 ...

  7. 某企业桌面虚拟化项目-Citrix虚拟桌面解决方案

    xxx桌面虚拟化项目Citrix解决方案 xxx桌面虚拟化项目 Citrix解决方案 1 项目背景 秉承"尊重个性.创造价值.贡献于社会"的企业理念和开拓创新的精神,xxx所制造. ...

  8. 基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验

    1:PWM脉冲宽度调制 STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定 ...

  9. k8s之mutating webhook + gin

    1.知识准备 1.Webhook 是一种用于接收准入请求并对其进行处理的 HTTP 回调机制 2.Webhook 接收来自apiserver的回调,对回调资源做一些校验.注入.修改元数据等工作 3.来 ...

  10. macos command 'clang' failed with exit status 1

    export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent