HQL查询二

4.基于in查询
   eg:List<Student> list = session.createQuery(hql)
                    .setParameterList("Sid",new Integer[]{1,3,4})
                    .list();
5.基于投影的HQL查询
   HQL投影查询是查询一个持久化类的一个或多个属性值
   将每条查询结果封装成Object对象
   将每条查询结果封装成Object数组
   将每条查询结果通过构造函数封装成对象
   eg:   @Test
    public  void testPartCol(){
        Session session = null;
        try {
            session = util.getSession();


            //字段名要和数据库中的字段名对应
            String hql = "select sid,sname from Student";
            List<Object[]> list = session.createQuery(hql).list();


            for(Object[] stu : list){
                System.out.println("sid:"+stu[0]+",sname:"+stu[1]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            util.close(session);
        }
    }   
6.基于构造函数查询
--构造函数预先存在于类中
eg:
    /**
     * 投影查询 (对象)
     */
    @Test
    public  void testPartCol2(){
        Session session = null;
        try {
            session = util.getSession();


            String hql = "select new Student(sname,sage) from Student";
            List<Student> list = session.createQuery(hql).list();


            for(Student stu : list){
                System.out.println("姓名:"+stu.getSname()+",年龄:"+stu.getSage());
            }


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            util.close(session);
        }
    }

7.唯一结果查询
  --当确定hql查询返回的结果有且只有一条时,可以使用该方法
eg: Student stu = (Student) session.createQuery(hql)
                    .setParameter("id",5)
                    .uniqueResult();


8.聚合函数查询
String hql ="select count(Sid) from Student";
eg:Long count = (Long) session.createQuery(hql).uniqueResult();


9.分页查询
String hql ="from Student";
eg:List<Student> list = session.createQuery(hql)
                   .setFirstResult(3)
                    .setMaxResults(3)
                    .list();


10.链式查询
String hql ="select h from House h";
eg:List<House> list = session.createQuery(hql)
                    .list();

11.导航(链式)查询
String hql ="from House h where h.stu.sid= :stuid ";
eg:List<House> list = session.createQuery(hql)
                    .setParameter("stuid",4)
                    .list();
12.内连接查询
String hql ="select h.title,stu.sname from House h inner join Student stu on h.stu.sid = stu.sid";
eg:List<Object[]> list = session.createQuery(hql)
                    .list();
  for(Object[] objs : list){
                System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
            }
13.外链接查询:
eg:String hql ="select h.title,stu.sname from House h left join Student stu on h.stu.sid = stu.sid";
            List<Object[]> list = session.createQuery(hql)
                    .list();
            for(Object[] objs : list){
                System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
            }
eg:String hql ="select h.title,stu.sname from House h right join Student stu on h.stu.sid = stu.sid";
            List<Object[]> list = session.createQuery(hql)
                    .list();
            for(Object[] objs : list){

                System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);

            }
14.基于DTO查询:
  DAO(Data Access Object):数据访问对象
  DTO(Data Transfer Object):数据传输对象
  注意:
  ①使用的dto类一定要写类全名    
  ②如果DTO类中的属性和查找实体属性不一致时,一定要显示使用as进行别名转换  
 String hql ="select new com.ibeifeng.hibernate.model.HouseDto(h.title as htitle,stu.sname as uname) from House h left join Student stu on h.stu.sid = stu.sid";
eg:  List<HouseDto> list = session.createQuery(hql)
                    .list();


相关异常:
java.lang.ClassCastException: 
java.lang.Long cannot be cast to java.lang.Integer  --无法转换为lang类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值