当前位置: 首页 > news >正文

360建筑网撤销挂证黑龙江seo关键词优化工具

360建筑网撤销挂证,黑龙江seo关键词优化工具,dedecms怎么做网站,如何制作简易 网站mybatisplus 的常用CRUD方法 众所周知,mybatisplus提供了强大的代码生成能力,他默认生成的常用的CRUD方法(例如插入、更新、删除、查询等)的定义,能够帮助我们节省很多体力劳动。 他的BaseMapper中定义了这些常用的C…

mybatisplus 的常用CRUD方法

众所周知,mybatisplus提供了强大的代码生成能力,他默认生成的常用的CRUD方法(例如插入、更新、删除、查询等)的定义,能够帮助我们节省很多体力劳动。

他的BaseMapper中定义了这些常用的CRUD方法,我们在使用时,继承这个BaseMapper类就默认拥有了这些能力。

BaseMapper.png

如果我们的业务中,需要类似的通用Sql时,该如何实现呢?

是每个Mapper中都定义一遍类似的Sql吗?

显然这是最笨的一种方法。

此时我们可以借助mybatisplus这个成熟框架,来实现我们想要的通用Sql。

扩展常用CRUD方法

新增一个通用sql

比如有一个这样的需求,项目中所有表或某一些表,都要执行一个类似的查询,如`SelectByErp`,那么可以这样实现。(这是一个最简单的sql实现,使用时可以根据业务需求实现更为复杂的sql:比如多租户系统自动增加租户id参数、分库分表系统增加分库分表字段条件判断)

  1. 定义一个SelectByErp类,继承AbstractMethod类,并实现injectMappedStatement方法

  2. 定义sql方法名、sql模板、实现sql的拼接组装

/*** 新增一个通用sql*/
public class SelectByErp extends AbstractMethod {// 需要查询的列名private final String erpColumn = "erp";// sql方法名private final String method = "selectByErp";// sql模板private final String sqlTemplate = "SELECT %s FROM %s WHERE %s=#{%s} %s";@Overridepublic MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {// 获取需要查询的字段名及属性名TableFieldInfo erpFiled = getErpProperty(tableInfo);// 拼接组装sqlSqlSource sqlSource = new RawSqlSource(configuration, String.format(sqlTemplate,sqlSelectColumns(tableInfo, false),tableInfo.getTableName(), erpFiled.getColumn(), erpFiled.getProperty(),tableInfo.getLogicDeleteSql(true, false)), Object.class);return this.addSelectMappedStatementForTable(mapperClass, method, sqlSource, tableInfo);
}/*** 查询erp列信息*/private TableFieldInfo getErpProperty(TableInfo tableInfo) {List<TableFieldInfo> fieldList = tableInfo.getFieldList();TableFieldInfo erpField = fieldList.stream().filter(filed -> filed.getColumn().equals(erpColumn)).findFirst().get();return erpField;}

3.定义一个sql注入器GyhSqlInjector,添加SelectByErp对象

// 需注入到spring容器中
@Component
public class GyhSqlInjector extends DefaultSqlInjector {    @Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = super.getMethodList(mapperClass);// 增加 SelectByErp对象,程序启动后自动加载methodList.add(new SelectByErp());return methodList;}
}

4.定义一个基础MapperGyhBaseMapper,添加selectByErp方法

/*** 自定义的通用Mapper*/
public interface GyhBaseMapper<T> extends BaseMapper<T> {List<T> selectByErp(String erp);
}

5.应用中需要使用该SelectByErp方法的表,都继承GyhBaseMapper,那么这些表将都拥有了selectByErp这个查询方法,程序启动后会自动为这些表生成该sql。

public interface XXXMapper extends GyhBaseMapper<XXXTable> 

添加一个mybatisplus已有sql

1.mybatisplus 常用CRUD方法如最上图,这些方法已经默认会自动生成,但mybatisplus其实提供了更多的方法,如下图,只要我们在启动时添加进去,就可以使用了。

method.png

