orcal 实现多条件查找

主类
/**
* 多条件动态查询
*/
@Test
public void selByConditions() {//通过条件查找,实现多条件查找
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;

EmpCondition condition = new EmpCondition();

condition.setJob("CLERK");
condition.setSalary(1000d);
condition.setBeginDate(DateUtils.string2Date("1981-04-01"));
condition.setEndDate(DateUtils.string2Date("1985-09-09"));

String hql = "from Emp where 1=1";

if (condition.getJob() != null) {
hql += " and job=:job";//命名参数

}

if (condition.getSalary() != null) {
hql += " and sal>:salary";
}

if (condition.getBeginDate() != null) {
hql += " and hiredate>=:beginDate";
}

if (condition.getEndDate() != null) {
hql += " and hiredate<=:endDate";
}

try {
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.openSession();

Query query = session.createQuery(hql);

query.setProperties(condition);// 以下注释代码,就是此方法的底层实现

// if(condition.getJob()!=null){
// query.setParameter("job", condition.getJob());
//
// }
//
// if(condition.getSalary()!=null){
// hql+=" and sal=:salary";
// }
//
// if(condition.getBeginDate()!=null){
// hql+=" and hiredate>=:beginDate";
// }
//
// if(condition.getEndDate()!=null){
// hql+=" and hiredate<=:endDate";
// }

List<Emp> list = query.list();
for (Emp emp : list) {
System.out.println(emp.getEname() + "*****" + emp.getJob());
}

} catch (Exception e) {
// TODO Auto-generated catch block

e.printStackTrace();

} finally {
if (session != null && session.isOpen()) {
session.close();// 游离状态:数据库中存在,session中不存在
}
}

工具类:DateUtils.java

package com.yh.hib.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {
public static Date string2Date(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);//string 类型转换为date类型
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}

}
}

查询条件实体类:EmpCondition.java

package com.yh.hib.entity;

import java.util.Date;

public class EmpCondition {
private String job;
private Double salary;
private Date beginDate;
private Date endDate;
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getBeginDate() {
return beginDate;
}
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}

}

时间: 2024-07-31 16:34:48

orcal 实现多条件查找的相关文章

【Excel】多条件查找

例如下图:要求在单元格从C10中根据分类与名称找出相应的数量 1.VLOOKUP函数(数组公式) {=VLOOKUP(A10&B10,IF({1,0},A2:A6&B2:B6,C2:C6),2,0)} 原理:使用if{1,0}构造了数据 2.LOOKUP函数 =LOOKUP(1,0/(A10=A2:A6)*(B10=B2:B6),C2:C6) 原理:用lookup(1,0/(条件) 结构完成查找 3.SUM函数(数组公式)------有限制 {=SUM((A10=A2:A6)*(B10=B

VLOOKUP多条件查找不使用辅助列

问题描述: 可能很多人在使用VLOOKUP的时候,对于多条件时,则会使用辅助列进行查找,那么不使用辅助列是否也可以呢? 答案是:必须可以. 问题处理: 1.使用辅助列 2.不使用辅助列的操作如下: 公式:=VLOOKUP(条件1&条件2,if({1,0},条件1范围&条件2范围,结果范围),2,False)  点击附件下载

js中树结构根据条件查找节点返回节点路径的一些思路

今天在项目中遇到一个问题,需要根据数据库中记录的树结构节点id获取该记录所在目录节点的路径. 大致想法,首先定义变量保存当前路径,然后递归遍历该树节点,在遍历的过程中将遍历到的节点加入到当前路径中,找到该节点后终止递归,最后返回路径即可. 问题,怎样保存当前判断节点的路径以及未找到节点时对路径的处理方法. 现附上代码: var getPathById = function (id, catalog, callback) { //定义变量保存当前结果路径 var temppath = ""

安卓奇葩问题之SQLite条件查找不到数据

今天真是日了狗了. 先说需求:要做一个累死支付宝首页的可自定义的栏目.栏目是动态从后台获取的,所以就会有一个本地数据和后台数据的同步问题.为了方便对本地数据的增删改查,首先想到SQLite. 然后就写了个工具类,调用接口后,先进行插入操作,成功:然后查询所有数据,成功: 然而,人生处处是惊喜.根据ID进行的查询.删除.更新,都会报错:游标的index越界了. 那就是没有查到数据嘛.首先想到是SQL语句写错了,或者是执行SQL的方法掉错了. 然后就试了无数种方法,发现都不行,还是一样的错误. 然后

Informatica 常用组件Lookup之七 查找条件

PowerCenter 使用查找条件来测试收到的值.这与 SQL 查询中的 WHERE 子句相似.为转换配置查找条件时,将对转换输入值和查找源或高速缓存(用查找端口代表)中的值进行比较.当您运行工作流时,PowerCenter 将基于条件在查找源或高速缓存中查询所有收到的值. 必须在所有查找转换中输入查找条件.查找条件的某些准则适用于所有查找转换,而某些准则则视您如何配置转换而定. 为查找转换输入条件时,请遵循以下准则: 条件中的数据类型必须匹配. 为条件中用到的每个查找端口使用一个输入端口.您

PHP数据访问修改和多条件查询(20161030)

查询分为关键字查询和准确查询 1.没有提交的时候--查所有 2.两个输入都为空--查所有3.第一个条件有,第二个为空--根据第一个条件查4.第一个没有,第二个有--根据第二个条件查5.两个都有--根据两个条件查 where name like '%宋%' and 1=1where 1=1 and nation='n001' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www

关于文件查找和解压缩

文件查找和解压缩在文件系统上查找符合条件的文件,文件查找的工具有两个,locate 和 find文件查找分为:            locate      非实时查找 (在数据库查找)             updatedb   更新数据库            经常用于搜索稳定的文件,比如配置文件            var/lib/mlocate/mlocate.db 数据库路径             find     实时查找 locate :       查询系统上预建的文件索引

find文件查找

文件查找 在文件系统上查找符合条件的文件: 实现工具:locate,find locate: 构建于实现构建好的索引库:/var/lib/mlocate/mlocate.db 系统自动实现(周期性任务): 手动更新数据库(updatedb): 工作特性: 查找速度快(基于数据库查找): 模糊查找: 非实时查找: locate [OPTION]... PATTERN... -b:只匹配路径中的基名 -c:统计出共有多少个符合条件的文件 -r:REGEXP -i:忽略大小写 -n #:只列举前N个匹

查找算法(I) 顺序查找 二分查找 索引查找

查找 本文为查找算法的第一部分内容,包括了基本概念,顺序查找.二分查找和索引查找.关于散列表和B树查找的内容,待有空更新吧. 基本概念 查找(search)又称检索,在计算机上对数据表进行查找,就是根据所给条件查找出满足条件的第一条记录(元素)或全部记录. 若没有找到满足条件的记录,则返回特定值,表明查找失败:若查找到满足条件的 第一条记录,则表明查找成功,通常要求返回该记录的存储位置或记录值本身,以便进行进一步处理:若需要查找到满足条件的所有记录,则可看做在多个区间内连 续查找到满足条件的第一