【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 ...
随机推荐
- shiro可以完成哪些工作?
shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等
- 『手撕Vue-CLI』完善提示信息
前言 经过『手撕Vue-CLI』自动安装依赖,已经实现了自动安装依赖的功能. 然而,虽然项目已复制并安装依赖,但其提示信息并不够友好,于是我试着去运行了一下vue create,发现其提示信息是这样的 ...
- Task - lmdeploy
基础作业: 使用 LMDeploy 以本地对话.网页Gradio.API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图
- kylin-3.1.1-bin-hadoop3搭建,构建cube报的错误,Cannot modify dfs.replication at runtime. It is not in list of params that are allowed to be modified at runtime
主要是每次构建cube时会去读取kylin安装目录下的conf/kylin_hive_conf.xml文件, 副本是无法在hive查询时修改的,注释掉这两项 这个其实还有一些参数的控制: 添加这俩个参 ...
- socket 地址复用 SO_REUSEADDR
背景 默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口(例如888),这时候,别的套接字就无法使用这个端口( 888 ) ref : https://blog.csdn.net/tenn ...
- win11添加开机自启动
方法1 win + R 打开运行,输入 shell:startup 会打开一个文件夹 将想要启动的程序快捷方式放进文件夹 在设置里面搜索"启动",可以看到开机启动项,确认已经打开. ...
- DAX 自动生成日期表-与订单表(业绩表)相同日期区间
日期表 = ADDCOLUMNS ( CALENDAR (MIN('业绩表'[日期]), MAX('业绩表'[日期])), //关键在于MIN函数和MAX函数的使用 "年度", Y ...
- 2个qubit的量子门
量子计算机就是基于单qubit门和双qubit门的,再多的量子操作都是基于这两种门.双qubit门比单qubit门难理解得多,不过也重要得多.它可以用来创建纠缠,没有纠缠,量子机就不可能有量子霸权. ...
- Java中字符串去除空格
1. str.trim(); 去掉首尾空格 2. str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " ...
- Spring的AOP快速实现通用日志打印
需求分析 针对VideoService接口实现日志打印 三个核心包 spring-aop:AOP核心功能,例如代理工厂 aspectjweaver:简单理解,支持切入点表达式 aspectjrt:简单 ...