zoukankan      html  css  js  c++  java
  • 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", 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]);
    }

  • 相关阅读:
    [SCOI2013]火柴棍数字(背包)
    [NOI2015]品酒大会
    后缀数组小结
    [POI2009]Slw
    [POI2009]Wie
    [POI2008]账本BBB
    ant语法和规范
    使用Hudson进行持续集成
    gnu make
    可信执行环境(TEE)介绍
  • 原文地址:https://www.cnblogs.com/a1280055207/p/2854261.html
Copyright © 2011-2022 走看看