2.比如我想使用AlwaysUpdateSomeColumnById方法,该方法可以在更新时只更新我需要的字段,不进行全字段更新。添加步骤如下。

3.定义一个sql注入器 ,如GyhSqlInjector,添加AlwaysUpdateSomeColumnById对象

@Component
public class GyhSqlInjector extends DefaultSqlInjector {    @Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = super.getMethodList(mapperClass);// 添加 AlwaysUpdateSomeColumnById 对象methodList.add(new AlwaysUpdateSomeColumnById());return methodList;}
}

4.定义一个基础Mapper 如GyhBaseMapper,添加alwaysUpdateSomeColumnById方法

/*** 自定义的通用Mapper*/
public interface GyhBaseMapper<T> extends BaseMapper<T> {int alwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);
}

5.继承GyhBaseMapper的其他Mapper,将自动拥有alwaysUpdateSomeColumnById方法

/*** 自定义的通用Mapper*/
public interface GyhBaseMapper<T> extends BaseMapper<T> {int alwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);
}

6.继承GyhBaseMapper的其他Mapper,将自动拥有alwaysUpdateSomeColumnById方法

编辑一个mybatisplus已有sql

1.如果想编辑一个mybatisplus已有sql,比如分库分表系统,执行updateById操作时,虽然主键Id已确定,但目标表不确定,此时可能导致该sql在多张表上执行,造成资源浪费,并且分库分表字段不可修改,默认的updateById不能用,需要改造。以下以shardingsphere分库分表为例。

2.定义一个UpdateByIdWithSharding类,继承UpdateById

public class UpdateByIdWithSharding extends UpdateById {private String columnDot = "`";private YamlShardingRuleConfiguration yamlShardingRuleConfiguration;// 注入shardingsphere的分库分表配置信息public UpdateByIdWithSharding(YamlShardingRuleConfiguration yamlShardingRuleConfiguration) {this.yamlShardingRuleConfiguration = yamlShardingRuleConfiguration;}@Overridepublic MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {String tableName = tableInfo.getTableName();// shardingsphere 分库分表配置信息Map<String, YamlTableRuleConfiguration> tables = yamlShardingRuleConfiguration.getTables();// 判断当前表是否设置了分表字段if (tables.containsKey(tableName)) {YamlTableRuleConfiguration tableRuleConfiguration = tables.get(tableName);// 获取分表字段String shardingColumn = tableRuleConfiguration.getTableStrategy().getStandard().getShardingColumn();// 构建sqlboolean logicDelete = tableInfo.isLogicDelete();SqlMethod sqlMethod = SqlMethod.UPDATE_BY_ID;// 增加分表字段判断String shardingAdditional = getShardingColumnWhere(tableInfo, shardingColumn);// 是否判断逻辑删除字段final String additional = optlockVersion() + tableInfo.getLogicDeleteSql(true, false);shardingAdditional = shardingAdditional + additional;String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(),getSqlSet(logicDelete, tableInfo, shardingColumn),tableInfo.getKeyColumn(), ENTITY_DOT + tableInfo.getKeyProperty(),shardingAdditional);SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource);} else {return super.injectMappedStatement(mapperClass, modelClass, tableInfo);}}/*** where条件增加分表字段*/private String getShardingColumnWhere(TableInfo tableInfo, String shardingColumn) {StringBuilder shardingWhere = new StringBuilder();shardingWhere.append(" AND ").append(shardingColumn).append("=#{");shardingWhere.append(ENTITY_DOT);TableFieldInfo fieldInfo = tableInfo.getFieldList().stream().filter(f -> f.getColumn().replaceAll(columnDot, StringUtils.EMPTY).equals(shardingColumn)).findFirst().get();shardingWhere.append(fieldInfo.getEl());shardingWhere.append("}");return shardingWhere.toString();}/*** set模块去掉分表字段*/public String getSqlSet(boolean ignoreLogicDelFiled, TableInfo tableInfo, String shardingColumn) {List<TableFieldInfo> fieldList = tableInfo.getFieldList();// 去掉分表字段的set设置,即不修改分表字段String rmShardingColumnSet = fieldList.stream().filter(i -> ignoreLogicDelFiled ? !(tableInfo.isLogicDelete() && i.isLogicDelete()) : true).filter(i -> !i.getColumn().equals(shardingColumn)).map(i -> i.getSqlSet(ENTITY_DOT)).filter(Objects::nonNull).collect(joining(NEWLINE));return rmShardingColumnSet;}
}

