Hibernate笔记:HQL查询总结(二)——条件查询

条件查询

1.拼字符串

where条件后面,可以用字符串连接组成条件

String hql = " select s.id, s.name from Student s where s.name like '%1%'";

Query query = session.createQuery(hql);

List list = query.list();

for (Iterator iter=students.iterator(); iter.hasNext();) {

Object[]obj=(Object[])iter.next();

System.out.println(obj[0]+","+obj[1]);

}

2.可以采用 ?来传递参数(索引从0开始)

(1)分开设值

//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数String hql = "from Users where name=? and passwd=?";

Query query = session.createQuery(hql);

     

//第1种方式

//query.setString(0, "name1");

//query.setString(1, "password1");

//第2种方式

query.setParameter(0, "name1",Hibernate.STRING);

query.setParameter(1, "password1",Hibernate.STRING);

List<Users> list = query.list();

for(Users users : list){

    System.out.println(users.getId());

(2)方法链

List students = session.createQuery("select s.id, s.name from Student s

                where s.name like ?")

.setParameter(0,"%1%")

                    .list();

for(Iterator iter=students.iterator(); iter.hasNext();) {

Object[]obj=(Object[])iter.next();

System.out.println(obj[0]+","+obj[1]);

}

3.使用 :参数名称的方式传递参数值

//条件查询,自定义索引名(参数名):username,:password.通过

//setString,setParameter设置参数

String hql = "from Users where name=:username and passwd=:password";

Query query = session.createQuery(hql);

//第1种方式

//query.setString("username", "name1");

//query.setString("password", "password1");

//第2种方式,第3个参数确定类型

query.setParameter("username", "name1",Hibernate.STRING);

query.setParameter("password", "password1",Hibernate.STRING);

//第3种方式

//query = query.setParameter("username", "name1").setParameter

//("password", "password1");

List<Users> list = query.list();

for(Users users : list){

    System.out.println(users.getId());

4.支持谓词in,需要使用setParameterList进行参数传递

List students = session.createQuery("select s.id, s.name from Student s

         where s.id in(:myids)")

.setParameterList("myids",newObject[]{1,2,3,4,5})

.list();

for(Iteratoriter=students.iterator();iter.hasNext();){

Object[]obj=(Object[])iter.next();

System.out.println(obj[0]+","+obj[1]);

}

5.在HQL中使用数据库的函数

List students = session.createQuery("select s.id, s.name from Student s

         where date_format(s.createTime, '%Y-%m')=?")

.setParameter(0,"2010-12")

.list();

for(Iteratoriter=students.iterator();iter.hasNext();){

Object[]obj=(Object[])iter.next();

System.out.println(obj[0]+","+obj[1]);

}

6.查询时间段的数据

http://blog.sina.com.cn/s/blog_59c701350100nkuk.html

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");List students = session.createQuery("select s.id, s.name from Student s

         where s.createTime between ? and ?")

.setParameter(0,sdf.parse("2010-12-0100:00:00"))

.setParameter(1,sdf.parse("2010-12-3123:59:59"))

.list();

for(Iteratoriter=students.iterator();iter.hasNext();){

Object[]obj=(Object[])iter.next();

System.out.println(obj[0]+","+obj[1]);

}

相关推荐