zoukankan      html  css  js  c++  java
  • hibernate基础18:HQL

    HQL:hibernate query language查询语言,是一种完全面向对象的查询语言。HQL与SQL几乎相同,关键字(不区分大小写)一样,HQL查询的是类名不是表名,输出字段写属性名而不是表中字段名

    1、查询所有

    @Test
        public void testSelect(){
            String hql = "from User";
            List<User> list =  session.createQuery(hql).list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    2、条件查询

    @Test
        public void testSelect(){
            String hql = "from User where age > 25";
            List<User> list =  session.createQuery(hql).list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }
    @Test
        public void testSelect(){
            String hql = "from User where age > ?";
            List<User> list =  session.createQuery(hql)
                    .setInteger(0, 25)
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }
    @Test
        public void testSelect(){
            String hql = "from User where age > :age";
            List<User> list =  session.createQuery(hql)
                    .setInteger("age", 25) 
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    3、查询指定列

    3.1、使用object数组接收,输出时根据字段顺序,下标从0开始

    @Test
        public void testSelect(){
            String hql = "select name,age from User";
            List<Object[]> list =  session.createQuery(hql)
                    .list();
            for (Object[] objs : list){
                System.out.println(objs[0]+"	"+objs[1]);
            }
        }

    3.2、实体类添加构造方法,在HQL输出字段时创建对象,即可用实体类接收

    //实体类添加构造方法
        public User(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    @Test
        public void testSelect(){
            String hql = "select new User(u.name,u.age) from User u";
            List<User> list =  session.createQuery(hql)
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    4、LIKE关键字使用

        @Test
        public void testSelect(){
            String hql = "from User u where name like ?";
            List<User> list =  session.createQuery(hql)
                    .setString(0, "张%")
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    5、输出唯一结果使用:uniqueResult,一般多用于登录,返回结果只有一条或NULL,当查询出多条使用此关键字报错

    @Test
        public void testSelect(){
            String hql = "from User u where name like ?";
            User u =  (User) session.createQuery(hql)
                    .setString(0, "张三")
                    .uniqueResult();
            System.out.println(u);
        }

    6、聚合函数查询

    6.1、统计表记录个数

    @Test
        public void testSelect(){
            String hql = "select count(1) from User";
            Long count =  (Long) session.createQuery(hql)
                    .uniqueResult();
            System.out.println(count);
        }

    7、HQL分页

    @Test
        public void testSelect(){
            String hql = "from User";
            List<User> list =  session.createQuery(hql)
                    //(currentPage-1)*pageSize (当前页-1)*每页显示条数
                    .setFirstResult(0)
                    //pageSize 每页显示条数
                    .setMaxResults(2)
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    8、HQL排序

    @Test
        public void testSelect(){
            //asc 升序,desc 降序
            String hql = "from User order by age asc";
            List<User> list =  session.createQuery(hql)
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    9、IN关键字

        @Test
        public void testSelect(){
            String hql = "from User where id in(:ids)";
            Object[] ids = {2,3};
            List<User> list =  session.createQuery(hql)
                    .setParameterList("ids", ids)
                    .list();
            for (User u : list){
                System.out.println(u.getName()+"	"+u.getAge());
            }
        }

    10、关联查询

    @Test
        public void testSelect1(){
            String hql = "from Student s where s.classes.name = ?";
            List<Student> list =  session.createQuery(hql)
                    .setString(0, "一年级")
                    .list();
            for (Student stu : list){
                System.out.println(stu.getName()+"	"+stu.getAge());
            }
        }
  • 相关阅读:
    裸裸的spfa~嘿嘿嘿!
    睡前1小时数学系列之-整除
    拓扑排序1.奖金
    拓扑排序
    SCU 1095运送物资(最短路)
    POJ1158 城市交通Traffic lights IOI 1999 (最短路)
    POI0109 POD (最短路)
    HN0I2000最优乘车 (最短路变形)
    FOJ1205 小鼠迷宫问题 (BFD+递推)
    CJOI 05新年好 (最短路+枚举)
  • 原文地址:https://www.cnblogs.com/chai-blogs/p/12969387.html
Copyright © 2011-2022 走看看