前言
在传统的Java后端开发过程中,书写最多的代码便是crud。什么是crud呢?简单来说就是,对数据进行增删改查,然后将结果返回给用户。在我们开发过程中使用的数据类型往往是结构化数据,例如MySql当中我们所建立的各种表以及表中的数据。
一个看似不是很合理的需求
- 更新商品的信息(包括id)
乍一看好像也没什么问题,sql语句也好写(mybatis),不就是
bash
update table set id = newId , name = xxx.name where id = xxx.id
实现过程
1、实体类
arduino
@Data
public class Commodity implements Serializable {
/**
* 商品ID
*/
private Integer id;
/**
* 商品名称
*/
private String name;
/**
* 卖家
*/
private String seller;
/**
* 库存
*/
private Integer inventory;
/**
* 价格
*/
private Float price;
private static final long serialVersionUID = 797972520302738355L;
}
2、mybatis
接口方法 xml文件
3、service层(此处省略)
懂得都懂,我这里也没有进行多余的操作,基本就是复制粘贴,对象注入去实现。
4、controller层
此处就会有问题
如果newId和数据库原来数据发生重复 就会出错,所以我们需要进行校验。 其实就是检验newId是否在数据库已经有的id列表当中。
实现思路
- 获取所有商品的id信息存放在idList中 select id from commodity
- 使用二分法判断idList是否包含newId
- 执行更新操作
此外我就展示controller的代码,因为其他代码的难度不大
思考
- id 为主键 ,为什么要修改id呢?所以我才会说这是一个不是很合理的需求。
- 使用mybatisplus当中的QueryWrapper封装的方法也是可以实现的。
- 当数据量非常大的情况下,使用二分法去进行查找,效率如何呢?