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的更多相关文章

  1. SQL反模式学习笔记4 建立主键规范【需要ID】

    目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...

  2. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

  3. Mybatis中使用UpdateProvider注解实现根据主键批量更新

    Mapper中这样写: @UpdateProvider(type = SjjcSqlProvider.class, method = "updateTaskStatusByCBh" ...

  4. MyBatis在insert插入操作时返回主键ID的配置

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过Mapper.XML配置的方式来完成这个功能. 在 INSER ...

  5. 【JAVA - SSM】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...

  6. Mybatis 中获取添加的自增主键ID(针对mysql)

    分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...

  7. MyBatis + MySQL返回插入成功后的主键id

    这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的key值存入到redis中,id为自增i ...

  8. 【JavaEE】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: 先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段值,再 ...

  9. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  10. Mybatis:插入数据返回自增主键

    使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可 ...

随机推荐

  1. 如何去掉安装IDEA生成的鼠标右键

    IDEA去掉右键 在安装IDEA或其它Intellij软件时,因为整个安装流程都是英文的环境,有童鞋稍不注意,就会把Intellij系列软件自动生成鼠标右键给选上 但问题来了,Intellij系列软件 ...

  2. #PowerBi Superchange PowerBi 数据模型篇(1)

    在过去,业务人员通常不熟悉数据建模,因为数据建模往往是专业的IT人员的领域.但是,得益于POWERBI和POWER PIVOT FOR EXCEL ,这样的日子一去不复返了.那么,什么是数据模型呢? ...

  3. 【iOS】push控制器时隐藏tabbar,dismiss控制器时显示tabbar

    在push之前将控制器的属性hidesBottomBarWhenPushed设置为yes就好. //准备要把控制器vc给push出去了 UIViewController *vc = [[UIViewC ...

  4. 08-Python迭代器与生成器

    迭代器 什么是迭代器 迭代是Python最强大的功能之一,是访问序列中元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器 ...

  5. 10分钟掌握Python缓存

    全文速览 python的不同缓存组件的使用场景和使用样例 cachetools的使用 项目背景 代码检查项目,需要存储每一步检查的中间结果,最终把结果汇总并写入文件中 在中间结果的存储中 可以使用co ...

  6. IoTBrowser V2.0:引领物联网时代的全新浏览器

    强大的兼容性,无限的可能 IoTBrowser V2.0,基于Chromium内核,完美支持H5/css/js开发界面,让您的物联网应用拥有与主流浏览器同等的流畅体验.同时,它还支持CSS 3动画.C ...

  7. .NET项目中使用HtmlSanitizer防止XSS攻击

    .NET项目中使用HtmlSanitizer防止XSS攻击 前言 最近博客也是上线了留言板功能,但是没有做审核(太懒了),然后在留言的时候可以输入<script>alert('xss')& ...

  8. Redis 注册成windows 服务并开机自启动

    进入安装目录 输入命令redis-server --service-install redis.windows.conf   输入启动命令即可 redis-server --service-start ...

  9. debian12 安装ch343驱动

    前言 最近心血来潮,装了一台debian12玩,安装完毕arduino后发现没有ch343驱动,倒是在 ls /lib/modules/6.1.0-13-amd64/kernel/drivers/us ...

  10. Django集成的密码找回功能

    要实现忘记密码功能,您需要进行以下修改: 添加忘记密码链接到登录页面. 创建密码丢失修改页面. 创建密码修改页面. 编写相应的视图函数来处理密码丢失修改和密码修改逻辑. 编写发送验证信息到邮箱的逻辑. ...