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可 ...
随机推荐
- JavaScript将类数组转换为数组的三种方法
// 类数组转换为数组 const list = [] // 假定为类数组 const arr1 = Array.from(list); const arr2 = Array.prototype.sp ...
- C#.Net筑基-集合知识全解
01.集合基础知识 .Net 中提供了一系列的管理对象集合的类型,数组.可变列表.字典等.从类型安全上集合分为两类,泛型集合 和 非泛型集合,传统的非泛型集合存储为Object,需要类型转.而泛型集合 ...
- 在Winform程序中动态绘制系统名称,代替图片硬编码名称
在以前我做程序的时候,一般在登录窗口里面显示程序名称,登录窗口一般设置一张背景图片,由于程序的名称一般都是确定的,所以也不存在太大的问题,不过如果客户定制不同的系统的时候,需要使用Photoshop修 ...
- UE 5 NavMesh 烘培 逻辑流程
关于UE引擎层面的东西: 在向场景重拖入一个NavMeshBoundsVolume时(或者修改时). 会调用 void UNavigationSystemV1::PerformNavigation ...
- Jenkins构建UI自动化项目,指定本地执行,没弹起浏览显示
1. 原因分析 为什么执行web没有弹出浏览器,Jenkins日志显示正在执行中 jenkins是用windows installer 安装成 windows的服务了,那么启动windows后jenk ...
- 天翼云安装nexus3.37.1
有点操蛋,官网网络太慢了! 百度了不少网友的内容,综合如下 总体是个皮毛,但已经可以用于开发了! 一.下载和安装 https://download.sonatype.com/nexus/3/nexus ...
- HDFS的特点和目标,不适合场景
HDFS的特点和目标: HDFS设计优点: (一)高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖; (二)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可 ...
- Happus:给准备离职成为独立开发者的你 5 点建议
名字:Happus 开发者 / 团队:Regina Dan 平台:iOS, visionOS 请简要介绍下这款产品 Happus 是你追寻幸福健康关系.甚至提高婚姻生活品质的贴心助手.无论是关系维系. ...
- mysql:Windows修改MySQL数据库密码(修改或忘记密码)
今天练习远程访问数据库时,为了方便访问,就想着把数据库密码改为统一的,以后我们也会经常遇到MySQL需要修改密码的情况,比如密码太简单.忘记密码等等.在这里我就借鉴其他人的方法总结几种修改MySQL密 ...
- CGI,FastCGI和PHP-FPM之间的关系和区别
什么是CGI?早期的web server只可以处理简单的静态web文件,但是随着技术的发展出现动态语言如PHP,Python.PHP语言交给PHP解析器进行处理,但是处理之后如何和web server ...