MybatisPlus简单实现、注解说明、自动填充、日志配置

        最近在实际开发中使用了MybatisPlus,初次使用发现对于单表CURD的是真的好用,少些很多sql。不过逻辑复杂的sql还是自己写的。在这里做简单总结。

1. 依赖:

        这里就没有什么好说的了我们使用一个功能,首先肯定要引用依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
</dependency>

 2. 项目基础分层:

        按照常规,分为controller、service、mapper、entity。

        (1) controller层:和普通的spring项目没有区别

        (2) service层:

service接口继承 IService<T> 接口

public interface GlsServiceUnitService extends IService<GlsServiceUnit> {
    List<GlsServiceUnit> queryList(GlsServiceUnit glsServiceUnit);
}

serviceImpl继承ServiceImpl<M extends BaseMapper<T>, T>类

@Service
public class GlsServiceUnitServiceImpl extends ServiceImpl<GlsServiceUnitMapper, GlsServiceUnit> implements GlsServiceUnitService {

}

        (3) mapper层:

mapper层继承BaseMapper<T>接口

@Mapper
public interface GlsServiceUnitMapper extends BaseMapper<GlsServiceUnit> {
}

        (4) entity层:

entity层继承Model<T>类

@Data
@TableName("***")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "***")
public class GlsServiceUnit extends Model<GlsServiceUnit> {
    private static final long serialVersionUID = 1L;

    @TableId
    @ApiModelProperty(value = "ID")
    private Integer id;

    @TableField(value = "INSERTTIME", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "插入时间")
    private LocalDateTime insertTime;

    @TableField(exist = false)
    @ApiModelProperty(value = "IDList")
    private List<String> idList;
}

 3. 注解说明:

@TableName:类注解,实体类的表名

@TableField:字段注解,详情见下表

注解可选值注解说明
value字段名称(可以不填,默认根据属性的驼峰转换为下划线对应上数据库字段,比如这里的insertTime默认对应数据库字段为insert_time,而实际我的数据库字段是INSERTTIME,所以这里指定为INSERTTIME)
update

预处理 ,将字段set注入自定义内容。

例如:

@TableField(.. , update="%s+1")  %s 为字段
 SQL :update 表 set 字段=字段+1 where ...

@TableField(.. , update="now()") 

SQL :update 表 set 字段=now() where ...

condition

预处理 WHERE 条件

例如:

@TableField(condition = SqlCondition.LIKE) private String name;

SQL 为:select 表 where 字段LIKE CONCAT('%',值,'%')

el详看注释说明
exist是否为数据库表字段( 默认 true 存在,false 不存在 ),比如这里的idList配置为false,就被当成一个普通的类属性而非数据库中的字段
strategy字段验证 ( 默认 非 null 判断)
fill

字段填充标记 ( FieldFill, 配合自动填充使用 )
FieldFill有四种枚举:DEFAULT,    INSERT,    UPDATE,    INSERT_UPDATE;

DEFAULT:默认不处理

INSERT:插入时处理

UPDATE:修改时处理

INSERT_UPDATE:插入和修改时处理

 4. 自动填充:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler{
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("insertTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
    }
}

这里用了FieldFill,自定义一个MyMetaObjectHandler组件继承MetaObjectHandler并重写了insertFill方法,实现insertTime字段自动填充插入时间。踩坑,这里setFieldValByName方法里面填写的类里面的属性,本人在刚写的时候填了字段的值,估计这里底层又是使用反射实现的。

 5. 查询:

public List<GlsServiceUnit> queryList(GlsServiceUnit glsServiceUnit) {
        QueryWrapper<GlsServiceUnit> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(glsServiceUnit.getAreaId())) {
            queryWrapper.lambda().eq(GlsServiceUnit::getAreaId, glsServiceUnit.getAreaId());
        }
        if (glsServiceUnit.getServiceMode() != null) {
            queryWrapper.lambda().eq(GlsServiceUnit::getServiceMode, glsServiceUnit.getServiceMode());
        }
        List<GlsServiceUnit> glsServiceUnits = list(queryWrapper);
        return glsServiceUnits;
    }

查询QueryWrapper也是比较好用的,这里提供一个简单的案例

6. 查看sql日志配置:

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在yml文件加上改配置,就可以看到sql和执行结果了,查询语句会直接打印出查询到的数据,还是比较详细的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值