zoukankan      html  css  js  c++  java
  • hibernate----(Hql)查询

    package com.etc.test;

    import java.util.List;
    import java.util.Properties;

    import org.hibernate.Query;
    import org.hibernate.SQLQuery;
    import org.hibernate.Session;

    import com.etc.dao.HibernateSessionFactory;
    import com.etc.entity.Person;
    import com.etc.entity.Sex;

    public class hql查询 {
    static void 完整对象的查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();
    //2 构造hql语句
    String hql = "from Person where pname like '老%'";
    //3 执行查询
    List<Person> list = s.createQuery(hql).list();

    //4 遍历结果
    for(Person p:list)
    {
    System.out.println(p);
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }

    static void 部分字段的查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();
    //2 构造hql语句。只返回部分字段
    String hql = "select pid,pname from Person where pname like '老%'";

    //3 执行查询
    List<Object[]> list = s.createQuery(hql).list();
    //4 遍历

    for(Object[] fields:list)
    {
    //把每条记录的字段显示查询
    for(Object field:fields)
    {
    System.out.print(field+" ");
    }
    System.out.println();
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();

    }

    static void 关联条件查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();

    //a 显式关联(inner join关键字)
    //2 构造hql语句
    String hql = "from Person as p inner join p.sex as s " +
    "where s.sexname like '男%'";
    //3 执行查询.获得主对象和关联对象
    List<Object[]> list = s.createQuery(hql).list();

    //4 遍历结果
    for(int i=0;i<list.size();i++)
    {
    Person p = (Person) list.get(i)[0];
    System.out.println(p);
    }


    //b 隐式关联.推荐使用
    /*2 构造hql语句。使用关联对象的属性作为约束条件。
    String hql = "from Person where sex.sexname like '女%'";
    //3 执行查询
    List<Person> list = s.createQuery(hql).list();

    //4 遍历结果
    for(Person p:list)
    {
    System.out.println(p);
    }

    */
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }
    static void 聚合查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();

    //2 构造hql语句
    /*
    String hql = "select '记录的总数:'||cast(count(pid),string) from Person";


    List<Object> list = s.createQuery(hql).list();
    System.out.println(list.get(0));
    */
    //分组查询,统计各个性别的人数
    String hql = "select '人数:'||cast(count(pid),string),'性别名:'||sex.sexname from Person " +
    "group by sex";
    List<Object[]> list = s.createQuery(hql).list();
    for(Object[] fields:list)
    {
    //把每条记录的字段显示查询
    for(Object field:fields)
    {
    System.out.print(field+" ");
    }
    System.out.println();
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }

    static void 分页查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();
    //2 构造hql语句
    String hql = "from Person where pname like '老%'";
    //3 执行查询.第3到6条记录
    Query q = s.createQuery(hql);
    q.setFirstResult(2);//设置起点
    q.setMaxResults(4);//设置条数
    List<Person> list = q.list();

    //4 遍历结果
    for(Person p:list)
    {
    System.out.println(p);
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();

    }

    static void 命名查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();

    //3 执行查询
    List<Person> list = s.getNamedQuery("find_unusual_sex").list();

    //4 遍历结果
    for(Person p:list)
    {
    System.out.println(p);
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }

    static void 动态参数查询() //支持?的hql语句
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();
    //a ?作为动态参数
    //String hql = "from Person where pname like ?";
    //b 取参数别名。
    //c 设置查询属性
    //d 关联查询
    String hql = "from Person where sex =:sex";
    //String hql = "from Person where pname like :name " +
    // "and sex.sexname =:sex";
    Query q = s.createQuery(hql);

    //a 按照位置指定
    //q.setString(0,"%白%"); //与jdbc不同,从0开始
    /*b 按照别名进行指定
    q.setParameter("name", "%老%");
    q.setParameter("sex", "女性");
    */
    /*c 采用构造"查询属性"的方法
    Properties pro = new Properties();
    pro.setProperty("name","%老%");
    pro.setProperty("sex", "女性");
    q.setProperties(pro);
    */
    //d 设置关联对象作为查询条件
    Sex sex = new Sex();
    sex.setSexid(2); //只有sex.主键作为查询条件。
    q.setEntity("sex", sex);//将对象作为sex参数的查询条件
    //3 执行查询
    List<Person> list = q.list();

    //4 遍历结果
    for(Person p:list)
    {
    System.out.println(p);
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }

    static void sql的查询()
    {
    //1 获取连接
    Session s = HibernateSessionFactory.getSession();
    //2 构造sql语句。找出人数最多的性别名,及它的人数
    //
    SQLQuery q = (SQLQuery) s.getNamedQuery("find_max_count_sex");

    //3 执行查询
    List<Object[]> list = q.list();
    //4 遍历

    for(Object[] fields:list)
    {
    //把每条记录的字段显示查询
    for(Object field:fields)
    {
    System.out.print(field+" ");
    }
    System.out.println();
    }
    //5 关闭连接
    HibernateSessionFactory.closeSession();
    }

    public static void main(String[] args)
    {
    //完整对象的查询();
    //部分字段的查询();
    //关联条件查询();
    //聚合查询();
    //分页查询();
    //命名查询();
    //动态参数查询();
    sql的查询();
    }
    }

  • 相关阅读:
    POJ 1315 Don't Get Rooked
    POJ 2051 Argus
    POJ 1942 Paths on a Grid
    POJ 2151 Check the difficulty of problems
    POJ 3349 Snowflake Snow Snowflakes
    POJ 1753 Flip Game
    POJ 2392 Space Elevator
    POJ 2385 Apple Catching
    POJ 2356 Find a multiple
    POJ 2355 Railway tickets
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6222973.html
Copyright © 2011-2022 走看看