【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";
测试:
构建出的查询语句: