• Hibernate学习---第十节:Hibernate之QBC、样例查询&离线查询


    一、QBC (Query By Criteria) 主要有Criteria,Criterion,Oder,Restrictions类组成

    1、java 代码如下:

    /**
     * 查询所有
     */
    @Test
    public void testQuery(){
        // 获取 Criteria 对象
        Criteria criteria = session.createCriteria(Person.class);
        List<Person> list = criteria.list();
        for(Person p : list){
            System.out.println(p);
        }
    }
    
    /**
     * 条件查询
     */
    @Test
    public void testQuery2(){
        // 获取 Criteria 对象
        Criteria criteria = session.createCriteria(Person.class);
        // 查询 id 属性小于等于 5 的记录
        criteria.add(Restrictions.le("id", 5));
        // 查询 id 属性等于 5 的记录
        criteria.add(Restrictions.eq("id", 5));
        // 模糊查询 name 属性包含 -8 的记录
        criteria.add(Restrictions.like("name", "%-8%"));
        // 查询 age 属性 21 岁到 24 岁之间的记录
        criteria.add(Restrictions.between("age", 21, 24));
        // 查询 id 属性等于 2,5,7的记录
        criteria.add(Restrictions.in("id", new Object[]{2,5,7}));
        // 对 id 属性做升序
        criteria.addOrder(Order.asc("id"));
        // 对 id 属性做降序
        criteria.addOrder(Order.desc("id"));
        List<Person> list = criteria.list();
        for(Person p : list){
            System.out.println(p);
        }
    }
    
    /**
     * 条件查询
     * 通过 Property 类的静态方法进行查询条件的绑定
     * 其实底层是对 Restrictions 的封装
     */
    @Test
    public void testQuery3(){
        // 获取 Criteria 对象
        Criteria criteria = session.createCriteria(Person.class);
        // 查询 id 属性小于等于 5 的记录
        criteria.add(Property.forName("id").le(5));
        // 查询 age 属性 21 岁到 24 岁之间的记录
        criteria.add(Property.forName("id").between(3, 6));
        List<Person> list = criteria.list();
        for(Person p : list){
            System.out.println(p);
        }
    }

    QBC:http://blog.csdn.net/agromach/article/details/1932290

    二、样例查询

    1、java 代码如下:

    /**
     * 样例查询
     * 根据给定了值的属性作为查询条件进行查询
     * 注意:一个对象的属性是基本类型,因为有默认值,所有也会拼装到查询条件中
     */
    @Test
    public void testQuery4(){
        Person p = new Person();
        p.setName("ldh-8");
        p.setPasswork(131);
        Criteria criteria = session.createCriteria(Person.class);
        criteria.add(Example.create(p));
        List<Person> list = criteria.list();
        for(Person person : list){
            System.out.println(person);
        }
    }

    三、离线查询

    /**
     * 离线查询
     * 可以在绑定查询数据和条件之前不需要session(最晚打开session)
     * 当真正使用的时候才传递一个当前的session
     * 
     * session使用的技巧:
     *             最晚打开
     *             最早关闭
     *             不用长时间的打开
     */
    @Test
    public void testQuery5(){
        DetachedCriteria dc = DetachedCriteria.forClass(Person.class);
        dc.add(Restrictions.between("id", 5, 8));
        Criteria criteria = dc.getExecutableCriteria(session);
        List<Person> list = criteria.list();
        for(Person person : list){
            System.out.println(person);
        }
    }
  • 相关阅读:
    ubuntu 12.04 挂载windows分区
    linux ubuntu12.04 配置jdk
    java.lang.IllegalStateException: Cannot forward after response has been committe
    linux ubuntu 安装vim!
    linux ubuntu12.04 eclipse安装 svn
    linux下 android环境配置!
    ubuntu 12.04 配置telnet
    测试下来比较好用的jquery upload插件——uploadify
    google市场又能用了
    当php.ini里post_max_size配置段使用简写法导致php无法接收$_POST值的!
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4295148.html
Copyright © 2020-2023  润新知