当前位置: 首页 > news >正文

【MyBatis-Plus笔记】MyBatis-Plus详解

目录

  • 一、MyBatis-Plus的基本操作
    • 1.1 MyBatis-Plus简单使用
  • 二、MyBatis-Plus 的复杂操作
    • 2.1 QueryWrapper
    • 2.2 UpdateWrapper
    • 2.3 LambdaQueryWrapper
    • 2.4 LambdaUpdateWrapper
  • 三、自定义SQL
    • 3.1 注解方式
    • 3.2 xml 方式
    • 3.3 使用 Wrapper 自定义 SQL

MyBatis-Plus 在 MyBatis 基础上只做增强不做改变
引入的依赖,配置文件和 MyBatis 的一样

一、MyBatis-Plus的基本操作

@Mapperpublic interface UserlnfoMapper extends BaseMapper<Userlnfo>

使用 MyBatis-Plus,先让 Mapper 继承 BaseMapper ,因为 UserlnfoMapper 操作的是 user_info 表,对应的实体类是 Userlnfo , 所以 BaseMapper 中的泛型为 Userlnfo --> BaseMapper< Userlnfo >

父类 BaseMapper 中包含各种增删改查方法,所以子类 UserlnfoMapper 中也具备了这些增删改查方法

1.1 MyBatis-Plus简单使用

@Data
public class UserInfo {@TableId(type = IdType.AUTO)      // 表示实体类id为自增的private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

增:
在这里插入图片描述
插入成功:
在这里插入图片描述

删:
在这里插入图片描述
在这里插入图片描述
改:
在这里插入图片描述
在这里插入图片描述

查:
在这里插入图片描述
查找结果:
在这里插入图片描述

批量查找:
在这里插入图片描述
查找结果:
在这里插入图片描述

@Data
public class UserInfo {@TableId(type = IdType.AUTO)     // 表示实体类的id为例自增的private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

如果属性名对应不上数据库字段名,可以使用@TableField指定字段行,使之对应:

@TableField("delete_flag") 
private Integer deleteflag;

表明对应不上使用@TableName

@Data
@TableName("user_info") 
public class UserInfoTableMapping {
}

如果主键不是 id , 使用@Tableld(type = IdType.AUTO) 进行指定:

@TableId(type = IdType.AUTO) private Integer customId;

在这里插入图片描述
虽然有注解兜底,但是在开发过程中尽量规范开发!

二、MyBatis-Plus 的复杂操作

条件构造器 Wrapper 用来构造复杂的数据库查询条件

QueryWrapper:用于构造查询条件
UpdateWrapper: 用于构造更新条件,可以在更新数据时指定条件.
LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表达式的查询、更新条件构造器

2.1 QueryWrapper

1.查询
数据库:在这里插入图片描述查询语句:

SELECT id,username,password,age FROM user_info WHERE age = 18 AND username "%min%";

构造:
在这里插入图片描述
构造出的查询语句:
在这里插入图片描述

如果只想查询 id,username,password:
在这里插入图片描述
查询结果:
在这里插入图片描述
2. 更新

UPDATE user_info SET delete_flag=? WHERE age < 20;

使用 QueryWrapper 进行更新:
在这里插入图片描述
在这里插入图片描述

QueryWrapper 表示构造查询条件,但并不表示只能在 select 中去用

3.删除

DELETE FROM user_info WHERE age = 18;

在这里插入图片描述
删除前:
在这里插入图片描述
删除后:
在这里插入图片描述
删除成功

2.2 UpdateWrapper

示例1:

UPDATE user_info SET delete_flag=? WHERE age < 20;

在这里插入图片描述
更新前:
在这里插入图片描述
更新后:
在这里插入图片描述
set 是 UpdateWrapper 独有的,select 是 QueryWrapper 独有的

lt : “less than” 的缩写,表示小于.
le : “less than or equal to” 的缩写,表示小于等于
ge : “greater than or equal to” 的缩写,表示大于等于.
gt : “greater than” 的缩写,表示大于.
eq : “equals” 的缩写,表示等于.
ne : “not equals” 的缩写,表示不等于.

示例2:

UPDATE user_info SET delete_flag=0, age=5 WHERE id IN (10,11,12);

在这里插入图片描述
示例3,可以自己写 SQL ,使用 setSql

UPDATE user_info SET age = age+10 WHERE id IN (10,11,12);

在这里插入图片描述

2.3 LambdaQueryWrapper

基于 Lambda 构造查询条件构造器
在这里插入图片描述
创建对象可以直接new LambdaQueryWrapper,也可以直接 .lambda
好处是不用把字段进行硬编码了,可以进行代码的检查了

2.4 LambdaUpdateWrapper

在这里插入图片描述

三、自定义SQL

其实就是 MyBatis 怎么写,MyBatis-Plus 还怎么写

3.1 注解方式

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {@Select("select * from user_info where id = #{id}")List<UserInfo> selectList(Integer id);
}

3.2 xml 方式

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {List<UserInfo> selectList2(Integer id);
}

xml:
在这里插入图片描述
测试:
在这里插入图片描述
查询结果:
在这里插入图片描述

3.3 使用 Wrapper 自定义 SQL

参数命名:
在自定义 SQL 时,传递 Wrapper 对象作为参数时,参数名必须为 ew
或者使用注解 @Param (Constants.WRAPPER) 明确指定参数为 Wrapper 对象.
使用 $ {ew.customSqlSegment} : 在 SQL 语句中,使用 $ {ew.customSqlSegment} 来引用 Wrapper 对象生成的 SQL 片段.

select id,username,password,age FROM user_info WHERE username = "admin";

在这里插入图片描述
测试:
在这里插入图片描述
构建出的查询语句:
在这里插入图片描述

http://www.dtcms.com/a/315127.html

相关文章:

  • JuiceFS on Windows: 首个 Beta 版的探索与优化之路
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 【笔记】ROS1|3 Turtlebot3汉堡Burger建SLAM地图并导航【旧文转载】
  • 数学 理论
  • 基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】
  • Fastapi文件上传那些事?
  • 浅谈 Python 中的 next() 函数 —— 迭代器的驱动引擎
  • MCP进阶:工业协议与AI智能体的融合革命
  • Neat Converter电子书格式转换工具,支持ePub、Azw3、Mobi、Doc、PDF、TXT相互转换,完全免费
  • 龙虎榜——20250804
  • numpy数组拼接 - np.concatenate
  • VPS云服务器Linux性能分析与瓶颈解决方案设计
  • java获取文件编码格式,然后读取此文件,适用于任何格式的文件。
  • 面试题:怎么理解3 次握手与 4 次挥手:TCP 连接的建立与终止
  • 【Unity3D】Shader圆形弧度裁剪
  • 思途Spring学习 0804
  • Unity 实现手机端和电脑项目在局域网内通信
  • 【推荐100个unity插件】Unity 的 Hot Reload 热重载实现,加快unity程序编译速度——FastScriptReload插件
  • MySQL InnoDB 表数据结构存储方式详解
  • pathspec ‘with_def_layout‘ did not match any file(s) known to git`
  • Vue 详情header组件
  • Go语言Context
  • ISO(感光度)的工作原理
  • 接口权限(@SaCheckPermission)
  • ebaz4205矿板以太网连接不稳定问题解决方案
  • SQL基础语法(四个分类、库和表的增删改)
  • 【笔记】ROS1|6 中间人攻击移动过程【旧文转载】
  • 私有化部署即时通讯,企业专属通讯系统BeeWorks
  • 计算机网络:网络号和网络位是不是同一个意思
  • 4.5 点云表达方式——图