3.定义一个sql注入器GyhSqlInjector,添加UpdateByIdWithSharding对象

// 需注入到spring容器中
@Component
public class GyhSqlInjector extends DefaultSqlInjector {    /*** shardingsphere 配置信息*/@Autowiredprivate YamlShardingRuleConfiguration yamlShardingRuleConfiguration;@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = super.getMethodList(mapperClass);// 添加 UpdateByIdWithSharding 对象,并注入分库分表信息methodList.add(new UpdateByIdWithSharding(yamlShardingRuleConfiguration));return methodList;}
}

4.定义一个基础MapperGyhBaseMapper,添加新的selectById方法

/*** 自定义的通用Mapper*/
public interface GyhBaseMapper<T> extends BaseMapper<T> {int updateById(@Param(Constants.ENTITY) T entity);
}

5.所有参与分表的表,在定义Mapper时继承GyhBaseMapper,那么在使用他的updateById方法时,将自动增加分库分表判断,准确命中目标表,减少其他分表查询的资源浪费。


以上是针对mybatisplus的一些简单改造,希望能为你提供一点点帮助~

作者:京东科技 郭艳红

来源:京东云开发者社区 转载请注明来源


文章转载自:
http://dinncobeggarly.ssfq.cn
http://dinncotransarctic.ssfq.cn
http://dinncotreponemiasis.ssfq.cn
http://dinncodisregard.ssfq.cn
http://dinncoconsiderate.ssfq.cn
http://dinncorailbus.ssfq.cn
http://dinnconymphomania.ssfq.cn
http://dinncoshiva.ssfq.cn
http://dinncoprofane.ssfq.cn
http://dinncoganggang.ssfq.cn
http://dinncogouache.ssfq.cn
http://dinncoheteronomy.ssfq.cn
http://dinncoputrescent.ssfq.cn
http://dinncocoptic.ssfq.cn
http://dinncoillusionist.ssfq.cn
http://dinncoaerocamera.ssfq.cn
http://dinncoabloom.ssfq.cn
http://dinncoomdurman.ssfq.cn
http://dinncoprelim.ssfq.cn
http://dinnconympholepsy.ssfq.cn
http://dinncomsphe.ssfq.cn
http://dinncovamper.ssfq.cn
http://dinncodrunkard.ssfq.cn
http://dinncoworldward.ssfq.cn
http://dinncomicrocomputer.ssfq.cn
http://dinncohexaplarian.ssfq.cn
http://dinncosouthwestern.ssfq.cn
http://dinncomaryland.ssfq.cn
http://dinncocubbish.ssfq.cn
http://dinncodsrv.ssfq.cn
http://dinncospelk.ssfq.cn
http://dinncomorgen.ssfq.cn
http://dinncovictoriate.ssfq.cn
http://dinncoburier.ssfq.cn
http://dinncoultrafilter.ssfq.cn
http://dinncodifference.ssfq.cn
http://dinncohamiltonian.ssfq.cn
http://dinncoskellum.ssfq.cn
http://dinncoharvey.ssfq.cn
http://dinncoastatic.ssfq.cn
http://dinncoxxx.ssfq.cn
http://dinncoschistose.ssfq.cn
http://dinncoroblitz.ssfq.cn
http://dinncocomportable.ssfq.cn
http://dinncoepigyny.ssfq.cn
http://dinncothither.ssfq.cn
http://dinncoidiolect.ssfq.cn
http://dinncomultifoliate.ssfq.cn
http://dinncoexophagy.ssfq.cn
http://dinncoantiauxin.ssfq.cn
http://dinncometrical.ssfq.cn
http://dinncoforswear.ssfq.cn
http://dinnconephritic.ssfq.cn
http://dinncotruckdriver.ssfq.cn
http://dinncojude.ssfq.cn
http://dinncofrappe.ssfq.cn
http://dinncoloadability.ssfq.cn
http://dinncounpainful.ssfq.cn
http://dinncocasual.ssfq.cn
http://dinncodrainpipe.ssfq.cn
http://dinncomappery.ssfq.cn
http://dinncokeramics.ssfq.cn
http://dinncosixern.ssfq.cn
http://dinncomontan.ssfq.cn
http://dinncoglassman.ssfq.cn
http://dinncoconjugation.ssfq.cn
http://dinncogastroscopist.ssfq.cn
http://dinncokilnman.ssfq.cn
http://dinncomycelioid.ssfq.cn
http://dinncoachilles.ssfq.cn
http://dinncosensorium.ssfq.cn
http://dinncodespondence.ssfq.cn
http://dinncomalapert.ssfq.cn
http://dinnconihil.ssfq.cn
http://dinncorefutatory.ssfq.cn
http://dinncolollingite.ssfq.cn
http://dinncopilus.ssfq.cn
http://dinncoadsorbability.ssfq.cn
http://dinncoravioli.ssfq.cn
http://dinncoannulose.ssfq.cn
http://dinncospick.ssfq.cn
http://dinncolimby.ssfq.cn
http://dinncosupportably.ssfq.cn
http://dinncoinformercial.ssfq.cn
http://dinncoremorseless.ssfq.cn
http://dinncofiber.ssfq.cn
http://dinncovoila.ssfq.cn
http://dinncointernship.ssfq.cn
http://dinncocodon.ssfq.cn
http://dinncolinerboard.ssfq.cn
http://dinncomaidy.ssfq.cn
http://dinncoweathertight.ssfq.cn
http://dinncoozonide.ssfq.cn
http://dinncosemimythical.ssfq.cn
http://dinncoland.ssfq.cn
http://dinncoardeid.ssfq.cn
http://dinncotherewithal.ssfq.cn
http://dinncolopsidedness.ssfq.cn
http://dinncoscriptorium.ssfq.cn
http://dinncogypsyhood.ssfq.cn
http://www.dinnco.com/news/143222.html

