HQL的使用整理

来源:互联网 发布:彩虹六号围攻优化 编辑:程序博客网 时间:2024/06/05 10:48
条件查询


 


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", new Object[]{1, 2, 3, 4, 5})
         .list();
   
for (Iterator iter=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 (Iterator iter=students.iterator(); iter.hasNext();) {
    Object[] obj = (Object[])iter.next();
    System.out.println(obj[0] + "," + obj[1]);
}


 


6.查询时间段的数据


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-01 00:00:00"))
         .setParameter(1, sdf.parse("2010-12-31 23:59:59"))
               .list();
for (Iterator iter=students.iterator(); iter.hasNext();) {
    Object[] obj = (Object[])iter.next();
    System.out.println(obj[0] + "," + obj[1]);
}

原创粉丝点击