码迷,mamicode.com
首页 > Windows程序 > 详细

Hibernate查询之API查询

时间:2015-12-01 17:58:24      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

Hibernate在检索数据上,可以使用SQL、HQL和官方API进行查询,本人主要利用API进行相关查询的小demo。

话不多少直接上demo。

demo1:基本查询

    /**
     * 默认不加任何条件的时候是搜索全部。()
     * @param session
     */
    private static void demo1(Session session) {
        //criteria 是条件的意思
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        //idEq()是根据id进行匹配,gt()大于,lt()小于,in()在其中...
        criteria.add(Restrictions.idEq(4));
        List<StuInfo> infos = criteria.list();
        for (StuInfo stuInfo : infos) {
            System.out.println(stuInfo);
        }
    }

说明:

 

demo2:基本查询

    /**
     * 模糊查询
     * notice:普通的大于小于等的查询使用的是条件Restrictions
     * @param session
     */
    private static void demo2(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        criteria.add(Restrictions.like("stuName", "%刘%"));
        List<StuInfo> list = criteria.list();
        System.out.println(list.size());
    }

说明:

 

demo3:基本查询

/**
     * 关联查询
     * notice:利用createAlias来新建关联,翻译成SQL就是inner join,需要注意的是session中对应的那个类需要有一个字段叫做被关联的名称。
     * ps:实现原理是这样的:被关联的类的id作为外键ID,然后根据实体类的映射关系找到当前实体类的外键字段。
     * @param session
     */
    private static void demo4(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        // 词句代码是关键:表示引入stuClass这个类。notice:stuClass此字段必须存在在StuInfo这个类中。
        criteria.createAlias("stuClass", "cls");
        criteria.add(Restrictions.eq("cls.classId", 1)).add(Restrictions.gt("stu.stuId", 70));
        List<StuInfo> lists = criteria.list();
        for (StuInfo stuInfo : lists) {
            System.out.println(stuInfo);
        }
    }

说明:

 

demo4:基本查询

/**
     * 排序
     * Order.desc("propertyName")  或者  Order.asc("propertyName")
     * @param session
     */
    private static void demo5(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        criteria.add(Restrictions.gt("stu.stuId", 30));
        criteria.addOrder(Order.desc("stu.stuId"));
        List<StuInfo> list = criteria.list();
        for (StuInfo stuInfo : list) {
            System.out.println(stuInfo);
        }
    }

 

说明:

 

demo5:基本查询

/**
     * or
     * Restrictions.or(ex1,ex2,ex3);均表示的是多个条件依次or
     * @param session
     */
    private static void demo6(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        criteria.add(Restrictions.or(Restrictions.gt("stu.stuId", 20), Restrictions.lt("stu.stuId", 70)));
        List<StuInfo> list = criteria.list();
        for (StuInfo stuInfo : list) {
            System.out.println(stuInfo);
        }
    }

 

说明:

 

demo6:基本查询

/**
     * or
     * Restrictions.or(ex1,ex2,ex3);均表示的是多个条件依次or
     * @param session
     */
    private static void demo7(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        //notic:Restriction就是普通的条件直接add就可以了
        criteria.add(Restrictions.or(Restrictions.gt("stu.stuId", 20), Restrictions.lt("stu.stuId", 70)));
        //notice:Projection在设置的使用需要使用setProjection
        criteria.setProjection(Projections.projectionList().add(Projections.avg("stuId")).add(Projections.rowCount()));
        
        List<StuInfo> list = criteria.list();
        for (StuInfo stuInfo : list) {
            System.out.println(stuInfo);
        }
    }

 

说明:

 

demo7:基本查询

/**
     * Projection作为同Restriction的一个条件,用在"聚合函数"和"投影"上
     * 两种办法:一种是利用as,一种是利用逗号分隔。
     * 
     * @param session
     */
    private static void demo8(Session session) {
        Criteria criteria = session.createCriteria(StuInfo.class, "stu");
        //对于普通的条件Restriction相关的就是直接add,但是对于Projections若要链式添加,需要使用  Projections.projectionList().add().add()
        criteria.setProjection(Projections.projectionList().add(Projections.rowCount())
                .add(Projections.max("stu.stuId").as("max"))
                .add(Projections.alias(Projections.min("stu.stuId"), "min"))
                .add(Projections.groupProperty("stu.stuClass")));
        criteria.addOrder(Order.desc("min"));
        //需要注意的是使用投影后的返回值,本人觉得使用List<Object[]>最方便
        List<Object[]> list = criteria.list();
        for (Object[] object : list) {
            System.out.println(object);
        }
    }

 

说明:

 

demo8:基本查询

/**
     * 投影
     * notice:只需要部分数据的使用,使用 Project.property("xxx")
     * @param session
     */
    private static void demo10(Session session) {
        Criteria criteria=session.createCriteria(StuInfo.class,"stu");
    
        criteria.setProjection(Projections.projectionList().add(Projections.property("stuId").as("id"))
                .add(Projections.property("stuName"),"name")).addOrder(Order.desc("id")).addOrder(Order.asc("name"));
        List<Object[]> item=criteria.list();
        for (Object[] objects : item) {
            System.out.println("stuName:"+objects[1]+" stuId:"+objects[0]);
        }
    }

说明:

demo9:基本查询

/**
     * 分页
     * 
     * @param session 
     * @param pageSize 每页容量
     * @param pageNo  页码
     */
    private static void demo12(Session session,int pageSize,int pageNo) {
        Criteria criteria=session.createCriteria(StuInfo.class,"stu");
        criteria.setMaxResults(pageSize);
        int firstResult=(pageSize-1)*pageNo+1;
        criteria.setFirstResult(firstResult);
        List<StuInfo> stuInfos=criteria.list();
        for (StuInfo stuInfo : stuInfos) {
            System.out.println(stuInfo);
        }
    }

说明:

 

关于HQL部分可以参考此文:HQL查询

Hibernate查询之API查询

标签:

原文地址:http://www.cnblogs.com/LiuChunfu/p/5010721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!