博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OGNL投影查询
阅读量:4046 次
发布时间:2019-05-25

本文共 3545 字,大约阅读时间需要 11 分钟。

三、语法细节

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对象。

 

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

你可能感兴趣的文章
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
gdb调试命令的三种调试方式和简单命令介绍
查看>>
C++程序员的几种境界
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>