标签:
//HQL查询 // auto-import要设置true,如果是false,写HQL时要指定类的全名 //查询全部列 Query query = session.createQuery("from Dept"); System.out.println(query.list()); //查询指定列 Query query = session.createQuery("select d.depId,d.depName from Dept d"); System.out.println(query.list()); //查询指定列,并封装为对象,必须提供带参数的构造器 Query query = session.createQuery("select new Dept(d.depId,d.depName) from Dept d"); System.out.println(query.list()); //条件查询 一个条件、多个条件、and or between 模糊查询 Query query = session.createQuery("from Dept d where depName=?"); query.setString(0,"人事部"); query.setParameter(0,"人事部"); //条件查询,命名参数 Query query = session.createQuery("from Dept d where depId =:myid and depName=:name"); query.setParameter("myid",1); query.setParameter("name","人事部"); //条件查询,between and查询 Query query = session.createQuery("from Dept d where depId between ? and ?"); query.setParameter(0,1); query.setParameter(1,5); //模糊查询 Query query = session.createQuery("from Dept d where depName like ?"); query.setParameter(0,"%部%"); System.out.println(query.list()); //集合函数统计,不支持count(1),uniqueResult()返回结果的第一行第一列中的值 Query query = session.createQuery("select count(*) from Dept"); System.out.println(query.uniqueResult()); //分组查询,查询employ表,统计每个部门的人数 Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept"); //统计部门人数大于1的部门 Query query = session.createQuery("select e.dept, count(*) from Employee e group by e.dept having count(*) >1"); System.out.println(query.list()); //连接查询,内连接、左外连接、右外连接 //内连接,映射已经配置好了关系,关联的时候直接写对象的属性即可 //返回员工和部门组成的对象数组,写在前面的元素在结果集中也在前面 // SELECT e.empName, e.salary, d.deptName FROM t_employee e INNER JOIN t_dept d ON d.depId = e.dept_id Query query = session.createQuery("select e.empName,e.salary,e.dept.depName from Employee e inner join e.dept"); List<Object[]> list = query.list(); for(int i=0;i<list.size();i++){ Object[] obj = list.get(i); Employee employee = (Employee) obj[0]; Dept dept = (Dept) obj[1]; System.out.println(employee); System.out.println(dept); } System.out.println(query.list()); //左外连接 // SELECT e.empName, e.salary, d.deptName FROM t_employee e LEFT JOIN t_dept d ON d.depId = e.dept_id Query query = session.createQuery(" from Employee e left join e.dept"); List<Object[]> list = query.list(); for(int i=0;i<list.size();i++){ Object[] obj = list.get(i); Employee employee = (Employee) obj[0]; Dept dept = (Dept) obj[1]; System.out.println(employee); System.out.println(dept); }//迫切内连接,将右表的对象填充到左表当中 Query query = session.createQuery("from Dept d inner join fetch d.emps");
将HQL查询语句放到映射文件中:
<query name="getDept"> from Dept d where depName=? </query> <query name="getDept2"> <![CDATA[ from Dept d where depId < ? ]]> </query>
使用查询语句
Query query = session.getNamedQuery("getDept"); query.setParameter(0,"人事部");
Query query = session.getNamedQuery("getDept2"); query.setParameter(0, 4); System.out.println(query.list());
标签:
原文地址:http://www.cnblogs.com/juaner767/p/5575097.html