Hibernate学习30 -- Hibernate查询语言(HQL)4 -- 条件查询

41 篇文章 0 订阅

条件查询:

* 可以采用拼字符串的方式传递参数

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

* 可以采用 :参数名 来传递参数

* 如果传递多个参数,可以采用setParamterList方法

* hql中可以使用数据库的函数,如:date_format

例子代码如下:

/**

 * 条件查询

 */

public class SimpleConditionQueryTest extends TestCase {

    public void testQuery1() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           //可以拼字符串

           List students = session.createQuery

("select s.id, s.name from Student s where s.name like '%1%'")

.list();

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

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

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

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }

    public void testQuery2() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           //可以使用?方式传递参数

           //参数的索引从0开始

           //传递的参数值,不用单引号引起来

           //注意方法链编程

           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]);

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }  

    public void testQuery3() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

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

           List students = session.createQuery

("select s.id, s.name from Student s where s.name like :myname")

                                  .setParameter("myname", "%1%")

                                  .list();         

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

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

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

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }         

    public void testQuery4() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

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

           List students = session.createQuery

("select s.id, s.name from Student s where s.name like :myname and s.id=:myid")

                                  .setParameter("myname", "%1%")

                                  .setParameter("myid", 12)

                                  .list();         

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

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

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

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }  

    public void testQuery5() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           //支持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]);

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }         

    public void testQuery6() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           //查询20082月创建的学生

           List students = session.createQuery

("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")

                                .setParameter(0, "2008-02")

                                  .list();

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

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

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

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }         

 

    public void testQuery7() {

       Session session = null;

        try {

           session = HibernateUtils.getSession();

           session.beginTransaction();       

           SimpleDateFormat sdf = new SimpleDateFormat

("yyyy-MM-dd HH:mm:ss");

           //查询2008-01-102008-02-15创建的学生

           List students = session.createQuery

("select s.id, s.name from Student s where s.createTime between ? and ?")

              .setParameter(0, sdf.parse("2008-01-10 00:00:00"))

              .setParameter(1, sdf.parse("2008-02-15 23:59:59"))

               .list();

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

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

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

           }

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }         

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值