码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-02-05 19:29:24      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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



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

标签:

原文地址:http://blog.csdn.net/raylee2007/article/details/50638109

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!