MybatisPlus的CRUD及拓展
创建一个简单的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及拓展的更多相关文章
- Mybatis插件之Mybatis-Plus的CRUD方法
使用Mybatis-plus进行基本的CRUD(增查改删)操作. 实体类(User)代码: import com.baomidou.mybatisplus.annotation.IdType; imp ...
- 使用 Mybatis-plus 进行 crud 操作
1 Mybatis-Plus简介 1.1 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化 ...
- 【mybatis-plus】CRUD必备良药,mybatis的好搭档
做开发,免不了对数据进行增删改查,那么mybatis-plus我觉得很适合我这个java新手,简单好用. 官网在这 一.什么是mybatis-plus MyBatis-Plus(简称 MP),是一个M ...
- SpringBoot整合Mybatis-plus实现增删查改
今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例. pom.xml <?xml version="1.0" encoding="UT ...
- 详细!Mybatis-plus常用API全套教程,我就不信你看完还不懂!
前言 官网:Mybatis-plus官方文档 简化 MyBatis ! 创建数据库 数据库名为mybatis_plus 创建表 创建user表 DROP TABLE IF EXISTS user; C ...
- 一个简单的springboot+mybatis-plus+thymeleaf的学生管理系统
一.登录功能 1.1登录所涉及的功能主要包括拦截器,过滤器,用户在未登录的时候,访问页面会阻止访问的,如图所示: 实现这个功能的主要代码如下所示 1 //拦截器 2 public class Logi ...
- 从架构师角度谈谈mybatis-plus可能存在的问题
存在这么一个情况:对于缺营养的人来说,医生更倾向于建议他选择纯牛奶,而不是有机奶(因其有添加剂).然而,大部分人却更加倾向于选择有机奶, 因其口感不错,因此,对于选择纯牛奶还是有机奶,这是个博弈问题. ...
- SpringBoot | 3.3 整合MyBatis-Plus
目录 前言 1. 什么是MyBatis-Plus 1.1 BaseMapper接口 1.2 IService接口 2. 整合MyBatis-Plus以及CRUD功能 2.1 导入场景依赖 2.2 CR ...
- 19.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos配置中心
SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...
随机推荐
- 攻防世界 web5.disabled_button
我觉得戴上手套按应该可以! 方法一: 打开网址,发现flag按钮无法点击,F12查看源代码,删除disabled=" ",flag就点击了. 方法二 POST请求, 先分析一下源代 ...
- 洛谷 P5785 [SDOI2012] 任务安排
链接: P5785 弱化版:P2365 题意: 有 \(n\) 个任务待完成,每个任务有一个完成时间 \(t_i\) 和费用系数 \(f_i\),相邻的任务可以被分成一批.从零时刻开始这些任务会被机器 ...
- 查找最小生成树:普里姆算法算法(Prim)算法
一.算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之 ...
- Ubuntu virtualenv 创建 python2 虚拟环境 激活 退出
首先默认安装了virtualenv 创建python2虚拟环境 your-name@node-name:~/virtual_env$ virtualenv -p /usr/bin/python2 py ...
- hdu 4288 Coder (线段树+离线)
题意: 刚开始有一个空集合.有三种操作: 1.往集合中加入一个集合中不存在的数 x 2.从集合中删除一个已经存在的数 x 3.计算集合的digest sum并输出. digest sum求 ...
- 百亿级小文件存储,JuiceFS 在自动驾驶行业的最佳实践
自动驾驶是最近几年的热门领域,专注于自动驾驶技术的创业公司.新造车企业.传统车厂都在这个领域投入了大量的资源,推动着 L4.L5 级别自动驾驶体验能尽早进入我们的日常生活. 自动驾驶技术实现的核心环节 ...
- 2017final英文语句格式简单检查
英文书写中,句首字母通常为大写,其余为小写,单词"I"除外,单词与单词之间用一个空格隔开,句中用","断句,句末用"."结束,", ...
- 【Mysql】表锁 行锁 记录锁 间隙锁
Mysql中的锁 基于锁的属性分类:共享锁.排他锁. 基于锁的状态分类:意向共享锁.意向排它锁 根据锁的粒度分类:全局锁.页锁.表级锁.行锁(记录锁.间隙锁.和临键锁),实际上的锁就这些,上面两种分类 ...
- scrapy获取当当网中数据
yield 1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代 2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yiel ...
- GIS应用|快速开发REST空间分析服务
随着计算机的快速发展,GIS已经在各大领域得到应用,和我们的生活息息相关, 但是基于GIS几大厂商搭建服务,都会有一定的门槛,尤其是需要server,成本高,难度大,这里介绍一种在线GIS云平台,帮你 ...