Hibernate--HQL基础语法

1 创建表

    @Test
    public void testCreateDB(){
        //3.x
        //Configuration cfg = new AnnotationConfiguration().configure();
        Configuration cfg = new Configuration().configure();
        SchemaExport se = new SchemaExport(cfg);
        se.create(true, true);
    }

2 查询
2.1 根据单个属性

    public void testQuery1(){
        //查询所有书名
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //Book 大写 表示的是  cn.siggy.pojo.Book类
        //name表示的 Book类中的属性名
        String hql="select name from Book";
        Query query = session.createQuery(hql);
        //list()方法返回查询结果
        //返回结果的类型 是根据查询的列决定的
        List<String> list = query.list();
        for(String bookname:list){
            System.out.println(bookname);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

2.2 查询多个属性

    public void testQuery2(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //Book 大写 表示的是  cn.siggy.pojo.Book类
        //name表示的 Book类中的属性名
        //list()方法返回查询结果
        //查询多个列时  返回结果是数组集合 数组中元素的类型 是由查询列来决定
        List<Object[]> list = session.createQuery("select name,price from Book").list();
        for(Object[] objs:list){
            System.out.println(objs[0]+"--"+objs[1]);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

查询多个列时 将查询结果封装为对象集合

    public void testQuery3(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //Book 大写 表示的是  cn.siggy.pojo.Book类
        //name表示的 Book类中的属性名
        //list()方法返回查询结果
        //查询多个列时  返回结果是数组集合 数组中元素的类型 是由查询列来决定
        List<Book> list = session.createQuery("select new Book(name,price) from Book").list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

3 别名的使用

    public void testQuery4(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //Book 大写 表示的是  cn.siggy.pojo.Book类
        //name表示的 Book类中的属性名
        //list()方法返回查询结果
        //查询多个列时  返回结果是数组集合 数组中元素的类型 是由查询列来决定
        List<Book> list = session.createQuery("select new Book(b.name,b.price) from Book as b").list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

4 查询所有列

    public void testQuery5(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("from Book").list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

查询所有列2 不能使用* 需要使用别名

    public void testQuery6(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("select b from Book b").list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

5 条件查询 占位符 从0开始

    public void testQuery7(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("from Book b where id<?")
                        .setInteger(0, 4)
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

条件查询 占位符 从0开始,setParameter不用理会参数类型

    public void testQuery8(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("from Book b where id<?")
                        .setParameter(0, 4)
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

条件查询 命名查询–设置条件参数的名称 以冒号开头后更名称 设置参数时 只需指定名

    public void testQuery9(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("from Book b where id<:id")
                        .setParameter("id", 4)
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

6 分页查询

    public void testQuery10(){
        //查询所有书 的名称和价格
        //创建Query对象
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list = session.createQuery("from Book b")
                        .setFirstResult(3)//开始显示的记录下标(currentPage-1)*pageSize
                        .setMaxResults(3)//设置每页记录数pageSize
                        .list();
        session.createSQLQuery("").setFirstResult(1).setMaxResults(0);
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

7 聚合函数–统计查询

    public void testQuery11(){
        //查询图书总数
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //int,long
        Number count = (Number)session.createQuery("select max(b.price) from Book b")
                        .uniqueResult();
        System.out.println("总数:"+count.byteValue());
        tx.commit();
        HibernateUtil.closeSession();
    }

8 分组查询

    public void testQuery12(){
        //查询图书总数
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //int,long
        List<Object[]> list = session.createQuery("select b.category.name,count(b.id) from Book b group by b.category.name")
                        .list();
        for(Object[] objs:list){
            System.out.println(objs[0]+"--"+objs[1]);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

9 排序

    public void testQuery13(){
        //查询图书总数
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //int,long
        List<Book> list = session.createQuery("from Book order by price desc")
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

10 连接查询

    public void testQuery14(){
        //查询 "仙侠"的书籍信息
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        String hql="from Book b where b.category.name=:name";
        hql="select b from Book b join b.category c where c.name=:name";
        hql="select b from Book b inner join b.category c where c.name=:name";
        List<Book> list = session.createQuery(hql)
                        .setString("name", "仙侠")
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

11 左外链接

    public void testQuery15(){
        //查询 "仙侠"的书籍信息
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        String hql="select c.name,b.name from Category c left outer join c.books b";
        List<Object[]> list = session.createQuery(hql)
                        .list();
        for(Object[] objs:list){
            System.out.println(objs[0]+"----"+objs[1]);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

12 过滤器的使用

    /* 1、定义过滤器
     * 2、使用:加条件
     * 3、在查询时候 使得过滤器生效
     * */
    public void testQuery16(){
        //查询 "仙侠"的书籍信息
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        //启用过滤器
        session.enableFilter("bf").setParameter("id", 4);
        List<Book> list =session.createQuery("from Book").list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }

13 命名查询NamedQuery

    public void testQuery17(){
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        List<Book> list =session.getNamedQuery("getByCategoryId")
                        .setInteger("id", 3)
                        .list();
        for(Book b:list){
            System.out.println(b);
        }
        tx.commit();
        HibernateUtil.closeSession();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值