文档章节

nhmicro框架开发技术说明

杰睿宁
 杰睿宁
发布于 2017/07/20 15:35
字数 1346
阅读 26
收藏 1
点赞 0
评论 0

框架描述 封装统一的dao层(micro-db),业务逻辑在groovy中实现。 groovy脚本放置在groovy路径下,启动时自动加载。修改时自动热部署提高调试效率。 通过复用MicroMvcTemplate和MicroServiceTemplate,降低代码量提高开发效率。 采用NhEsbServiceServlet作为controller的,调用MicroMvcTemplate子类groovy脚本。 采用springmvc作为controller的,调用MicroServiceTemplate子类groovy脚本。 Java调用groovy或groovy间调用,使用GroovyExecUtil.execGroovyRetObj(groovy文件名,方法名,…)

1, MicroMvcTemplate封装方法有 a,分页查询 getInfoList4Page b,插入新记录 createInfo c,更新记录updateInfo d,删除记录delInfo e,根据id查询记录getInfoById f,不分页查询记录getInfoListAll

2, MicroServiceTemplate封装方法有 a,分页查询getInfoList4PageService b,创建记录createInfoService c,更新记录updateInfoService e,删除记录delInfoService f,使用占位符拼装sql sqlTemplateService 还有其他重载方法可直接根据sql进行增删改查,分页操作。

3,通过MicroMvcTemplate和MicroServiceTemplate与数据库交互,输入输出map中的value都是string类型

4、不使用封装好模板,直接执行查询sql的方法是, List infoList=(MicroMetaDao.getInstance()).queryObjJoinByCondition(sql); 或调用?占位的sql public List<Map<String, Object>> queryObjJoinByCondition(String sql,Object[] paramArray)

直接写sql进行更新操作 int status=(MicroMetaDao.getInstance()).updateObjByCondition(sql) 或调用?占位的sql updateObjByCondition(sql,paramArray)

MicroMetaDao()底层是jdbctemplate,有特别复杂的操作时可调用getMicroJdbcTemplate() 获取MicroMetaDao底层jdbctemplate

5、根据物理uuid查一条记录的封装 (microdb2.0以后版本支持表的id字段和bizid字段为数字) 在service层可使用 public Map getInfoByIdService(Map requestParamMap,String tableName) public Map getInfoByIdService(String id,String tableName)

在dao层可使用queryObjJoinById Map retMap=(MicroMetaDao.getInstance()).queryObjJoinById(tableName, id);

6、根据业务bizid查一条记录的封装 在service层可使用 public Map getInfoByBizIdService(String bizId,String tableName,String bizCol)

在dao层可以使用 Map rowMap=(MicroMetaDao.getInstance()).queryObjJoinByBizId("cms_template_list", bizid值,bizid在表中的列名称);

7、使用groovy mvc和service模板时,传入的map参数和返回的结果map的value都是string类型的 比如requestParamMap.put("update_time",DateTimeUtil.getNowStrTime()); 日期字段,insert或update时,可以用"now()"小写的。如requestParamMap.put("update_time","now()");

8、groovy中获取springbean或全局变量 在groovy中调用获取springbean, MicroContextHolder.getContext().getBean("xxxx springbeanid"); 在groovy中获取配置的全局变量,MicroContextHolder.getContextMap().get("xxxx key"); MicroContextHolder需要在xml中配置,map中可以配置其他的全局变量 <bean class="com.minxin.micro.rule.engine.context.MicroContextHolder" lazy-init="false"> <property name="contextMap"> <map>

</map> </property> </bean>

9、关于事务配置 microdb内部使用jdbctemplate,也使用spring事务进行配置 如果controller层使用springmvc,建议在controller层配置事务 如果使用NhEsbServiceServlet作为controller层如下配置在WsGroovyCmdHandler中开启事务 <!--micro 声明式事物管理,配置事物管理advice--> <tx:advice id="txAdviceMicro" transaction-manager="txManager"> tx:attributes <tx:method name="execHandler" propagation="REQUIRED"/> </tx:attributes> </tx:advice>

<!--micro 配置事物管理advice作用范围与作用条件-->
<aop:config>
    <aop:pointcut id="serviceLayerTransactionMicro" expression="execution( * com.project.frame.handler.*..*(..))"/>
    <aop:advisor pointcut-ref="serviceLayerTransactionMicro" advice-ref="txAdviceMicro"/>
