- 浏览: 695128 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss 中提供了EditorInf属性编辑器接口,一直被应用于ioc组件属性注入时用来处理和转换属性的值,本文着重介绍它在mvc中的应用。
1.属性编辑器接口
两个接口如下:
com.frameworkset.util.EditorInf -用于mvc RequestParam注解时,只会接收到一个String类型参数,然后通过接口方法进行相应处理和值转换
com.frameworkset.util.ArrayEditorInf-这个接口作为EditorInf的子类,只用于mvc RequestParam注解中并且接收String[]类型参数,然后通过接口方法进行相应处理和值转换
EditorInf 和ArrayEditorInf只提供了以下两个接口方法:
EditorInf 和ArrayEditorInf结合@RequestParam注解既可以直接应用于控制方法的参数,也可以应用于控制器参数为po对象时,对对象的属性值进行转换,这里以第一种情况为例进行说明(第二种情况类似)。
2.EditorInf 使用示例
定义一个具体的属性编辑,接收逗号分隔的参数,并将参数转换用逗号分割为一个List<String>并返回:
在控制方法参数中使用这个编辑器:
说明:
@RequestParam(editor="org.frameworkset.mvc.ListEditor") List<String> name
name参数对应表单中的元素<input type="text" name="name" value="aa,bb">,name参数前定义了注解@RequestParam(editor="org.frameworkset.mvc.ListEditor"),通过RequestParam的editor属性指定了上面定义的属性编辑器ListEditor,这样bboss mvc框架就会自动将表单中的name元素的值aa,bb转换成一个List对象,list中的第一个元素为aa,第二个元素为bb。
3.ArrayEditorInf 使用示例
定义一个ArrayEditorInf接口实现,接收一个name数组对象String[],并将这个数组转换为List<String[]>,数组的每个元素值是带逗号的字符串转换而成,例如{"aa,bb","cc,dd"}。
在控制方法参数中使用这个编辑器:
说明:
(@RequestParam(editor="org.frameworkset.mvc.ListStringArrayEditor") List<String[]> name
name参数对于前端表单中的两个name元素:
<input type="text" name="name" value="aa,bb">
<input type="text" name="name" value="cc,dd">
同样我们在name参数的前面定义了注解@RequestParam(editor="org.frameworkset.mvc.ListStringArrayEditor"),通过RequestParam的editor属性指定了上面定义的属性编辑器ListStringArrayEditor,这样表单提交时,name参数就会以数组的方式进行提交,并交给专门接收数组的ListStringArrayEditor编辑器进行转换并生成List<String[]> 类型的值返回,List<String[]>中会包含两个元素,第一个元素是aa,bb转换成的String[]{aa,bb},第二个元素是cc,dd转换生成的String[]{cc,dd}。
4.举个简单的案例
持久层使用mvc控制方法结合EditorInf属性编辑器转换得到的List<String>数据来作为动态sql语句中的in操作条件的示例代码:
PO对象BillCondition ,里面包含了三个List<String> 类型变量bukrs、prctr、belnr,他们分别和前端表单元素对应:
<input type="text" name="bukrs" value="aa,bb"/>
<input type="text" name="prctr" value="cc,dd"/>
<input type="text" name="belnr" value="ee,ff"/>
表单提交后,经过mvc框架的Editor插件转换为List<String> 类型的数据,并分别设置到PO对象BillCondition 的这三个属性中。
注意:@RequestParam(editor="org.frameworkset.mvc.ListEditor")
中的editor对于每个属性只有一个实例,而不是每次请求都会创建一个实例,以便提升系统性能。
使用list<String>进行IN查询的sql语句:
特别说明一下sql语句中的这段代码:
#if($bukrs && $bukrs.size() > 0)
and BUKRS in (
#foreach($group in $bukrs)
#if($velocityCount == 0)
#[bukrs[$velocityCount]]
#else
,#[bukrs[$velocityCount]]
#end
#end
首先通过if语句判断bukrs 存在并且里面有元素(size>0),如果条件成立则拼接in条件,采用foreach语句来循环设置每个元素到in条件#[bukrs[$velocityCount]] ,其中velocityCount是循环变量,如果不是第一个在元素前面添加逗号,这样bboss持久层框架在执行的时候会将这些变量元素转换为预编译sql来执行。
最后看看整个代码流程:表单提交->控制方法参数绑定->控制方法调用ConfigSQLExecutor来执行这sql语句
5.总结
综上所述,当bboss mvc提供的默认参数绑定机制无法满足您的项目中实际参数绑定需要时,可以通过bboss中的两个EditorInf 和ArrayEditorInf结合@RequestParam注解来实现你想要的参数转换功能,非常方便快捷地提供自己的参数转换插件,从而实现各种复杂的参数绑定功能。
1.属性编辑器接口
两个接口如下:
com.frameworkset.util.EditorInf -用于mvc RequestParam注解时,只会接收到一个String类型参数,然后通过接口方法进行相应处理和值转换
com.frameworkset.util.ArrayEditorInf-这个接口作为EditorInf的子类,只用于mvc RequestParam注解中并且接收String[]类型参数,然后通过接口方法进行相应处理和值转换
EditorInf 和ArrayEditorInf只提供了以下两个接口方法:
public interface EditorInf<T> { T getValueFromObject(Object fromValue) ; T getValueFromString(String fromValue); }
EditorInf 和ArrayEditorInf结合@RequestParam注解既可以直接应用于控制方法的参数,也可以应用于控制器参数为po对象时,对对象的属性值进行转换,这里以第一种情况为例进行说明(第二种情况类似)。
2.EditorInf 使用示例
定义一个具体的属性编辑,接收逗号分隔的参数,并将参数转换用逗号分割为一个List<String>并返回:
public class ListEditor implements EditorInf<List<String>> { public List<String> getValueFromObject(Object fromValue) { if(fromValue == null || fromValue.equals("")) return null; return getValueFromString(String.valueOf( fromValue)); } public List<String> getValueFromString(String fromValue) { List<String> ret = new ArrayList<String>(); String[] datas = fromValue.split(","); for(String data :datas) { ret.add(data); } return ret; } }
在控制方法参数中使用这个编辑器:
public String sayHelloListEditor(@RequestParam(editor="org.frameworkset.mvc.ListEditor") List<String> name,ModelMap model) { if (name != null && name.size() > 0) model.addAttribute("serverHelloBean", name); else ; return "path:sayHello"; }
说明:
@RequestParam(editor="org.frameworkset.mvc.ListEditor") List<String> name
name参数对应表单中的元素<input type="text" name="name" value="aa,bb">,name参数前定义了注解@RequestParam(editor="org.frameworkset.mvc.ListEditor"),通过RequestParam的editor属性指定了上面定义的属性编辑器ListEditor,这样bboss mvc框架就会自动将表单中的name元素的值aa,bb转换成一个List对象,list中的第一个元素为aa,第二个元素为bb。
3.ArrayEditorInf 使用示例
定义一个ArrayEditorInf接口实现,接收一个name数组对象String[],并将这个数组转换为List<String[]>,数组的每个元素值是带逗号的字符串转换而成,例如{"aa,bb","cc,dd"}。
public class ListStringArrayEditor implements ArrayEditorInf<List<String[]>> { @Override public List<String[]> getValueFromObject(Object fromValue) { if(fromValue == null) return null; if(fromValue instanceof String[]) { String[] datas = (String[])fromValue; if(datas.length<=0) return null; List<String[]> ret = new ArrayList<String[]>(); for(String data :datas) { String[] tt = data.split(","); ret.add(tt); } return ret; } return null; } @Override public List<String[]> getValueFromString(String fromValue) { return null; } }
在控制方法参数中使用这个编辑器:
public String sayHelloEditors(@RequestParam(editor="org.frameworkset.mvc.ListStringArrayEditor") List<String[]> name,ModelMap model) { if(name != null && name.size() > 0) { StringBuffer ret = new StringBuffer(); for(String[] yourname:name) { if (yourname != null && yourname.length > 0) ret.append(StringUtil.arrayToDelimitedString(yourname, ",")).append("<br/>"); } model.addAttribute("serverHelloBean", ret.toString()); } return "path:sayHello"; }
说明:
(@RequestParam(editor="org.frameworkset.mvc.ListStringArrayEditor") List<String[]> name
name参数对于前端表单中的两个name元素:
<input type="text" name="name" value="aa,bb">
<input type="text" name="name" value="cc,dd">
同样我们在name参数的前面定义了注解@RequestParam(editor="org.frameworkset.mvc.ListStringArrayEditor"),通过RequestParam的editor属性指定了上面定义的属性编辑器ListStringArrayEditor,这样表单提交时,name参数就会以数组的方式进行提交,并交给专门接收数组的ListStringArrayEditor编辑器进行转换并生成List<String[]> 类型的值返回,List<String[]>中会包含两个元素,第一个元素是aa,bb转换成的String[]{aa,bb},第二个元素是cc,dd转换生成的String[]{cc,dd}。
4.举个简单的案例
持久层使用mvc控制方法结合EditorInf属性编辑器转换得到的List<String>数据来作为动态sql语句中的in操作条件的示例代码:
PO对象BillCondition ,里面包含了三个List<String> 类型变量bukrs、prctr、belnr,他们分别和前端表单元素对应:
<input type="text" name="bukrs" value="aa,bb"/>
<input type="text" name="prctr" value="cc,dd"/>
<input type="text" name="belnr" value="ee,ff"/>
表单提交后,经过mvc框架的Editor插件转换为List<String> 类型的数据,并分别设置到PO对象BillCondition 的这三个属性中。
注意:@RequestParam(editor="org.frameworkset.mvc.ListEditor")
中的editor对于每个属性只有一个实例,而不是每次请求都会创建一个实例,以便提升系统性能。
import java.util.Date; import java.util.List; import org.frameworkset.util.annotations.RequestParam; public class BillCondition { private String budat; //凭证中的记帐日期 @RequestParam(editor="org.frameworkset.mvc.ListEditor") private List<String> bukrs; //公司代码 @RequestParam(editor="org.frameworkset.mvc.ListEditor") private List<String> prctr; //利润中心 @RequestParam(editor="org.frameworkset.mvc.ListEditor") private List<String> belnr; //会计凭证号码 @RequestParam(dateformat="yyyy-MM-dd") private Date beginDate; @RequestParam(dateformat="yyyy-MM-dd") private Date endDate; private String sortKey; private boolean sortDESC; private Integer excelType; }
使用list<String>进行IN查询的sql语句:
<property name="queryBillList"> <![CDATA[ select * from TD_SFA_BILL_ZFIT0408 where 1=1 #if($bukrs && $bukrs.size() > 0) and BUKRS in ( #foreach($group in $bukrs) #if($velocityCount == 0) #[bukrs[$velocityCount]] #else ,#[bukrs[$velocityCount]] #end #end ) #end #if($prctr && $prctr.size() > 0) and PRCTR in ( #foreach($group in $prctr) #if($velocityCount == 0) #[prctr[$velocityCount]] #else ,#[prctr[$velocityCount]] #end #end ) #end #if($belnr && $belnr.size() > 0) and BELNR in ( #foreach($group in $belnr) #if($velocityCount == 0) #[belnr[$velocityCount]] #else ,#[belnr[$velocityCount]] #end #end ) #end #if($beginDate && !$beginDate.equals("")) and BUDAT >= #[beginDate] #end #if($endDate && !$endDate.equals("")) and BUDAT <= #[endDate] #end #if($sortKey && !$sortKey.equals("")) order by $sortKey #if($sortDESC ) desc #else asc #end #else order by GJAHR desc #end ]]> </property>
特别说明一下sql语句中的这段代码:
#if($bukrs && $bukrs.size() > 0)
and BUKRS in (
#foreach($group in $bukrs)
#if($velocityCount == 0)
#[bukrs[$velocityCount]]
#else
,#[bukrs[$velocityCount]]
#end
#end
首先通过if语句判断bukrs 存在并且里面有元素(size>0),如果条件成立则拼接in条件,采用foreach语句来循环设置每个元素到in条件#[bukrs[$velocityCount]] ,其中velocityCount是循环变量,如果不是第一个在元素前面添加逗号,这样bboss持久层框架在执行的时候会将这些变量元素转换为预编译sql来执行。
最后看看整个代码流程:表单提交->控制方法参数绑定->控制方法调用ConfigSQLExecutor来执行这sql语句
public String queryListLrzxBean( BillCondition appcondition ,ModelMap model) { List<BillBean> beans = null; try{ beans=configSQLExecutor.queryListBean(BillBean.class,"queryBillList", appcondition); model.addAttribute("beans",beans); }catch(SQLException e){ model.addAttribute("errormsg",e.getMessage()); } return "path:billlist"; }
5.总结
综上所述,当bboss mvc提供的默认参数绑定机制无法满足您的项目中实际参数绑定需要时,可以通过bboss中的两个EditorInf 和ArrayEditorInf结合@RequestParam注解来实现你想要的参数转换功能,非常方便快捷地提供自己的参数转换插件,从而实现各种复杂的参数绑定功能。
发表评论
-
bboss mvc控制器方法跳转地址设置方法介绍
2017-12-09 21:52 910bboss mvc控制器方法跳转地址设置方法介绍 1.直接指 ... -
bboss mvc json插件设置日期类型格式方法
2017-02-28 11:33 743bboss mvc json插件设置日期类型格式方法 一般的 ... -
bboss mvc控制器实现etag和last modify两种http缓存机制
2016-09-07 23:48 1265bboss mvc控制器实现etag和last modify两 ... -
bboss wordpdf构建部署介绍
2016-09-02 15:47 570bboss wordpdf构建部署介绍 下载 源码下载地址: ... -
解决tomcat stop报Illegal access: this web application instance has been stopped异常方法
2015-12-26 23:41 5948解决tomcat stop报Illegal access: t ... -
bboss mvc文件上传实例
2015-06-08 11:13 37本文着重介绍bboss mvc文件上传功能,切入正题 功能点 ... -
bboss mvc @RequestBody注解使用说明
2014-10-23 15:53 1048@RequestBody可以将客户端请求报文体通过数据类型转换 ... -
bboss安全认证过滤器认证后重定向到请求页面功能介绍
2014-10-12 10:55 1341本文介绍bboss安全认证 ... -
bboss mvc控制器方法响应报文注解ResponseBody使用说明
2014-09-20 22:39 1190bboss mvc控制器方法响应 ... -
bboss mvc启动事件监听器使用方法
2014-09-02 20:25 1157在实际应用,往往需要在mvc容器启动后执行相应的操作,bbos ... -
bboss session共享使用方法介绍
2014-05-10 16:12 6144bboss session共享使用方法 ... -
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍
2014-04-12 14:31 1654bboss将一个组件同时发布为webservice,hessi ... -
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法
2014-03-22 23:16 1088bboss发布apache cxf 2.7.6服务和定义客户端 ... -
bboss mvc接收和响应xml格式数据的方法
2013-12-28 19:14 1071本文介绍bboss mvc接收和响应xml格式数据的方法 1 ... -
bboss mvc忽略对bean属性进行参数绑定方法
2013-10-10 20:20 973bboss mvc忽略对bean属性进行参数绑定方法非常简单, ... -
bboss mvc参数绑定注解RequestParam使用说明
2013-08-17 00:02 4195bboss mvc参数绑定注解RequestParam使用说明 ... -
bboss mvc参数绑定注解MapKey使用说明
2013-08-10 23:27 1182bboss mvc参数绑定注解MapK ... -
bboss mvc获取request,session,response,pageContext对象方法
2013-07-12 13:19 1389本文介绍基于bboss mvc后台java程序如何获取requ ... -
bboss mvc ajax响应输出中文乱码解决方法
2013-07-10 23:08 1069对于bboss mvc ajax请求响应出现的中文乱码问题,怎 ... -
bboss libreoffice结合使用说明
2012-12-23 23:03 1281bboss libreoffice结合使用说明已经文件下载插件 ...
相关推荐
在“bboss mvc开发手册.doc”中,我们可能会找到关于如何使用BBoss MVCDemo进行开发的详细指南。 首先,让我们深入了解BBoss MVCDemo的核心特性: 1. **模型(Model)**:BBoss MVCDemo支持多种数据访问方式,如JDBC...
本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和动态配置应用。 首先,BBoss的IOC配置文件通常是一个XML文件,比如`bboss-ioc.xml`,在这个文件中我们可以声明并配置各种bean。当需要...
1. **配置bboss mvc**:首先,你需要在bboss mvc的配置中开启对JSONP的支持,这通常涉及到对控制器或拦截器的设置,使得服务器能够识别并处理JSONP请求。 2. **创建回调函数**:在客户端,你需要定义一个JavaScript...
bboss会话共享是一种分布式会话管理技术,它针对在集群环境下应用部署时如何解决会话数据丢失和单点登录问题提供了专门的解决方案。根据提供的文档内容,我们可以详细探讨bboss会话共享涉及的关键知识点。 首先,...
在Web应用程序中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前进行预处理,以及在响应离开服务器之前进行后处理。SYSAuthenticateFilter就是BBoss框架中专门用于安全认证的...
在不断的实践过程中,越来越多的好东西被吸纳到bboss这个大家庭中,使得bboss能够更好地应用于企业应用项目中,能够更好地解决开发过程中碰到的实际问题。基于bboss,可以快速地开发构建稳定、高效、健壮、可扩展的...
NULL 博文链接:https://yin-bp.iteye.com/blog/1131637
BBoss(全称为bbossgroups)是一个专为企业级J2EE应用设计的开源框架,它为Java开发者提供了一系列强大的工具和服务,以简化Web应用程序的开发过程。该框架旨在提高开发效率,降低维护成本,同时保持高度的灵活性和...
官方版本,亲测可用
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
本文将深入探讨在BBoss Persistent 1.0.2中如何高效地管理CLOB和BLOB数据。 首先,CLOB用于存储大量的文本数据,如长篇文章或XML文档,而BLOB则用于存储二进制数据,如图片、音频或视频文件。在传统的JDBC操作中,...
BBoss(Business Boss)是基于Elasticsearch的一个强大且灵活的开发框架,它简化了Elasticsearch在企业级应用中的集成和开发工作。 **一、Elasticsearch简介** Elasticsearch 以其分布式、RESTful 风格的 API 而...
集成bboss和Elasticsearch时,首先需要在项目中引入bboss的依赖,并配置Elasticsearch的相关连接信息,如集群名称、节点地址等。然后可以通过bboss提供的API进行索引创建、数据插入、查询、更新、删除等操作。 4. ...
这个框架使得开发人员能够在Java应用程序中更加高效地操作数据库,而无需编写大量的SQL语句。 ORM框架的核心目标是通过将数据库操作与业务逻辑解耦,提高代码的可读性、可维护性和可移植性。BBoss-DB-Elasticsearch...
综上所述,bboss-datatran 是一个强大且全面的数据处理工具,适用于企业级的大数据应用场景。其流批一体化的设计理念、丰富多样的数据处理功能以及良好的社区支持,使其在数据处理领域具有很高的实用价值。通过深入...