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

上海做网站优化公司荆州做网站的公司

上海做网站优化公司,荆州做网站的公司,龙岩市网站建设,网店铺装修设计拦截插入操作 场景描述#xff1a;插入当前数据时#xff0c;同时复制当前数据插入多行。比如平台权限的用户#xff0c;可以同时给其他国家级别用户直接插入数据 实现#xff1a; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; impor…拦截插入操作 场景描述插入当前数据时同时复制当前数据插入多行。比如平台权限的用户可以同时给其他国家级别用户直接插入数据 实现 import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Signature; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import javax.annotation.Resource; import java.lang.reflect.Constructor; import java.util.List; import java.util.Properties;/*** author xxx* version 1.0* description 超级管理员创建基础资料自动创建其他国家相应数据* create 2024/3/2/002 13:48*/ Slf4j Component Intercepts({Signature(type Executor.class, method update, args {MappedStatement.class, Object.class}) }) public class InsertionLinkageInterceptor implements Interceptor {Value(${product.country-id.tables})private String countryIdTables;Resourceprivate UserService userService;Overridepublic Object intercept(Invocation invocation) throws Throwable {// 只有超级管理员需要拦截if (!userService.isSuperAdmin()) {return invocation.proceed();}Object[] args invocation.getArgs();MappedStatement ms (MappedStatement) args[0];// 拦截插入操作if (ms.getSqlCommandType() SqlCommandType.INSERT) {Object parameter args[1];Class? aClass parameter.getClass();TableName annotation aClass.getAnnotation(TableName.class);String tableName annotation.value();// 此处业务逻辑判断 此处做了一个表格名动态配置可自行修改 //TODOif (!countryIdTables.contains(tableName)) {return invocation.proceed();}CountryBaseInfoDO parameterDO (CountryBaseInfoDO) args[1];parameterDO.setCountryId(userService.getUserCountryId());parameterDO.setCode(IdUtils.generateCode());Constructor? constructor aClass.getConstructor();CountryBaseInfoDO paramObject;ListLong countryList userService.getUserCountryIds();for (Long countryId : countryList) {paramObject (CountryBaseInfoDO) constructor.newInstance();BeanUtils.copyProperties(parameterDO, paramObject);paramObject.setCountryId(countryId);Executor executor (Executor) invocation.getTarget();executor.update(ms, paramObject);}}// 继续执行原始方法return invocation.proceed();}} 有些实体可能需要自行创建  拦截更新操作 更新数据时候可能不止更新当前表可能需要同时更新其他行数据 拦截查询 查询数据时候可能需要同时默认加上某个条件 实现 Slf4j Component Intercepts({Signature(type StatementHandler.class, method prepare, args {Connection.class, Integer.class})}) public class CommonQueryInterceptor implements Interceptor {private final static String FIELD_COUNTRY_ID country_id;Value(${product.country-id.tables})private String countryIdTables;Resourceprivate UserService userService;Overridepublic Object intercept(Invocation invocation) throws Throwable {// 超级管理员查看所有if (!userService.isSuperAdmin()) {return invocation.proceed();}RoutingStatementHandler handler (RoutingStatementHandler) invocation.getTarget();//获取StatementHandler构造器StatementHandler delegate (StatementHandler) ReflectUtil.getFieldValue(handler, delegate);BoundSql boundSql delegate.getBoundSql();String sql boundSql.getSql();Statement statement CCJSqlParserUtil.parse(sql);// 通过反射获取delegate父类BaseStatementHandler的mappedStatement属性MappedStatement mappedStatement (MappedStatement) ReflectUtil.getFieldValue(delegate, mappedStatement);SqlCommandType commandType mappedStatement.getSqlCommandType();if (SqlCommandType.SELECT.equals(commandType)) {Select select (Select) statement;PlainSelect selectBody (PlainSelect) select.getSelectBody();Table fromItem (Table) selectBody.getFromItem();String name fromItem.getName();// 不在配置的表中直接返回if (!countryIdTables.contains(name)) {return invocation.proceed();}appendCondition(selectBody);ReflectUtil.setFieldValue(boundSql, sql, statement.toString());// 超级管理员插入时候同步插入所有国家的数据} else if (SqlCommandType.UPDATE.equals(commandType)) {String extraCondition or id in( userService.getNeedUpdateIds() );sql sql extraCondition;ReflectUtil.setFieldValue(boundSql, sql, sql);}return invocation.proceed();}/*** 追加条件*/private void appendCondition(PlainSelect selectBody) {try {// 获取where条件String stringExpression;try {EqualsTo where (EqualsTo) selectBody.getWhere();stringExpression where.getStringExpression();} catch (Exception e) {stringExpression selectBody.getWhere().toString();}//如果字段搜索条件为空则搜索字段为空或指定数据StringBuilder sqlFilter new StringBuilder(128);if (!stringExpression.contains(FIELD_COUNTRY_ID)) {sqlFilter.append((country_id in ( ).append(userService.getNeedUpdateIds()).append()) );buildWhereClause(selectBody, sqlFilter.toString());}} catch (Exception e) {log.error(appendCondition error, e);//多表查询时由于不是最后一层获取不到Table继续获取子表 // SubSelect ss (SubSelect) selectBody.getFromItem(); // PlainSelect subSelect (PlainSelect) ss.getSelectBody(); // appendCondition(subSelect);}}private void buildWhereClause(PlainSelect select, String dataFilter) throws JSQLParserException {if (select.getWhere() null) {select.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter));} else {AndExpression and new AndExpression(CCJSqlParserUtil.parseCondExpression(dataFilter), select.getWhere());select.setWhere(and);}}}
http://www.hkea.cn/news/14306697/

相关文章:

  • 淘宝联盟链接的网站怎么做的网站建设的目标客户
  • 如何给网站做高质量外链常用网站建设软件
  • 烟台快速建站有哪些公司设计网站中企动力优
  • 自己做网站要学什么软件下载七牛云存储代替WordPress
  • 朝阳区手机网站建设服务网站和微网站
  • 上海seo网站优化_搜索引擎排名_优化型企业网站建设_锦鱼网络医院网站设计方案
  • 音乐中文网站模板盗版小说网站怎么做
  • 永州网站建设收费情况wordpress数据库连接错误
  • asp.net空网站广州番禺邮政编码
  • 重庆梁平网站建设哪家好织梦仿站建站网站建设实战
  • 青岛快速网站排名网络推广有哪些形式
  • 商城网站如何建设网址站
  • 阿里云网站如何建设厦门 网站设计
  • 网站飘窗建设合同安徽省工程建设工程信息网站
  • 龙岗网站建设代理商仿牌外贸网站制作
  • 常州个人网站设计网站做排名
  • 定制家具网站平台现在流行用什么语言做网站
  • 描述一下网站建设的基本流程图seo外链是什么意思
  • 网站app软件企事业网站建设
  • 自己编程怎么做网站教程企业局域网视频网站建设
  • 做网站郴州全屏网站设计
  • google建设网站赚钱网店美工素材
  • 会展网站的建设情况怎样编辑网页
  • 网站开发语音占比网站首页域名如何设置访问快
  • 山东建设和城乡建设厅注册中心网站韩国购物网站有哪些
  • 浙江新东阳建设集团有限公司网站dw怎样做网站切换
  • 零售客户电商网站delphi做网站开发
  • 中山好的做网站的公司心雨在线高端网站建设网页设计
  • 珠海营销型网站福田企业网站优化方案
  • 网站建设进度表 下载wordpress data