springboot mybaits-plus Sql 注入器 自定義邏輯刪除
阿新 • • 發佈:2018-11-10
1 寫一個類繼續 AbstractLogicMethod
public class LogicDeleteByWrapper extends AbstractLogicMethod { @Override public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) { String sql; MySqlMethod sqlMethod = MySqlMethod.LOGIC_DELETE_BY_WRAPPER; sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(), sqlWhereEntityWrapper(tableInfo)); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource); } public String sqlLogicSet(){ String sql ="<trim prefix=\"SET\" suffixOverrides=\",\">\n" + "<if test=\"et.updateBy != null\">update_by=#{et.updateBy},</if>\n" + "<if test=\"et.updateTime != null\">update_time=#{et.updateTime},</if>\n" + "is_deleted = 1\n" + "</trim> "; return sql; } }
寫一個類繼承baseMapper
/**
* 邏輯刪除
* @param entity
* @param updateWrapper
* @return
*/
int logicDeleteByWrapper(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
寫一個列舉類
public enum MySqlMethod { /** * 根據引數邏輯刪除 */ LOGIC_DELETE_BY_WRAPPER("logicDeleteByWrapper", "根據ID 修改資料", "<script>\nUPDATE %s %s %s\n</script>"), /** * 根據id邏輯刪除 */ LOGIC_DELETE_BY_ID("logicDeleteById", "根據ID 修改資料", "<script>\nUPDATE %s %s WHERE %s=#{%s}\n</script>"); private final String method; private final String desc; private final String sql; MySqlMethod(String method, String desc, String sql) { this.method = method; this.desc = desc; this.sql = sql; } public String getMethod() { return method; } public String getDesc() { return desc; } public String getSql() { return sql; } }
最後一步就是注入到bean
public class MyLogicSqlInjector extends AbstractSqlInjector { @Override public List<AbstractMethod> getMethodList() { return Stream.of( new LogicDeleteByWrapper() ).collect(Collectors.toList()); } @Override public void injectSqlRunner(Configuration configuration) { new SqlRunnerInjector().inject(configuration); } }
@Configuration
@MapperScan("com.xxx.xxx.*.dao")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
@Bean
public ISqlInjector sqlInjector() {
return new MyLogicSqlInjector();
}
/**
* SQL執行效率外掛
*/
@Bean
@Profile({"dev","test"})// 設定 dev test 環境開啟
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
}