nhmicro微服务框架开发技术说明

2024-03-29 09:32

本文主要是介绍nhmicro微服务框架开发技术说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


框架描述
封装统一的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) 



这篇关于nhmicro微服务框架开发技术说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858238

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1