开发者社区> bboss> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

bboss 持久层sql语句中一维/多维数组类型变量、list变量、map变量、bean对象变量使用说明

简介: 本文介绍bboss 持久层sql语句中一维/多维数组类型变量、list变量、map变量、bean对象变量使用方法,该功能在bboss 3.5.2版本及后续版本提供。 很高兴地告诉大家,bboss模板sql中已经可以处理对象、数组、list、map类型的变量了,bboss 能够快速分析出这些变量,并将sql语句转换为预编译sql语句执行。
+关注继续查看
本文介绍bboss 持久层sql语句中一维/多维数组类型变量、list变量、map变量、bean对象变量使用方法,该功能在bboss 3.5.2版本及后续版本提供。

很高兴地告诉大家,bboss模板sql中已经可以处理对象、数组、list、map类型的变量了,bboss 能够快速分析出这些变量,并将sql语句转换为预编译sql语句执行。

先看一个处理数组的实例:
String[] FIELDNAMES = new String[]{"ss","testttt","sdds","insertOpreation","ss556"};
		String deleteAllsql = "delete from LISTBEAN where FIELDNAME in (#[FIELDNAMES[0]],#[FIELDNAMES[1]],#[FIELDNAMES[2]],#[FIELDNAMES[3]],#[FIELDNAMES[4]])";
		Map conditions = new HashMap();
		conditions.put("FIELDNAMES", FIELDNAMES);		
		SQLExecutor.deleteBean(deleteAllsql, conditions);


变量格式由以前的#[aaa]扩展为以下几种格式:
#[aaa] 简单的变量属性引用
#[aaa[0]] (一维数组中的第一个元素,或者list中的第一个元素,具体取决于aaa变量是一个数组还是list对象)
#[aaa[0][1]](二维数组中的第一维度的第二个个元素,或者list中的第一个元素的数第二个组元素或者list第第二个元素,具体取决于aaa变量是每一维度是数组还是list对象)

#[aaa[0][1]...](多维数组中的第一维度的第二个个元素的n维元素,或者list中的第一个元素的第二个数组元素或者list第二个元素的n维元素引用,具体取决于aaa变量是每一维度是数组还是list对象)
#[aaa[key]] 引用map对象aaa中key所对应的value数据,引用map元素的等价方法#[aaa->key]
#[aaa[key][0]] 引用map对象aaa中key所对应的value的第一个元素,取决于value的类型是数组还是list,等价引用方法#[aaa->key[0]]

#[aaa->bb] 如果aaa是一个bean对象,这个变量格式表示了对aaa对象的bb属性的引用,如果aaa是一个map对象,这个变量格式表示了对aaa对象的key为bb的元素值引用

以上就是全部的类型,每种类型可以任意组合
以上就是全部的类型,每种类型可以任意组合,例如:
#[aaa->bb[0]]
#[aaa[0]->bb[0]]
#[aaa[0]->bb[0]->cc[keyname]]
#[aaa[0]->bb->cc[keyname]]
等等

下面在看几个简单的实例:

1.foreach处理数组的实例

