mybatis自动添加逻辑删除

2024-08-28 15:57
124
0

1、在mybatis中,为了方便筛选逻辑删除的,会在配置文件中默认添加以下配置信息(logic-delete-value及logic-not-delete-value):

mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台显示SQL语句
global-config:
db-config:
id-type: NONE # “智能模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTOINPUT 模式。
# id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库
# id-type: INPUT # 用户输入 ID,适合 OraclePostgreSQLKingbaseDB2H2 数据库
# id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,OraclePostgreSQLKingbaseDB2H2 数据库时,需要去除实体类上的 @KeySequence 注解
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

同时,在实体的字段中添加以下注解:

/**
* 是否删除
*/
@TableLogic
private Boolean deleted;

这样,在查询的时候,默认会在SQL语句中添加deleted=0的脚本。

 

2、如何控制是否传deleted=0的脚本,可以通过以下两种方法:

在mapper中通过注解来写SQL语句

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(@Param("id") int id);
}

 

在xml文件中来写SQL语句

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

 

以上两种方式的本质是一样的,都是自己构造完整的SQL语句

全部评论