本文共 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对象。
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。