java方法
public List<CandidateGroup> getGroupInfoByNames(String groups) {
		try {
			String[] groupnames = groups.split(",");
			List<CandidateGroup> list = null;
			if (groupnames.length > 0) {
				Map<String, String[]> groups_ = new HashMap<String, String[]>();//定义包含变量的map对象,key为变量名称,value为变量值
				groups_.put("groups", groupnames);//将数组groupnames设置到map对象中,key为groups,我们在后面的foreach循环中会通过groups来引用groupnames中的每个数据
				list = executor.queryListBean(CandidateGroup.class,
						"selectGroupInfoByNames", groups_);//执行查询
			}
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

sql配置示例:
<property name="selectGroupInfoByNames">
		<![CDATA[
					select #foreach($filed in $groupfileds) 
				    #if($velocityCount == 0)
						$filed
					#else
						,$filed
					#end
				#end
		
		from td_sm_group g where g.group_name in (
			#foreach($group in $groups)
							#if($velocityCount == 0)
								#[groups[$velocityCount]]
							#else
								,#[groups[$velocityCount]]
							#end
						#end
						)		]]>
	</property>


需要注意的是,需要把resources/velocity.properties文件相关配置项按照以下配置配置:
directive.foreach.counter.name = velocityCount
directive.foreach.counter.initial.value = 0



说明:
directive.foreach.counter.name
用来定义foreach循环递增变量名称,通过velocity.properties文件中全局指定这个变量名称,默认为velocityCount,项目开发之初就要确定这个变量名称,后续不能更改。

directive.foreach.counter.initial.value
用来定义循环变量velocityCount(名称由directive.foreach.counter.name属性指定)的初始值,默认从1开始,项目开发之初应将其调整为0

2.bean类型变量属性引用处理实例
@Test
	public void beanVariableTest() throws SQLException
	{
		/**
		 * 删除数据,数据条件由数组FIELDNAMES,这里主要演示如果通过bean属性引用变量语法获取数据项
		 * 后台转换为预编译执行
		 */
		insertOpera();
		BeanVariable beanvariable = new BeanVariable();
		beanvariable.setBean(new Bean());
		String deleteAllsql = "delete from LISTBEAN where FIELDNAME in (#[bean->fss],#[bean->ftestttt],#[bean->fsdds]," +
				"#[bean->finsertOpreation],#[bean->fss556])";
		SQLExecutor.deleteBean(deleteAllsql, beanvariable);
	}


3.List类型变量元素引用处理实例
@Test
	public void listVariableTest() throws SQLException
	{
		/**
		 * 删除数据,数据条件由list 对象FIELDNAMES提供,这里主要演示如何通过list变量语法获取数据项
		 * 后台转换为预编译执行
		 */
		insertOpera();
		List<String> FIELDNAMES = new ArrayList<String>();
		FIELDNAMES.add("ss");
		FIELDNAMES.add("testttt");
		FIELDNAMES.add("sdds");
		FIELDNAMES.add("insertOpreation");
		FIELDNAMES.add("ss556");
		String deleteAllsql = "delete from LISTBEAN where FIELDNAME in (#[FIELDNAMES[0]],#[FIELDNAMES[1]],#[FIELDNAMES[2]],#[FIELDNAMES[3]],#[FIELDNAMES[4]])";
		Map<String,List<String> > conditions = new HashMap<String,List<String> >();
		conditions.put("FIELDNAMES", FIELDNAMES);		
		SQLExecutor.deleteBean(deleteAllsql, conditions);
		
	}



4.Map类型变量元素引用处理实例
@Test
	public void mapVariableTest() throws SQLException
	{
		/**
		 * 删除数据,数据条件由FIELDNAMES为名称索引的map对象中,这里主要演示如果通过map变量获取数据项
		 * 后台转换为预编译执行
		 */
		insertOpera();
		Map<String,String> datas = new HashMap<String,String>();
		datas.put("sskey", "ss");
		datas.put("testtttkey", "testttt");
		datas.put("sddskey", "sdds");
		datas.put("insertOpreationkey", "insertOpreation");
		datas.put("ss556key", "ss556");
		String deleteAllsql = "delete from LISTBEAN where FIELDNAME in " +
				"(#[FIELDNAMES[sskey]],#[FIELDNAMES[testtttkey]],#[FIELDNAMES[sddskey]],#[FIELDNAMES[insertOpreationkey]]," +
				"#[FIELDNAMES[ss556key]])";
		Map conditions = new HashMap();
		conditions.put("FIELDNAMES", datas);		
		SQLExecutor.deleteBean(deleteAllsql, conditions);
	}


最新版本源码可以到github中下载,下载地址如下:
https://github.com/bbossgroups/bbossgroups-3.5

源码构建方法请参考文章:
bboss 版本ant构建方法

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python+数据库:Python连接sqlserver数据库,执行原生sql语句,并输出查询结果
Python+数据库:Python连接sqlserver数据库,执行原生sql语句,并输出查询结果
119 0
mybatis 中xml文件写sql语句时大于、大于等于、小于、小于等于的写法
mybatis 中xml文件写sql语句时大于、大于等于、小于、小于等于的写法
327 0
Hive SQL语句的正确执行顺序
关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢?
344 0
MySQL 数据库SQL语句——高阶版本2
1、EXISTS 2、inner join、left join、right join 3、CREATE VIEW 视图 4、UNION 联集 6、交集值 7、无交集值 8、case
30 0
MyBatis 使用 SQL 语句构建器
MyBatis 使用 SQL 语句构建器
68 0
收藏夹吃灰系列(十一):插入更新sql语句 ON DUPLICATE KEY UPDATE 使用详解 | 超级详细,建议收藏!
在项目中,你可能遇到这么一种场景,由于业务需求,需要先根据某一字段值查询数据库中是否有记录,有则更新,没有则插入。 对于这种需求,我想先看看大家是怎么玩的,在想听到大家怎么实现该需求之前,我先给介绍一下,我前同事的实现逻辑,后续就是该代码被弃用,进而被优化。 基本就是如下进行逻辑并合先进行查询再进行新增或更新操作。
230 0
一条 SQL 语句引发的思考
一条 SQL 语句引发的思考
34 0
经典SQL语句大全之基本函数(二)
经典SQL语句大全之基本函数(二)
26 0
经典SQL语句大全之基本函数(一)
经典SQL语句大全之基本函数(一)
58 0
T-SQL查询:语句执行顺序
原文:T-SQL查询:语句执行顺序 读书笔记:《Microsoft SQL Server 2008技术内幕:T-SQL查询》   ===============  T-SQL查询的执行顺序 ===============      =============== T-SQL查询的示意图...
789 0
+关注
bboss
热衷开源,主要开源作品:开源框架bboss,bboss session,bboss 序列化等 bboss特色:http://yin-bp.iteye.com/blog/1080824
328
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载