mybatis-plus系统化学习之更新-AR-主键-service
1.背景
本节要么很简单,要么不重要,知道就可以了.
2.更新
package com.ldp.demo01; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.ldp.entity.SysUser;
import com.ldp.mapper.SysUserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 10:27
* @description <p>
*
* </p>
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test06Update {
@Autowired
private SysUserMapper sysUserMapper; /**
* 根据 ID 修改(建议使用这个方式修改)
* 需求:
* 将id为20用户的年龄改为102
* <p>
* ==> Preparing: UPDATE sys_user SET age=? WHERE id=?
* ==> Parameters: 102(Integer), 20(Integer)
* <== Updates: 1
*/
@Test
public void test1() {
int rows = sysUserMapper.updateById(new SysUser().setId(20).setAge(102));
System.out.println("受影响行数:" + rows);
} /**
* 根据 whereEntity 条件,更新记录
* 需求:
* 将id为20并且年龄为102的 用户的年龄改为100
* <p>
* ==> Preparing: UPDATE sys_user SET age=? WHERE (id = ? AND age = ?)
* ==> Parameters: 100(Integer), 20(String), 102(Integer)
* <== Updates: 1
*/
@Test
public void test2() {
// 作为更新的条件
UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", "20").eq("age", 102); // 修改的字段
SysUser sysUser = new SysUser().setAge(100); int rows = sysUserMapper.update(sysUser, updateWrapper);
System.out.println("受影响行数:" + rows);
} /**
* 根据 whereEntity 条件,更新记录(简写)
* 需求:
* 将id为20并且年龄为100的 用户的年龄改为200
* <p>
* ==> Preparing: UPDATE sys_user SET age=? WHERE (id = ? AND age = ?)
* ==> Parameters: 200(Integer), 20(String), 100(Integer)
* <== Updates: 1
*/
@Test
public void test3() {
UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
// 作为更新的条件
updateWrapper.eq("id", "20").eq("age", 100)
// 修改的字段
.set("age", 200); int rows = sysUserMapper.update(null, updateWrapper);
System.out.println("受影响行数:" + rows);
}
}
3.主键
1.实体配置
@Data
@Accessors(chain = true)
//@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class) // oracle数据库使用序列生成主键
public class SysUser { @TableId(type = IdType.AUTO)
//@TableId(value = "ID", type = IdType.INPUT) // oracle数据库使用序列生成主键
private Integer id;
}
2.测试代码
package com.ldp.demo01; import com.ldp.entity.SysUser;
import com.ldp.mapper.SysUserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 12/07 12:23
* @description <p>
* 主键策略
* </p>
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test08Sequence {
@Autowired
private SysUserMapper sysUserMapper; /**
* mysql数据库自动生成id
* ==> Preparing: INSERT INTO sys_user ( age, name ) VALUES ( ?, ? )
* ==> Parameters: 18(Integer), 李东平(String)
* <== Updates: 1
*/
@Test
public void test01() {
SysUser sysUser = new SysUser().setName("李东平").setAge(18);
int rows = sysUserMapper.insert(sysUser);
System.out.println("受影响行数:" + rows);
System.out.println("主键id=" + sysUser.getId());
}
/**
* oracle数据库 一般使用序列生成(受环境影响这里不演示这是给出代码)
* 1.对象上加序列@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = Integer.class)
* 2.id上加id生成策略 @TableId(value = "ID", type = IdType.INPUT)
* ==> Preparing: INSERT INTO sys_user ( age, name ) VALUES ( ?, ? )
* ==> Parameters: 18(Integer), 李东平(String)
* <== Updates: 1
*/
@Test
public void test02() {
SysUser sysUser = new SysUser().setName("李东平2").setAge(19);
int rows = sysUserMapper.insert(sysUser);
System.out.println("受影响行数:" + rows);
System.out.println("主键id=" + sysUser.getId());
}
}
4.AR
实际生产中一般不这样使用
a.建表product

