Hibernate HQL查询

来源:互联网 发布:java与javascript区别 编辑:程序博客网 时间:2024/06/16 04:27
package cn.itcast.g_query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.query.Query;import org.junit.Test;import java.util.ArrayList;import java.util.List;/** * Created by 朱博文 on 2017/6/30. */public class App {    private static SessionFactory sf = null;    static {        sf = new Configuration().configure().addClass(Dept.class).addClass(cn.itcast.g_query.Employee.class).buildSessionFactory();    }    @Test    public void all() {        Session session = sf.openSession();        Transaction transaction = session.beginTransaction();        //主键查询        //Dept dept = session.get(Dept.class, 12);        //Dept dept = session.load(Dept.class, 12);        //对象导航查询        //Dept  dept = (Dept) session.get(cn.itcast.g_query.Dept.class,1);        //System.out.println(dept.getDeptName());        //HQL查询        //注意:auto—import=true一定是true否则要指定包名.        //session.createQuery("from Employee");        //Query query = session.createQuery("from Dept");        //List<Dept> list = query.list();        //for (Dept l : list) {        //    System.out.println(l.getDeptName());        //    System.out.println("l.getDeptId() = " + l.getDeptId());        //}        //a.查询全部列//        Query query = session.createQuery("from Dept");//        System.out.println(query.list());        //b.查询指定的列//        Query query1 = session.createQuery("select d.deptId,d.deptName from Dept d");//        System.out.println(query1.list());        //c.查询的指定的列封装为对象,一定要提供对象的带参构造器//        session.createQuery("select new Dept(d.deptId,d.deptName) from Dept d");        //d.条件查询:一个条件、多个条件and or /between and/模糊查询        //条件查询:占位符//        Query q = session.createQuery("from  Dept  d WHERE  deptName =?");//        q.setParameter(0, "财务部");                //条件查询:命名参数//        Query query = session.createQuery("from Dept d  where deptId=:myId and deptName=:myName");//        query.setParameter("myId", 12);//        query.setParameter("myName", "应用开发部");//        System.out.println(query.list());//        Query query = session.createQuery("from Dept where  deptId between :index and :end");//        query.setParameter("index", 1);//        query.setParameter("end", 2);        //模糊查询//        Query query = session.createQuery("from  Dept d where  deptName like ?");//        query.setParameter(0, "%%");//        System.out.println(query.list());        //e.聚合函数统计 这个时候用list就不合适了        // SELECT COUNT(*) FROM t_Dept  -- 统计总记录        //SELECT COUNT(1) FROM t_Dept  --统计总记录 ,效率更高        //SELECT COUNT(deptName) FROM t_Dept --忽略NULL//        Query query = session.createQuery("select  count(*) from Dept");//        Long l = (Long) query.uniqueResult();//        System.out.println(l);        //f.分组查询//        Query query = session.createQuery("select  dept.deptId,count(*) from Employee  group by dept.deptId HAVING count(*) > 1");//        System.out.println(query.list());        //g.连接查询        //内连接[映射已经配置好了关系,关联的时候,直接写对象的属性即可]//        Query query = session.createQuery("from Employee  e inner  join e.dept");        //数组中第一个元素是Employee//        List<Object[]> list = query.list();//        Query query = session.createQuery("from Employee  e left  join e.dept");//        Query query = session.createQuery("from Employee  e right  join e.dept");        //h.迫切内连接  d迫切查询的特点是把emps封装到Dept里面,不用object数组.//        Query query = session.createQuery("from Dept  d inner join fetch d.emps");        //i.迫切左外连接//        Query q = session.createQuery("from Dept d left join fetch  d.emps");
        //HQL放在映射文件中//        Query query = session.getNamedQuery("getAllDept");
transaction.commit(); session.close(); }}
<!--存放sql语句--><query name="getAllDept">    from Dept d where deptId = :myid or deptName = :myName</query>
   <query name="test01">       <![CDATA[from Dept d where deptId < ?       ]]>   </query>