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 ListqueryAllClasses(){ 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; }}