</aop:config>

或使用MicroServiceTemplateSupport中的execGroovyRetObjByDbTran方法。

groovy中遇到需要局部使用特殊事务控制时,使用显示编程事务实现。 TransactionTemplate transactionTemplate = (TransactionTemplate) MicroDbHolder.getDbSource("default_transaction"); transactionTemplate.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { xxxx }

});

10,支持like查询 将key从requestParamMap删除,拼装自定义where条件,调用service模板的方法 public Map getInfoList4PageService(Map requestParamMap,String tableName,Map pageMap,String cusWhere) 例如: Map requestParamMap=getRequestParamMap(httpRequest); String noticeNameValue=requestParamMap.get("dbcol_ext_notice_name"); requestParamMap.remove("dbcol_ext_notice_name"); String cusWhere=""; if(noticeNameValue!=null && !"".equals(noticeNameValue)){ cusWhere="meta_content->>'$.dbcol_ext_notice_name' like '%"+noticeNameValue+"%'"; } Map pageMap=new HashMap(); pageMap.put("page", page); pageMap.put("rows", rows); pageMap.put("sort", sort); pageMap.put("order", order); Map retMap=GroovyExecUtil.execGroovyRetObj("MicroServiceTemplate", "getInfoList4PageService",requestParamMap, tableName,pageMap,cusWhere);

11、如果使用了NhEsbServiceServlet作为controller层,groovy中返回自定义httpResponse时, 需要设置httpRequest.setAttribute("forwardFlag", "true");否则可能追加多余字段返回。 HttpServletResponse httpResponse = gContextParam.getContextMap().get("httpResponse"); httpResponse.getOutputStream().write(retStr.getBytes("UTF-8"));

httpRequest.setAttribute("forwardFlag", "true");

12、增改查时都可以输入部分自定义sql 查询时(分页,不分页) tableName可输入join连接字符串连接多个表 cusWhere可输入自定义的where条件sql串(可以和原功能叠加) cusSelect可输入自定义select字符串 public Map getInfoList4PageService(Map requestParamMap,String tableName,Map pageMap,String cusWhere,String cusSelect) public List getInfoListAllService(Map requestParamMap,String tableName,Map sortMap,String cusWhere,String cusSelect) 例如getInfoList4PageService(Map requestParamMap,"t_account a left join t_user u on a.user_code=u.user_code",Map pageMap,String cusWhere,"a.*,u.user_name")

插入时 cusCol可输入自定义的列字符串(可以和原功能叠加) cusValue可输入自定义value字符串(可以和原功能叠加) public Integer createInfoService(Map requestParamMap,String tableName,String cusCol,String cusValue) 例如插入时记录数据库时间createInfoService(requestParamMap, tableName,"create_time","now()")

更新时 cusCondition可输入自定义where条件sql串(可以和原功能叠加) cusSetStr可输入自定义set字符串(可以和原功能叠加) public Integer updateInfoService(Map requestParamMap,String tableName,String cusCondition,String cusSetStr) 例如更新时记录数据库时间updateInfoService(requestParamMap, tableName,cusCondition,"update_time=now()")

13,MicroServiceTemplate中添加sqlTemplateService方法,用于做sql替换 替换的语法是velocity 判断是否为null #if(${param.p1}) 判断是否为"" #if(${param.p1}!='') 判断不为null且不为"" #if($!{param.p1}!='') 例如以下的代码 Map paramMap=new HashMap(); paramMap.put("p1", "1"); paramMap.put("p2", "2"); paramMap.put("p3", "3"); paramMap.put("p4", "4"); paramMap.put("p5", "5"); String sql= "select * from aaa where 1=1"+ "#if(${param.p1})"+ " and c1='${param.p2}' "+ "#end"+ "#if(${param.p2})"+ " and c2= #sqlreplace(${param.p2}) "+ "#end"+ "#if(${param.p3})"+ " and c3 like '%${param.p3}%' "+ "#end" ;

List placeList=new ArrayList(); String retStr=sqlTemplateService(sql,paramMap,placeList); System.out.println(retStr); System.out.println(placeList);

返回如下的sql替换结果 select * from aaa where 1=1 and c1=1 true and c2=? true and c3 like '%3%' true [2]

14,MicroServiceTemplate中生成序列号 public Integer getSeqByMysql(String seqKey)