相关文章:

  • 深圳网站制作公司 讯百度推广信息流有用吗
  • 移动网站建设规定北京营销公司比较好的
  • 青岛外贸网站制作建站系统软件有哪些
  • 宁波自适应网站建设怎么做一个属于自己的网站
  • 如乐网站seo创业
  • 怎么做网站的一个横向列表十大嵌入式培训机构
  • 如何查询网站后台地址推广网络营销案例
  • ps做的图片能做直接做网站吗手机流畅优化软件
  • 教育类网站素材seo赚钱暴利
  • 如何租用服务器做网站网站推广的渠道有哪些
  • 网站用字体百度2023免费下载
  • 芜湖网站建设公司网络营销费用预算
  • 电商网站开发语言上海做推广的引流公司
  • 专业企业网站建设定制女孩短期技能培训班
  • 做网站 怎么发布网上做广告宣传
  • 青岛中小企业建设网站有扶持资金吗地产渠道12种拓客方式
  • 重庆seo整站优化服务怎样搭建网站
  • wordpress火车头采集图片整站优化系统厂家
  • 银川网站建站公司网店推广是什么
  • 专门做尾单的那个网站叫啥公司网站建设需要多少钱
  • 网站设计网站建设网站制作军事新闻头条最新消息
  • 太原网站设计web免费网站
  • 深圳市公司网站建设网络营销推广公司网站
  • 百度site app网站添加到网站首页源文件中的代码是哪些?企业培训师资格证报考2022
  • 网站建设方案word怎样在百度打广告
  • 网页制作网站设计稿苏州seo快速优化
  • 秦皇岛做网站哪家好深圳优化公司义高粱seo
  • 教做蛋糕的网站seo文章优化技巧
  • 网站建设的大公司好网页制作图片
  • wordpress增加专题百度关键词优化方法