从头认识Spring-1.16 SpEl对集合的操作(2)-查询集合以及投影元素集合

这一章节我们来讨论一下查询集合以及投影元素集合。

我们下面用一个例子说明上面的这两个部分。

1.domain

蛋糕类:(不变)

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21;

public class Cake {

	private String name = "";

	private double size = 0;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getSize() {
		return size;
	}

	public void setSize(double size) {
		this.size = size;
	}

}

厨师类:

在下面的厨师类里面我们增加了两个域和方法

一个是为了查询集合准备的cakes,放cake的对象集合

一个是为了投影元素准备的cakeNames,放cake的名称的集合

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21;

import java.util.ArrayList;
import java.util.Iterator;

public class Chief {
	private Cake cake = null;

	private ArrayList<Cake> cakes = null;

	private ArrayList<String> cakeNames = null;

	public ArrayList<String> getCakeNames() {
		return cakeNames;
	}

	public void setCakeNames(ArrayList<String> cakeNames) {
		this.cakeNames = cakeNames;
	}

	public ArrayList<Cake> getCakes() {
		return cakes;
	}

	public void setCakes(ArrayList<Cake> cakes) {
		this.cakes = cakes;
	}

	public void canMakeCakes() {
		for (Iterator<Cake> iterator = cakes.iterator(); iterator.hasNext();) {
			Cake cake = iterator.next();
			System.out.println(name + " can make " + cake.getName());
		}
	}

	public void nameOfMakeCakes() {
		for (Iterator<String> iterator = cakeNames.iterator(); iterator.hasNext();) {
			String name = iterator.next();
			System.out.println(this.name + " can make " + name);
		}
	}

	private String name = "";

	public Cake getCake() {
		return cake;
	}

	public String getName() {
		return name;
	}

	public Cake makeOneCake() {
		return cake;
	}

	public void setCake(Cake cake) {
		this.cake = cake;
	}

	public void setName(String name) {
		this.name = name;
	}

}

2.测试类

package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
		"/com/raylee/my_new_spring/my_new_spring/ch01/topic_1_21/ApplicationContext-test.xml" })
public class CakeTest {

	@Autowired
	private ApplicationContext applicationContext;

	@Test
	public void testChief() {
		Chief jack = (Chief) applicationContext.getBean("jack");
		jack.canMakeCakes();
		Chief mike = (Chief) applicationContext.getBean("mike");
		mike.nameOfMakeCakes();
		Chief rose = (Chief) applicationContext.getBean("rose");
		System.out.println("rose can make " + rose.getCake().getName());
	}
}

3.配置文件(重点)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
		http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

	<util:list id="cakes">
		<bean class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Cake"
			p:name="blueberry cheese cake" p:size="5" scope="prototype" />

		<bean class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Cake"
			p:name="chocolate cheese cake" p:size="6" scope="prototype" />

		<bean class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Cake"
			p:name="banana oatmel mousse cake" p:size="7" scope="prototype" />

		<bean class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Cake"
			p:name="vanilla eclair" p:size="8" scope="prototype" />

		<bean class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Cake"
			p:name="ligueur perfumed triplet cake" p:size="5.5" scope="prototype" />
	</util:list>

	<bean id="jack"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Chief"
		p:name="jack">
		<property name="cakes" value="#{cakes.?[size > 6]}" />
	</bean>

	<bean id="mike"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Chief"
		p:name="mike">
		<property name="cake" value="#{cakes.^[size > 6]}" />
		<property name="cakeNames" value="#{cakes.![name]}" />
	</bean>

	<bean id="rose"
		class="com.raylee.my_new_spring.my_new_spring.ch01.topic_1_21.Chief"
		p:name="rose">
		<property name="cake" value="#{cakes.$[size > 6]}" />
	</bean>
</beans>

注意点:

(1)查询集合有三种符号

.?[ ] 返回一个集合

.^[ ]返回集合的第一个对象

.$[ ]返回集合的最后一个对象

(2)影射元素集合符号

.![ ] 返回一个集合

(3)在查询元素的时候,我们可以引入对比符来对比某种属性,例如:cakes.$[size > 6]

(4)影射元素集合的时候,中括号里面放入的是集合里面某个元素的某个属性,返回的就是集合里面所有元素的这个属性的集合

测试输出:

jack can make banana oatmel mousse cake
jack can make vanilla eclair
mike can make blueberry cheese cake
mike can make chocolate cheese cake
mike can make banana oatmel mousse cake
mike can make vanilla eclair
mike can make ligueur perfumed triplet cake
rose make vanilla eclair

总结:这一章节我们主要介绍了查询集合以及投影元素集合。

目录:http://blog.csdn.net/raylee2007/article/details/50611627

我的github:https://github.com/raylee2015/my_new_spring

时间: 2024-10-19 08:33:20

从头认识Spring-1.16 SpEl对集合的操作(2)-查询集合以及投影元素集合的相关文章

从头认识Spring-1.15 对SpEl的值的操作(1)-数值运算

这一章节我们来讨论一下对SpEl的值的运算. 1.domain 烤炉类:(不变) package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_17; public class Oven { private String name = ""; private double size = 0; public double getSize() { return size; } public void setSize(double s

从头认识Spring-1.15 对SpEl的值的操作(3)-逻辑运算以及条件表达式

这一章节我们来讨论一下对SpEl的逻辑运算以及条件表达式. 1.domain 烤炉类:(修改了toString方法,因为配置文件的表达式需要只返回跟Bean的id相同的name的属性值) package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_18; public class Oven { private String name = ""; private double size = 0; private boolean

从头认识Spring-1.15 对SpEl的值的操作(2)-对比值

这一章节我们来讨论一下对SpEl的值的对比值. 1.domain 烤炉类:(增加了bigOrNot属性) package com.raylee.my_new_spring.my_new_spring.ch01.topic_1_18; public class Oven { private String name = ""; private double size = 0; private boolean bigOrNot = false; public boolean isBigOrN

Spring表达式语言SpEL简介

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有很多特性,比较常用的包括: 1.使用bean的id来引用bean, 下面这个例子就是将卧室这个bean通过SpEL注入到house这个bean的bedroom属性中. <bean id="bedroom" class="go.derek.Bedroom"/> <bean id="house" class=&q

Spring学习笔记----SpEL表达式

Spring3系列6-Spring 表达式语言(Spring EL) 本篇讲述了Spring Expression Language -- 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性.对象方法调用等.所有的SpEL都支持XML和Annotation两种方式,格式:#{ SpEL expression } 一.      第一个Spring EL例子-- HelloWorld Demo 这个

Spring学习笔记--Spring表达式语言SpEL

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中.字面值我们可以在<property>元素的value属性中使用#{}界定符将值装配到Bean的属性中. <property name="count" value="#{5}" /> 浮点型数字一样可以出现在SpEL表达式中.

python学习列表字符串字典集合文件操作字符串编码与转换

一.列表 1 names = "ZhangYang GuYun XiangPeng XuLiangchen" 2 names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] 3 names.append("LeiHaiDong") #在列表最后追加一个元素 4 names.inse

使用 redis (sort set排序集合类型操作)

sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子(回复量)信息: select * from message order by backnum desc limit 5; // 利用 sort set 实现最热门的前 5 贴信息 帖子id            回复量(万条) 11                102        12     

Scala 运算符和集合转换操作示例

Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为例子,介绍常见的集合变换操作. 一.常用操作符(操作符其实也是函数) ++ ++[B](that: GenTraversableOnce[B]): List[B] 从列表的尾部添加另外一个列表++: ++:[B >: A, That](that: collection.Traversable[B])