15,MicroServiceTemplate中直接根据查询sql分页 不必拼装count查询sql public Map getInfoList4PageServiceByMySql(String sql,Map pageMap)

© 著作权归作者所有

共有 人打赏支持
杰睿宁

杰睿宁

粉丝 4
博文 22
码字总数 15545
作品 7
东城
使用nhmicro提供的micro-datasource嵌入式的解决微服务架构中分布式事务问题

应用原理:使用micro-datasource数据源使事务与线程解耦,通过groupid在其他线程进行事务提交或回滚。多个系统需要统一提交时,通过activemq发送提交消息(含有groupid),各系统收到消息后进...

杰睿宁
2017/10/31
0
3
脚本化微服务开源框架--NHMicro

MVC 框架的缺点: 系统按照Controller、Service、Dao层次划分,虽然在建设初期技术结构清晰。但每个业务逻辑代码都分散到不同代码框,业务结构不直观,不利于后期业务重构。 业务代码与MVC技...

杰睿宁
2017/06/23
1K
5
NHMicro 1.1.7 发布,支持 MVC 各层代码热部署

NHMicro 1.1.7 已发布,该版本添加了 micro-mvc 模块。 micro-mvc框架,借助 nhmicro 框架和 groovy 技术使所有的 controller、servicebean、dao 和 sql 脚本都支持动态热部署和调试。 详见:...

杰睿宁
01/12
0
0
micro-mvc技术说明

micro-mvc框架,借助nhmicro框架和groovy技术使所有的controller、servicebean、dao和sql脚本都支持动态热部署和调试。 Controller层Controller层groovy中使用注解MicroUrlMapping设置url地址...

杰睿宁
01/12
0
0
NHMicro 添加互金产品与账户功能模板

NHMicro 新版发布,更新内容如下: NHMicro 添加 p2p 互联网金融理财功能模板,包括理财产品查询、账户管理等相关后台和页面。 添加面向互联网用户的定期理财产品列表页面和后台管理功能 点击...

杰睿宁
2017/07/26
733
1
NHMicro 添加贷款进件管理与合同模板管理功能

nhmicro添加进件管理功能 提交贷款进件、查看修改进件信息、上传附件、提交审批。 进件列表中点击添加,打开贷款进件申请录入页面 进件列表页面中可查看已录入进件记录 点击启动审批,提交至...

杰睿宁
2017/07/19
695
0
脚本化微服务开源框架 NHMicro 添加信审功能

nhmicro添加信审功能 营业部进件质检通过后,会推送到信审表中,并启动信审审批流程。 在信审列表页面中,显示审核中和审核结束的进件记录。 点击查看,可显示进件详情,对已经结束的审批可点...

杰睿宁
2017/07/20
257
0
nhmicro 版本更新,添加产品中心功能

基于nhmicro框架封装了产品中心功能:包括产品信息增删改查、阶梯利率设置、本金利息服务费算法实现、还款计划试算。 相关脚本已经上传github https://github.com/jeffreyning/nh-micro 相关...

杰睿宁
2017/07/17
533
2
共同编写 Smart 2.0 开发指南

1 工具 1.1 准备开发工具 描述开发 Smart 应用所需要的开发工具及其安装步骤,包括:IDE、JDK、Maven、Git 等。 有必要时可使用截图,但不要大量使用。 需突出开发工具的版本号,以免误导用户...

黄勇
2014/01/05
0
13
xautlx/s2jh4net

项目简介 集结最新主流时尚开源技术的面向互联网Web应用的整合前端门户站点、HTMl5移动站点及后端管理系统一体的的基础开发框架,提供一个J2EE相关主流开源技术架构整合及一些企业应用基础通...

xautlx
2015/03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流利阅读笔记28-20180717待学习

“我不干了!” 英国脱欧大臣递交辞呈 雪梨 2018-07-17 1.今日导读 7 月 6 日,英国政府高官齐聚英国首相的官方乡间别墅——契克斯庄园,讨论起草了一份关于英国政府脱欧立场的白皮书。可是没...

aibinxiao
22分钟前
2
0
OSChina 周二乱弹 —— 理解超算排名这个事,竟然超出了很多人的智商

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @-冰冰棒- :分享Ed Sheeran/Beyoncé的单曲《Perfect Duet (with Beyoncé)》 《Perfect Duet (with Beyoncé)》- Ed Sheeran/Beyoncé 手机...

小小编辑
33分钟前
23
3
Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
今天
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部