OGNL投影查询

三、语法细节

1.查询属于depart01的全部Employee

Java代码:

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

List<Employee> empList = (List<Employee>) Ognl.getValue("empList", department);

 

for (Employee employee : empList) {

 

   System.out.println(employee.getEmpName()+" "+employee.getSalary());

 

}

 

执行结果:

emp01 100.0

emp02 200.0

emp03 300.0

emp04 400.0

注:这里暂时还没有用到投影和过滤。

 

2.在1的基础上仅查询员工工资

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

List<Double> salaryList = (List<Double>) Ognl.getValue("empList.{salary}", department);

 

for (Double salary : salaryList) {

  

   System.out.println("salary="+salary);

  

}

 

 

执行结果

salary=100.0

salary=200.0

salary=300.0

salary=400.0

 

说明:这里面的OGNL表达式empList.{salary}就是用到了投影,在整个List集合中仅获取每个元素对象的某一个属性值。

 

3.查询部门depart01中工资大于150的员工信息

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{?#this.salary>150}";

 

List<Employee> empList = (List<Employee>) Ognl.getValue(ognl, department);

for (Employee employee : empList) {

   System.out.println(employee.getEmpName()+" "+employee.getSalary());

}

 

执行结果

emp02 200.0

emp03 300.0

emp04 400.0

 

说明:这里OGNL表达式empList.{?#this.salary>150}表示从empList集合中查询工资大于150的员工。其中?表示返回查询结果中的全部数据,相应的使用^符号可以返回查询结果中的第一条数据,$符号表示返回最后一条数据。

#后面跟过滤条件。

this表示遍历集合得到的每一个元素对象,这里是Employee对象。

 

4.查询部门depart01中工资大于150的员工中的第一条信息

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{^#this.salary>150}";

 

List<Employee> empList = (List<Employee>) Ognl.getValue(ognl, department);

for (Employee employee : empList) {

   System.out.println(employee.getEmpName()+" "+employee.getSalary());

}

 

执行结果

emp02 200.0

 

说明:与3中的例子唯一的区别是,这里使用^符号表示取查询结果中的第一条数据。

这里需要格外强调的是,即使只取一条数据,返回的结果仍然是集合,而不是单个对象,大家一定要注意!

 

5.查询部门depart01中工资大于150的员工中的最后一条信息

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{$#this.salary>150}";

 

List<Employee> empList = (List<Employee>) Ognl.getValue(ognl, department);

for (Employee employee : empList) {

   System.out.println(employee.getEmpName()+" "+employee.getSalary());

}

 

执行结果

emp04 400.0

 

说明:与3中的例子唯一的区别是,这里使用$符号表示取查询结果中的最后一条数据,返回结果仍然是集合。

 

6.在工资大于150的员工信息中读取第二条数据

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{?#this.salary>150}[1]";

 

Employee employee = (Employee) Ognl.getValue(ognl, department);

System.out.println(employee.getEmpName()+" "+employee.getSalary());

 

执行结果

emp03 300.0

 

说明:由于过滤的结果是一个List集合,所以通过下标指定一个索引后,最终获取到的是一个Employee对象。

 

7.在工资大于150的员工信息中投影全部工资数据

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{?#this.salary>150}.{salary}";

 

List<Double> salaryList = (List<Double>) Ognl.getValue(ognl, department);

for (Double salary : salaryList) {

   System.out.println("salary="+salary);

}

 

执行结果

salary=200.0

salary=300.0

salary=400.0

 

说明:这里针对过滤得到的集合进行了一次投影,得到了一个salary的值组成的新的集合

 

8.查询工资等于300的员工的地址数据

Java代码

List<Department> departList = GetData.getDepartList();

 

Department department = departList.get(0);

 

String ognl = "empList.{?#this.salary==300}[0].address";

 

Address address = (Address) Ognl.getValue(ognl, department);

System.out.println(address);

 

执行结果

Address [country=country03, province=prov03, city=city03, street=street03]

 

说明:过滤的结果是Employee的List集合,用[0]找到集合中的唯一一个Employee对象,再访问这个Employee对象的address属性,得到的就是Address对象。

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值