java实现通用查询_通用业务引用查询服务实现
publicclassBizReferenceServiceimplementsIBizReferenceService {privatestaticMap>ruleMaps;privatestaticfinalString PATTERN="#[\\w]+#";privatestaticfinalString CFG_FILE="bizReferenceRule.xml";
... .../*** 查询指定业务数据是否被其他业务表关联依赖.
*@parambizName 关联业务名称
*@parambizId 关联业务ID.
*@paramextParam 扩展条件
*@returntrue 被关联/false 未被关联.*/publicbooleanisBizReference(String bizName,String bizId,MapextParam)throwsServiceException {
Assert.notNull(bizName,"业务名称不能为空,bizName is NULL。");
Assert.notNull(bizId,"记录ID不能为空,bizId is NULL。");try{//逐个检查依赖项是否有数据关联.Listrules=getBizRelationRule(bizName);for(BizReferenceRule rule : rules){
StringBuilder sqlBuilder=newStringBuilder();
sqlBuilder.append("select count(*) from").append(rule.getRelTable()).append("where")
.append(rule.getRelField()).append("='").append(bizId).append("'");
String extConditon=rule.getExtCondition();if(StringUtil.isNotBlank(extConditon)){
initTenantParam(extParam);
sqlBuilder.append("and").append(getExtParamSql(extConditon,extParam));
}
logger.debug(sqlBuilder);intnCount=bizReferenceDao.getBizRelationCount(sqlBuilder.toString());if(nCount!=0)returntrue;
}returnfalse;
}catch(Exception ex){
logger.error("调用业务关联服务错误。"+bizName+",bizId:"+bizId+",extParam"+LogUtil.parserBean(extParam),ex);thrownewServiceException("调用业务关联服务错误。");
}
}/*** 组装扩展查询条件的sql
*@paramcondition
*@paramextParam
*@return*@throwsException*/privateString getExtParamSql(String condition,MapextParam)throwsException {
ListparamList=parseDyncParam(condition);for(String param : paramList){
String simpleParam=simpleName(param);if(!extParam.containsKey(simpleParam)){thrownewServiceException("动态参数值未设置! param:"+param+",extParam:"+LogUtil.parserBean(extParam));
}
condition=condition.replaceAll(param,"'"+String.valueOf(extParam.get(simpleParam))+"'");
}returncondition;
}/*** 解析扩展查询条件中的动态参数名.
*@paramcondition
*@return*@throwsException*/privateListparseDyncParam(String condition)throwsException {
PatternCompiler compiler=newPerl5Compiler();
PatternMatcher matcher=newPerl5Matcher();
MatchResult result=null;
PatternMatcherInput input=null;
ListparamList=newArrayList();
input=newPatternMatcherInput(condition);
Pattern pattern=compiler.compile(PATTERN,Perl5Compiler.CASE_INSENSITIVE_MASK);while(matcher.contains(input, pattern)){
result=matcher.getMatch();
input.setBeginOffset(result.length());
paramList.add(result.group(0));
}returnparamList;
}/*** 获取业务关联查询规则.*/privateListgetBizRelationRule(String bizName){
Assert.notNull(bizName,"业务名称不能为空,bizName is NULL。");//配置定义未加载到内存时,读取配置文件if(ruleMaps==null){
parseRuleConfig();if(ruleMaps==null)returnnull;
}returnruleMaps.get(bizName);
}/*** 读取业务关联规则配置文件*/@SuppressWarnings("unchecked")privatesynchronizedvoidparseRuleConfig(){if(ruleMaps!=null){return;
}//解析业务引用定义文件.
}/*** 读取Xml文档
*@return*/privateDocument getXmlDocument(){
InputStream is=null;try{
ClassLoader loader=Thread.currentThread().getContextClassLoader();
is=loader.getResourceAsStream(CFG_FILE);
SAXBuilder sb=newSAXBuilder();returnsb.build(newBufferedInputStream(is));
}catch(Exception ex) {
logger.error("读取配置文件错误. file:"+CFG_FILE, ex);returnnull;
}finally{try{if(is!=null){
is.close();
is=null;
}
}catch(Exception ex) {
logger.error(ex);
}
}
}
}
java实现通用查询_通用业务引用查询服务实现相关推荐
- SpringBoot - 实践阿里巴巴【Manager 层_通用业务处理层】
文章目录 规范 对比传统MVC 小栗子 V1.0 传统写法 V2.0 引入Manager层 源码 规范 对比传统MVC 说几个弊端 Service层代码臃肿 Service层易出现大事务,事务嵌套,易 ...
- java ldap 分页_具有从属引用的 LDAP 分页查询未正确处理
具有从属引用的 LDAP 分页查询未正确处理 09/14/2020 本文内容 本文提供了一些方法来避免使用从属引用的 LDAP 分页查询未正确处理的问题. 原始产品版本: Windows 8 原始 ...
- java 数据权限_通用数据权限的思考与设计
1.数据权限概述 1.1.什么是数据权限? 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:7877071 ...
- 使用java反射写一个通用的jdbc查询
在后端开发中,我们经常和数据库打交道.从最开始的使用jdbc进化到框架(mybatis)我们的开发效率提升了很多,但是不知道你没有思考过框架是如何在日常的开发中帮助我们的? 在我之前的博客中,讨论过 ...
- 使用内连接查询选修了Java程序基础_使用内连接 查询选修了“java程序基础”课程的学生学号、姓名、课程号、课程名和期末成绩_学小易找答案...
[简答题]BOD5/COD比值说明什么? [单选题]在制图中有一实物的某个尺寸为10,绘图时采用的比例为1:2.标注是应标注( ) [判断题]在表格布局中,有多少列就看最多的一个行中添加多少个控件,直 ...
- ## 大一java课程设计_航班查询系统(我是小白)
大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...
- java对象引用出错_“Java有值传递和引用传递”为什么错了?
前言 初学Java的时候,老师在课堂上说"Java有值传递和引用传递",但网上"Java只有值传递"的呼声很高. 本人在查找资料的过程中,在这两个说法之间反复横 ...
- c++中的引用和python中的引用_【总结】C++、C#、Java、Javascript、Python中引用的区别...
首先分两大阵营:C++中引用是一块阵营, C#.Java.Javascript.Python中引用是另一块阵营. 之所以这样分是因为同一阵营中引用使用方法基本一样. C++引用本质是个常量指针,而其他 ...
- java 查询快递_调用快递100查询快递信息
[java]代码库/** * 根据快递单号查询数据信息 * @param kuaidiNo * @return */ public static String getExpressInfo(Strin ...
最新文章
- 【转载】Asp.Net 全生命周期
- ipython换行操作_ipython 换行
- 「机器学习速成」过拟合的风险和泛化
- React开发(216):ant dedign 弹窗销毁后再打开,原来的值仍存在,如何销毁弹窗内容?
- JavaScript中的Function类型总结
- Android自定义view之ViewPager指示器——1
- hdu 5178 pairs (线性探查问题)
- 百度网盘破解限速(免费)
- EPSON机械手视觉操作手册
- 期权定价公式的推导(欧式)
- python编写自定义函数计算约登值(约登指数、Youden Index)、寻找最佳阈值(threshold、cutoff)、以及最佳阈值对应的ROC曲线中的坐标点
- 【那些年,我们一起追的女孩】第十四章
- 从零开始部署深信服EDR
- SQL 基础(五)数据查询实战演练一
- html js制作高级拼图,基于JavaScript实现十五拼图代码实例
- 解决jmeter压测试时java.net.SocketException: Socket closed异常
- java hashtable 数据结构_java数据结构——哈希表(HashTable)
- 原根算法C语言,算法导论-----数论-----元素的幂
- ElementUI日期转为“yyyy-MM-dd“格式
- 【数据可视化应用】绘制QQ图(附Python和R语言代码)
热门文章
- html ready 调用函数,Chrome和JQuery问题 - $(document).ready(function(){});在页面加载之前调用...
- 3d pdf reader android,3D PDF Reader
- mysql+8.0+新特性_MySQL 8.0备受瞩目的新特性大放送!
- git学习4--公钥的配置
- android 加载更多动画效果,Android实践之带加载效果的下拉刷新上拉加载更多
- php 属性名字访问,php – 如何使用连字符的名称访问此对象属性?
- 基于JAVA+SpringMVC+Mybatis+MYSQL的学生信息与选课系统
- 跟我一起写一个chrome扩展程序
- vmware 虚拟机设置 redhat 桥接模式
- 栈帧与操作数栈剖析及符号引用与直接引用的转换