1、填充创建时间和修改时间
// 1、自定义类实现 implements MetaObjectHandler 实现其中的方法
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(),
LocalDateTime.class);
this.strictInsertFill(metaObject, "upadteTime", () -> LocalDateTime.now(),
LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "upadteTime", () -> LocalDateTime.now(),
LocalDateTime.class);
}
}
// 2、this.strictInsertFill(metaObject,gmtCreate /* "DO中的字段,不是数据库中的"*/, () -> LocalDateTime.now(),LocalDateTime.class);
// 3、DO
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime upadteTime;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
2、数据库关键字段,和表中字段冲突时
@TableField("`desc`") // 字段上加上 `` 即可
private String desc;
3、分页
手动写 limit startRow,size
的时候,使用左连接查询返回的条数是包含子表的数据的,比如主表一条数据对应子表三条数据,返回来就是三行,这时候需要使用父子查询.
<!-- 一对多使用 collection -->
<!-- 一对一使用 association -->
<!-- roleName 额外条件根据名称查询 -->
<resultMap id="BaseResultMap" type="com.xxx.xxx.entity.UserDO">
<id property="userId" column="user_id" jdbcType="VARCHAR"/>
<collection property="xxxDOList"
ofType="com.xxx.xxx.entity.RoleDO"
column="{user_id=user_id,roleName=roleName}" select="getRoleList">
</collection>
</resultMap>
<!-- 角色映射集合-->
<resultMap id="RoleDOResultMap" type="com.xxx.xxx.entity.RoleDO">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="userId" column="user_id" jdbcType="VARCHAR"/>
<result property="roleName" column="role_name" jdbcType="VARCHAR"/>
</resultMap>
<!-- 子查询 -->
<select id="getRoleList" resultMap="RoleDOResultMap">
select
id,user_id,role_name
from
<include refid="role_table"/>
where role_name = #{roleName}
</select>
<!-- 分页查询 #{request.roleName} as roleName 将作为查询条件传到子查询中 -->
<!-- column={user_id=user_id,roleName=roleName} map形式 在子查询中可以直接引用 -->
<select id="pageSearch" resultMap="BaseResultMap">
select
<include refid="user_field"/>, #{request.roleName} as roleName
from
<include refid="user_table"/>
cc
ORDER BY
cc.gmt_create ${request.sort}
limit #{request.startRow}, #{request.limit}
</select>
4、LambdaQueryWrapper 查询 条件去除 空字符串
// 第一个为条件,当条件不满足的时候不会执行这部分的查询逻辑
// 相当于 xml中 <if test = "userName != '' and userName != null">
public User getUserByName(String userName){
// username 为空得时候将不会执行后续逻辑;
return this.lambdaQuery().eq(StrUtil.isNotBlank(userName),User::getUserName,userName).one();
}
// mybaitis-plus源代码
@Override
public Children eq(boolean condition, R column, Object val) {
return likeValue(condition, LIKE, column, val, SqlLike.DEFAULT);
}
5、引用获取定义在其他xml中的方法,sql片段等
namespace+id
比如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.mapper.AxxDAO">
<sql id="axxFields"></sql>
<select id = "pageSearch">...</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.mapper.BxxDAO">
<sql id="bxxtable"></sql>
<select id = "pageSearch">
select
<include refid="com.xxx.mapper.AxxDAO.axxFields"/>
form
<include refid="bxxtable"/>
where
<include refid="com.xxx.mapper.AxxDAO.pageSearch"/>
</select>
</mapper>