mybatisplus
mapper类
@Mapper
public interface UserMapper extends BaseMapper<UserEntity>{
}
这个的意思是让usermapper继承mbq的basemapper,获取basemapper自带的通用数据库方法,同时让usermapper和UserEntity的实体类绑定basemapper的方法会操作这个实体类
实体类
@Data
@TableName("user") // 通过 @TableName 注解指定实体类对应的数据库表名为 "user"
public class UserEntity {
private Long id;
private String username;
private String password;
private String email;
}
让UserEntity和数据库的user表绑定,此时我们可以通过basemapper的方法操作user表的内容
当我们使用basemapper自带的方法的时候,mapper.java层和mapper.xml层已经帮我们写好,不需要我们再写了,我们想传参,传实体类,传wrapper条件都有对应的方法
在设置wrapper条件时,经常会用到lambda表达式,比如
return baseMapper.selectList(new LambdaQueryWrapper<UserEntity>()
.like(UserEntity::getName, userentity.getName())
.eq(UserEntity::getStatus, userentity.getStatus())
.like(UserEntity::getDuty, userentity.getDuty()));
以第一行为例:
UserEntity::getName 是一个 Java 8 的 Lambda 表达式,它指向了 UserEntity 实体类中的 getName 方法,用于获取 UserEntity 对象的名称属性,在 MyBatis Plus 中,根据这个 Lambda 表达式,框架会自动对应到数据库表中与 name 属性对应的字段(按照实体类与表字段的映射规则)。简单来说就是取user表中的name属性
userentity.getName() 则是获取一个名为 userentity 的 UserEntity 类型对象的名称属性值,这个值会作为 LIKE 条件中的具体参数。简单来说就是取传入的类对象中的name属性
由此可见,<> 中的 UserEntity 是指定了这个 LambdaQueryWrapper 所针对的实体类类型,它明确了整个查询条件构建以及后续与数据库交互操作都是围绕着与 UserEntity 实体类对应的数据库表来进行的。
所以上面部分代码翻译成sql语句就是:
SELECT *
FROM user
WHERE
-- LIKE条件对应,对name字段进行模糊查询,%表示匹配任意字符(前后模糊匹配)
name LIKE CONCAT('%', #{userentity.name}, '%')
AND
status = #{userentity.status}
AND
duty LIKE CONCAT('%', #{userentity.duty}, '%')
;