CREATE TABLE `product` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT '产品名称',
`price` double(10,2) DEFAULT NULL COMMENT '卖价',
`product_no` varchar(32) DEFAULT NULL COMMENT '产品编号',
`describe` varchar(255) DEFAULT NULL COMMENT '产品描述',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
b.建立实体对象

package com.ldp.entity; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.experimental.Accessors; import java.util.Date; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 12/07 11:57
* @description
*/
@Data
@Accessors(chain = true)
public class Product extends Model<Product> {
private Integer id;
@TableField(value = "`name`")
private String name;
private String productNo;
@TableField(value = "`describe`")
private String describe;
private Date createTime;
private Date updateTime;
}
c.建立mapper接口

package com.ldp.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ldp.entity.Product;
import org.apache.ibatis.annotations.Mapper; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 8:54
* @description
*/
@Mapper
public interface ProductMapper extends BaseMapper<Product> { }
d.使用

package com.ldp.demo01; import com.ldp.entity.Product;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 10:27
* @description <p>
* <p>
* 一般不使用这个方式
* </p>
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test07AR {
/**
* 增加
* ==> Preparing: INSERT INTO product ( name, product_no ) VALUES ( ?, ? )
* ==> Parameters: 苹果(String), P001(String)
* <== Updates: 1
*/
@Test
public void test01() {
Product product = new Product().setName("苹果").setProductNo("P001");
product.insert();
} /**
* 删除
* <p>
* ==> Preparing: DELETE FROM product WHERE id=?
* ==> Parameters: 1(Integer)
* <== Updates: 1
*/
@Test
public void test02() {
Product product = new Product().setId(1);
product.deleteById();
} /**
* 修改
* <p>
* ==> Preparing: UPDATE product SET name=? WHERE id=?
* ==> Parameters: 苹果-修改(String), 2(Integer)
* <== Updates: 1
*/
@Test
public void test03() {
Product product = new Product().setId(2).setName("苹果-修改");
product.updateById();
} /**
* 查询
* ==> Preparing: SELECT id,`name`,product_no,`describe`,create_time,update_time FROM product WHERE id=?
* ==> Parameters: 2(Integer)
*/
@Test
public void test04() {
Product product = new Product().setId(2);
Product selectProduct = product.selectById();
System.out.println("selectProduct=" + selectProduct);
}
}
5.service
a.建立ISysUserService接口
package com.ldp.service; import com.baomidou.mybatisplus.extension.service.IService;
import com.ldp.entity.SysUser; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 12/07 4:31
* @description
*/
public interface ISysUserService extends IService<SysUser> {
}
b.建立SysUserServiceImpl实现
package com.ldp.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ldp.entity.SysUser;
import com.ldp.mapper.SysUserMapper;
import com.ldp.service.ISysUserService;
import org.springframework.stereotype.Service; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 12/07 4:31
* @description
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
}
c.使用

package com.ldp.demo01; import com.ldp.entity.SysUser;
import com.ldp.service.ISysUserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 12/07 12:23
* @description <p>
* 配置:
* https://baomidou.com/config/
* </p>
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test10Service {
@Autowired
private ISysUserService sysUserService; /**
* 增加
* ==> Preparing: INSERT INTO sys_user ( name, we_chat ) VALUES ( ?, ? )
* ==> Parameters: 李东平4(String), 851298348(String)
* <== Updates: 1
*/
@Test
public void test01() {
SysUser sysUser = new SysUser().setName("李东平4").setWeChat("851298348");
boolean save = sysUserService.save(sysUser);
System.out.println("save:" + save);
System.out.println("主键id=" + sysUser.getId());
} /**
* 删除
* ==> Preparing: DELETE FROM sys_user WHERE id=?
* ==> Parameters: 27(Integer)
* <== Updates: 1
*/
@Test
public void test02() {
boolean remove = sysUserService.removeById(27);
System.out.println("remove:" + remove);
} /**
* 修改
* ==> Preparing: UPDATE sys_user SET name=? WHERE id=?
* ==> Parameters: 李东平-修改3(String), 26(Integer)
* <== Updates: 1
*/
@Test
public void test03() {
SysUser sysUser = new SysUser().setId(26).setName("李东平-修改3");
boolean update = sysUserService.updateById(sysUser);
System.out.println("update:" + update);
} /**
* 查询
* ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,we_chat,password,status,type,create_time,update_time FROM sys_user WHERE id=?
* ==> Parameters: 26(Integer)
*/
@Test
public void test04() {
SysUser user = sysUserService.getById(26);
System.out.println("user:" + user);
} }
mybatis-plus系统化学习教程:https://www.cnblogs.com/newAndHui/p/14141950.html
完美!
mybatis-plus系统化学习之更新-AR-主键-service的更多相关文章
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- mybatis框架(6)---mybatis插入数据后获取自增主键
mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...
- Mybatis中使用UpdateProvider注解实现根据主键批量更新
Mapper中这样写: @UpdateProvider(type = SjjcSqlProvider.class, method = "updateTaskStatusByCBh" ...
- MyBatis在insert插入操作时返回主键ID的配置
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过Mapper.XML配置的方式来完成这个功能. 在 INSER ...
- 【JAVA - SSM】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...
- Mybatis 中获取添加的自增主键ID(针对mysql)
分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...
- MyBatis + MySQL返回插入成功后的主键id
这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增i ...
- 【JavaEE】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...
- mybatis插入数据后返回自增主键ID详解
1.场景介绍: 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...
- Mybatis:插入数据返回自增主键
使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可 ...
随机推荐
- CountDownLatch demo演示裁判和选手赛跑
# CountDownLatch demo演示裁判和选手赛跑 package com.example.core.mydemo; import java.util.concurrent.CountDow ...
- Libgdx游戏开发(4)——显示中文文字
原文: Libgdx游戏开发(4)--显示中文文字-Stars-One的杂货小窝 本文代码示例采用kotlin代码进行讲解,且需要有libgdx入门基础 这里主要介绍关于在Libgdx显示文字的2种方 ...
- VMWare配置处理器个数和实际电脑CPU核心线程数关系
配置说明 处理器数量 :指CPU内核数量(例如:4C / 8C),并不是指CPU颗数. 每个处理的核心数量:指CPU中的线程(4C8T中的8T),并不是指核心(Core)数量. 示例配置 处理器数量 ...
- python 动态导入模块并结合反射,动态获取类、方法(反射太好用),动态执行方法
背景: 关键字驱动框架,不同的关键字方法分别定义在不同的类,真正执行关键字方法又在不同的类(简称A),这样就需要在执行前,要在文件A下import要使用的模块,如果有很多页面操作或很多模块时,就需要每 ...
- Python中使用MySQL模糊查询的方法
1.方法一:使用pymysql库的方法 当在Python中使用MySQL进行模糊查询时,我们通常会使用pymysql或mysql-connector-python这样的库来连接MySQL数据库并执行查 ...
- 你要的AI Agent工具都在这里
只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力.本篇,我们让AI Agent使用更多的工具,比如:外部搜索.分析CSV.文生图.执行代码等. 1. ...
- LaravelLumen 分组求和问题 where groupBy sum
在Laravel中使用分组求和,如果直接使用Laravel各数据库操作方法,应该会得出来如下代码式: DB::table('table_a') ->where('a','=',1) ->g ...
- 一次Java服务内存过高的分析过程
现象 年前,收到了短信报警,显示A服务的某台机器内存过高,超过80% 如上图所示,内存会阶段性增加.奇怪的是,十多台机器中只有这一台有这个问题 堆内内存分析 最先怀疑是内存泄漏的问题,所以首先使用jm ...
- Flask API 如何接入 i18n 实现国际化多语言
1. 介绍 上一篇文章分享了 Vue3 如何如何接入 i18n 实现国际化多语言,这里继续和大家分享 Flask 后端如何接入 i18n 实现国际化多语言. 用户请求 API 的多语言化其实有两种 ...
- 4. 系统I/O
系统 I/O 示例代码: #include <iostream> // 标准库头文件 // #include "myheader.h" // 自己写的头文件 void ...