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可 ...
随机推荐
- Mac 上切换 node 版本总结
Mac 上切换 node 版本总结 背景 在做项目的时候,往往会遇到老项目没有升级的问题,node环境版本比较低,自己电脑安装或者新项目安装了最新版本的 node 环境,那么既要支持老版本的使用也要支 ...
- 你不知道的 CSS 之包含块
你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别. 但是一说到 CSS ...
- glog_bash:在bash中优雅输出日志
介绍 官方仓库:https://github.com/GuoFlight/glog_bash .下载其中的glog_bash.sh即可. 这是专门用于bash脚本中的logger,名为glog_bas ...
- 实验5.OSPF配置实验
# 实验5.OSPF配置实验 配置ospf使全网联通 实验组 拓扑,路由器选择为AR2220,交换机为S5700 联通配置 给每台路由器的对应端口配置相应的ip,并启动ospf协议,可以看到此时5台设 ...
- MySQL日志(redo log、binlog)刷盘策略
通过上篇文章,我们知道MySQL是采用两段提交策略来保证事务的原子性的,redo log刷盘的时机是在事务提交的commit阶段采取刷盘的,在此之前,redo log都存在于redo log buff ...
- 国产自主架构!龙芯2K1000LA工业核心板正式发布!
国产自主架构!龙芯2K1000LA工业核心板正式发布! 原创 Tronlong创龙科技 Tronlong创龙科技 2024-06-13 07:50 广东 Tronlong创龙科技 ,赞18 (点击视频 ...
- [UG 二次开发 python] 导出BOM表(包含图片)
只导出最底层的零件,零件的属性已经设置好,零件的截图生成后,放在零件的同一个文件夹下 用到了 xlsxwriter # nx: threaded # 导出BOM表 __version__ = &quo ...
- Plugin 'org.springframework.boot:spring-boot-maven-plugin:'not found
前言 在配置spring-boot的maven时,软件报错:Plugin 'org.springframework.boot:spring-boot-maven-plugin:'not found 在 ...
- SpringBoot自定义全局异常返回页面
返回自定义异常界面,需要引入thymeleaf依赖(非必须,如果是简单的html界面则不用) <dependency> <groupId>org.springframework ...
- TIOBE 7月编程排行榜出炉!Python再次出圈
又到了周三,本周有过半了,大家好呀 ~~ 每月的TIOBE编程排行榜都是技术社区关注的焦点,作为编程语言流行度的晴雨表,它反映了行业趋势和 技术走向.2024年7月的榜单揭晓了一个重要变化:Pytho ...