22.hql查询

web环境下,hibernate配置文件需要配置,数据库驱动,方言

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

 

hibernate的查询方式

   1、hql(hibernate query language)  query

   2、Criteria query

   3、Native query

 

总结:

   1、如果页面上要显示的数据和数据库中的数据相差甚远,利用带select的构造器进行查询是比较好的方案

   2、如果页面上要显示的数据和数据库中的数据相差不是甚远,这个时候用迫切连接

   3、如果采用迫切连接,from后面跟的那个对象就是结构主体

   4、如果多张表进行查询,找核心表

public class HQLDao extends HiberanteUtils{public static HQLDao getInstanse() {return new HQLDao();}/** * 单表 *  * 一对多和多对多 *  * 多表的结合 * @author Think * */public List
 queryAllClasses(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess").list();    session.close();    return cList;}public List queryClasses_Properties(){    Session session = sessionFactory.openSession();    List cList = session.createQuery("select cid,cname from Classess").list();    session.close();    return cList;}public List
 queryClasses_Constructor(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("select new cn.itcast.domain.Classess(cname,description) from Classess").list();    session.close();    return cList;}public Classess queryClasses_Condition(){    Session session = sessionFactory.openSession();    Query query = session.createQuery("select new cn.itcast.domain.Classess(cname,description) from Classess where cid=:cid");    query.setLong("cid", 1L);    Classess classes = (Classess)query.uniqueResult();    System.out.println(classes.getCname());    session.close();    return classes;}public Classess queryClasses_Condition_2(){    Session session = sessionFactory.openSession();    Query query = session.createQuery("select new cn.itcast.domain.Classess(cname,description) from Classess where cid=?");    query.setLong(0, 1L);    Classess classes = (Classess)query.uniqueResult();    System.out.println(classes.getCname());    session.close();    return classes;}/** * order by,group by,sun,min,max,avg,having等都适用 * @return *//** * 子查询 */public void queryClasses_SubSelect(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess where cid in(select cid from Classess where cid in(1,2,3))").list();        session.close();    }    public static HQLDao getInstance(){    return new HQLDao();}/*********************************************************************************************/   /**    * 一对多    *    等值连接          查询出来的机构很差      *    内连接      *    左外连接      *    迫切左外连接    */public List
 queryClasses_Student_EQ(){Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess c,Student s where c.cid=s.classess.cid").list();    session.close();    return cList;}/** * 内连接 * @return */public List
 queryClasses_Student_INNER(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess c inner join c.students").list();    session.close();    return cList;}/** * 迫切内连接 * @return */public List
 queryClasses_Student_INNER_FETCH(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess c inner join fetch c.students").list();    session.close();    return cList;}/** * 左外连接 */public List
 queryClasses_Student_LeftJoin(){    Session session = sessionFactory.openSession();    List
 cList = session.createQuery("from Classess c left outer join c.students").list();    session.close();    return cList;}/** * 迫切左外连接 */public List
 queryClasses_Student_LeftJoin_fetch(){    Session session = sessionFactory.openSession();    String hql = "from Classess c left outer join fetch c.students";    hql = "from Student s left outer join fetch s.classess c";    List
 cList = session.createQuery(hql).list();    session.close();    return cList;}/** * 带select的查询 *///public List
 queryClasses_Student_Select(){    //Session session = sessionFactory.openSession();    //String hql = "select new cn.itcast.domain.ClassesView(c.cname,s.sname) " +    //     "from Student s left outer join s.classes c";    //List
 cList = session.createQuery(hql).list();    //session.close();    //return cList;//}/** * 多对多 */public void testQueryCourse_Student(){    Session session = sessionFactory.openSession();    List
 studentList = session.createQuery("from Student s inner join fetch s.courses c").list();    session.close();}/** * 一对多结合多对多 */public List
 queryClasses_Student_Course(){    Session session = sessionFactory.openSession();    String hql = "from Classes cs inner join fetch cs.students s inner join fetch s.courses c";    hql = "from Student s inner join fetch s.classes cs inner join fetch s.courses c";    //hql = "from Classes cs left outer join fetch cs.students s left outer join fetch s.courses c";    List
 cList = session.createQuery(hql).list();    //Set
 cset = new HashSet
(cList);    //cList = new ArrayList
(cset);    System.out.println(cList.size());    //for(Classes classes:cList){    //System.out.println(classes.getCid());    //Set
 students = classes.getStudents();    //for(Student student:students){    //System.out.println(student.getSname());    //Set
 courses = student.getCourses();    //for(Course course:courses){    //System.out.println(course.getCname());    //}    //}    //}    session.close();    return cList;    }}