Mybatis-plus

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值