【Mybatis-Plus】04 AR (Active Record)
AR模式,全称激活记录
具体操作更接近Hibernate一样的OOP操作方式影响数据库记录
比Hibernate操作更灵活更方便
上手:
首先User实体类需要继承Model类并泛型注入User类型
如果使用了Lombok,需要再添加调用super的哈希值方法和比较方法(因为@Data注解)
package cn.echo42.pojo; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import java.io.Serializable; /**
* @author DaiZhiZhou
* @file MP-Spring
* @create 2020-08-05 22:36
*/ @Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
@EqualsAndHashCode(callSuper = true)
public class User extends Model<User> implements Serializable { private static final long serialVersionUID = 8921929240003713006L; @TableId("user_id")
private Integer userId; // private Integer user_id; private String userName; // private String user_name; @TableField("user_name") private String userPassword; // private String user_password; @TableField("user_password") private Integer userStatus; // private Integer user_status; @TableField("user_status") private Integer userIsDel; // private Integer user_is_del; @TableField("user_is_del")
}
执行操作时,我们可以使用实体对象完成SQL操作:
@Test
public void arQuery() {
User user = new User();
user.setUserId(2); User selectById = user.selectById();
System.out.println(selectById);
}
操作结果:
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c7a164b] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/oa?serverTimezone=GMT]
DEBUG [main] - JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1a9c38eb] will not be managed by Spring
DEBUG [main] - ==> Preparing: SELECT user_id,user_name,user_password,user_status,user_is_del FROM sys_user WHERE user_id=?
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6c7a164b]
User(userId=2, userName=user01, userPassword=123456, userStatus=1, userIsDel=0)
我们通过IDEA的提示可以看到这些方法:
我们可以根据这些方法的描述就可以猜到大概用途了
- - - - - 添加操作 - - - - -
public boolean insert()
直接将当前实例进行SQL插入操作 public boolean insertOrUpdate()
该方法会先判断你的实例是否设置主键属性NULL,
然后再由这个结果执行插入或者更新 - - - - - 修改操作 - - - - -
public boolean updateById()
通过当前实例的ID进行更新操作 public boolean update(Wrapper<T> updateWrapper)
通过封装条件对象来执行修改操作 - - - - - 删除操作 - - - - -
public boolean deleteById(Serializable id)
通过注入一个序列化类型的id对象来进行删除,DELETE FROM xxx WHERE xx_id = ? public boolean deleteById()
通过当前实例的ID进行删除操作 public boolean delete(Wrapper<T> queryWrapper)
通过封装条件对象来执行删除操作,一般用于多重筛选条件的删除 - - - - - 查询操作 - - - - -
public List<T> selectAll()
通过该实例查询表的所有记录 public T selectById(Serializable id)
通过当前实例查询记录并返回此实例上 public List<T> selectList(Wrapper<T> queryWrapper)
通过给予的封转条件对象进行查询 public T selectOne(Wrapper<T> queryWrapper)
well...他们还提供了一个只查询一个的结果 public <E extends IPage<T>> E selectPage(E page, Wrapper<T> queryWrapper)
用于翻页的查询,懂的都懂,不赘述了 public Integer selectCount(Wrapper<T> queryWrapper)
用于查询总记录数的,上面的翻页肯定套用了这个方法
放出来调用肯定还有别的需要
如果上述的情况都满足不了实际的开发需求,它们还提供了原生Session供我们单独的自己写:
关于关联查询的需求的增加字段的解决方案:
在第一阶段的项目案例中,使用的关联查询的结果集装填方案有两种:
第一种:
使用Map处理,因为A关联B,A表B表都是独立的关系,关联查询的结果集双方都缺少双方的属性
数据封装不完整,使用Map容器摆脱对象的类型限制,应收尽收,但是传递给前端就很难调用
另外非对象处理也是困难不友好的
第二种:
使用继承的方式,A继承B,A就拥有了B的所有属性,关联的结果集对象封装,A就可以完成这个任务了
但是继承之后,其他属性就为NULL,A的耦合就很大,也不是很好的解决方案
Mybatis-Plus的解决方案:
@TableField注解的一个属性exist
@TableField(exist = false)
private String unknowFieldInHere;
该注解表示如果SQL查询的关联结果的字段中找不到该实体类属性,会忽略掉
还是调用AR的自身ID查询:
完全没问题:
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c5ae43b] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/oa?serverTimezone=GMT]
DEBUG [main] - JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@56aaaecd] will not be managed by Spring
DEBUG [main] - ==> Preparing: SELECT user_id,user_name,user_password,user_status,user_is_del FROM sys_user WHERE user_id=?
DEBUG [main] - ==> Parameters: 3(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c5ae43b]
User(userId=3, userName=user02, userPassword=123456, userStatus=1, userIsDel=0, unknowFieldInHere=null)
如果是插入SQL也没问题:
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c5ae43b] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - Creating new JDBC DriverManager Connection to [jdbc:mysql://localhost:3306/oa?serverTimezone=GMT]
DEBUG [main] - JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1a45193b] will not be managed by Spring
DEBUG [main] - ==> Preparing: INSERT INTO sys_user ( user_name, user_password, user_status, user_is_del ) VALUES ( ?, ?, ?, ? )
DEBUG [main] - ==> Parameters: 阿伟001(String), 133778(String), 1(Integer), 0(Integer)
DEBUG [main] - <== Updates: 1
【Mybatis-Plus】04 AR (Active Record)的更多相关文章
- 【MyBatis笔记】mapper文件的配置以及说明
<!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...
- 【mybatis笔记】 resultType与resultMap的区别
序言: 昨天做一个项目,看到很多刚开始用mybatis的同事对于resultType和resultMap的理解与使用含糊不清,这里我试图用最好理解的说法写一写,欢迎大家勘误. 两者异同: 相同点:re ...
- 【VBA编程】04.使用自定义数据类型
使用自定义数据类型存储输入数据,并通过弹出窗口展示 [代码区域] Type lianxiren ' name As String Sex As String End Type Sub aa() Dim ...
- 测试开发【Mock平台】04实战:前后端项目初始化与登录鉴权实现
[Mock平台]为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React 框架完成搭建一个测试工具平台,希望作为一个实战项目能为你的测试开发学习有帮助. 一.后端 ...
- 【遍历二叉树】04二叉树的层次遍历【Binary Tree Level Order Traversal】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的层次遍历的 ...
- 【mybatis xml】数据层框架应用--Mybatis 基于XML映射文件实现数据的CRUD
使用MyBatis框架进行持久层开发 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBa ...
- 【mybatis annotation】数据层框架应用--Mybatis(二) 基于注解实现数据的CRUD
使用MyBatis框架进行持久层开发 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBa ...
- 【Mybatis架构】Mapper映射文件中的#{}与${}
前言 还记得当初从北京回来的时候,跟着倪文杰师姐做JavaITOO的一卡通模块,我亲姐贾梦洁带着我一块做,期间,我遇到了一个特别奇葩的问题,就死我要实现Mybatis的模糊查询,根据当时亲姐教给我方法 ...
- 【Mybatis架构】 延迟加载
在上一篇博客中,我们提到过有关于Mybatis输出映射中resultMap能够实现延迟加载的事,然而真的是所有的resultMap都能实现延迟加载还是咋地啊?现在我们就来对那一句话做一下阐述和实例说明 ...
- 【Mybatis框架】查询缓存(二级缓存)
继上一篇博客,我们讲述了mybatis的一级缓存,接下来,我们来学习一下mybatis的二级缓存 博客链接地址: http://blog.csdn.NET/liweizhong193516/artic ...
随机推荐
- 国产大模型参加高考,同写2024年高考作文,及格分(通义千问、Kimi、智谱清言、Gemini Advanced、Claude-3-Sonnet、GPT-4o)
大家好,我是章北海 今天高考,上午的语文结束,市面上又要来一场大模型参考的文章了. 我也凑凑热闹,让通义千问.Kimi.智谱清言一起来写一下高考作文. 公平起见,不加任何其他prompt,直接把题目甩 ...
- C# .NET Framework EXCEL NPOI EOF in header
实例化时异常: EOF in header 错误代码: try { workBook = new HSSFWorkbook(file); } catch { try { workBook = new ...
- ELK收集主流应用日志
1.收集nginx日志 学习背景:access.log,error.log目前日志混杂在一个es索引下. 改进filebeat配置 https://www.elastic.co/guide/en/be ...
- JavaScript实现防抖节流函数
review 防抖函数 防抖函数一般是短时间内多次触发,但是只有最后一次触发结束后的delay秒内会去执行相对应的处理函数. 相当于一个赛道里面一次只能跑一辆赛车,如果此时已经有一辆赛车在跑道里面跑, ...
- jwt 加密和解密demo
jwt 加密和解密demo JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息.导入jar <dependency&g ...
- 简约博客V1.1版本上线 + 一套新主题
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客V1.1版本上线 + 一套新主题 日期:2017- ...
- Operational Property Graphs到底是个啥?
Operational Property Graphs,中文通常译为"操作属性图". 作为23ai中被官方highlight出的新特性之一,我们先看下官方的原文描述: Operat ...
- 02-HTML知识点
01 元素的介绍 02 元素的属性 03 元素的嵌套关系 04 HTML结构分析 4.1 文档声明[这个不叫元素] 4.2 html元素 4.3 head元素 主要用来写文档的配置信息 05 HTML ...
- Python图像暗水印添加
推荐使用库: blind-watermark pip install blind-watermark https://github.com/guofei9987/blind_watermark
- ClickHouse介绍(四)ClickHouse使用操作
ClickHouse使用操作 这章主要介绍在ClickHouse使用的各个操作的注意点.常规的统一语法不做详细介绍. 1. Join操作 在ClickHouse中,对连接操作定义了不同的精度,包含AL ...