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可 ...
随机推荐
- 燕千云ITAM:解锁数字化时代下企业竞争新优势
数字化时代下,企业的IT资产管理(ITAM)尤为关键.企业通过在成长的每个阶段实施有效的IT资产管理策略,以确保资源的最优化利用和风险的有效控制,并在竞争激烈的市场环境中保持优势.然而实际实践中,企业 ...
- apollo数据库表查询方法-可以通过批量更新mysql数据库-比如批量更新IP地址等
select `Id`, `AppId`, `Name` from ApolloPortalDB.App; select `NamespaceId`, `Key`, `Value`, `Comment ...
- IDEA 报错:无效的源发行版 sourceCompatibility
IDEA 报错:无效的源发行版 sourceCompatibility 检查配置文件中的jdk版本的配置,//错误:sourceCompatibility = '18'//修改成正确的如下:sourc ...
- 制作tomcat镜像
本篇文章介绍用Dockerfile的方式构建Tomcat镜像,请保证安装了Docker环境. 首先创建/opt/tomcat目录,后续步骤都在该目录下进行操作. 准备好Jdk和Tomcat安装文件,放 ...
- 数据结构—包(Bag)
数据结构中的包,其实是对现实中的包的一种抽象. 想像一下现实中的包,比如书包,它能做什么?有哪些功能?首先它用来装东西,里面的东西可以随便放,没有规律,没有顺序,当然,可以放多个相同的东西.其次,东西 ...
- OpenWrt中的LuCi和Lua一些总结
Lua.LuCi Lua是一种小巧的脚本语言,和Python一样,Lua脚本的运行需要Lua解释器: UCI(Unified Configuration Interface)是OpenWrt实现所有系 ...
- 记录荒废了三年的四年.net开发的第一次面试
对象 身在成都小微企业,前两天面试深圳老牌金蝶公司.对我这个荒废了三年光影的人来说,怎一个跨度之大了得?作为人我生第一次面试的,整个面试过程,只能用诡异来形容这次感受.而结尾也是迷迷糊糊中草草收场. ...
- 重磅集结!CNCF/VMware/PingCAP/网易数帆/阿里云联合出品云原生生态大会
"云原生(Cloud Native)"这个词在2020年刷屏了.在企业积极进行数字化转型,全面提升效率的今天,云原生被认为是云计算的"下一个时代". 12月16 ...
- 人类高质量 Java 学习路线【一条龙版】
Java 学习路线一条龙版 by 鱼皮. 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮.现在网上的编程资料实在太多了,而且人人肯定都说自己的最好,那就导致大家又不知道怎么选了.大部分的博主推荐资源 ...
- jQuery 插件autocomplete 应用
项目中有时会用到自动补全查询,就像Google搜索框.淘宝商品搜索功能,输入汉字或字母,则以该汉字或字母开头的相关条目会显示出来供用户选择, autocomplete插件就是完成这样的功能. auto ...