• 【Hibernate】06 查询API


    三种查询API

    - Query

      不需要SQL语句,但是要HQL语句

    - Criteria

      不需要任何QL语句,直接调用即可

    - SQLQuery

      调用底层的SQL语句实现


    什么是HQL?

    Hibernate Query Language

    - 和SQL语言相似

    HQL & SQL 的区别?

    - SQL 操作数据表和表的字段

    - HQL操作实体类的实例和实例的属性


    使用Query查询表的所有信息

    - 使用Query入参必须要写HQL语句

    - 建议写类名的时候使用完全限定名,和数据表也好区分开来

    - List集合引用可以使用泛型

        @Test
        public void userQueryInstanceToSelectAll(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction transaction = null;
    
            try{
                sessionFactory = HibernateUtil.getSessionFactory();
                session = sessionFactory.openSession();
                transaction = session.beginTransaction();
    
                // 获取查询结果
                Query query = session.createQuery("from cn.dai.entity.User");
    
                // 结果实例调用list方法返回一个可以操作的List容器实例
                List<User> list = query.list();
    
                // 遍历查看
                for (User user:list) System.out.println(user);
    
                transaction.commit();
            } catch (Exception exception){
                transaction.rollback(); // 发生异常,回滚事务
                exception.printStackTrace(); // 打印异常信息
            } finally {
                if (session != null) session.close();
                if (sessionFactory != null )sessionFactory.close(); // 然后释放工厂对象
            }
        }

    使用Criteria查询所有信息

        @Test
        public void userQueryInstanceToSelectAll(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction transaction = null;
    
            try{
                sessionFactory = HibernateUtil.getSessionFactory();
                session = sessionFactory.openSession();
                transaction = session.beginTransaction();
    
                // 调用创建,并且注入实体类的字节实例
                Criteria criteria = session.createCriteria(User.class);
    
                // 调用List即查询所有
                List<User> list = criteria.list();
    
                // 遍历查看
                for (User user:list) System.out.println(user);
    
                transaction.commit();
            } catch (Exception exception){
                transaction.rollback(); // 发生异常,回滚事务
                exception.printStackTrace(); // 打印异常信息
            } finally {
                if (session != null) session.close();
                if (sessionFactory != null )sessionFactory.close(); // 然后释放工厂对象
            }
        }

    注意官方的注解标识为已过时,说明不推荐使用此实例去查询了

    查看所有的重载方法,全部标记过时


    使用SQLQuery实现查询所有

        @Test
        public void userQueryInstanceToSelectAll(){
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction transaction = null;
    
            try{
                sessionFactory = HibernateUtil.getSessionFactory();
                session = sessionFactory.openSession();
                transaction = session.beginTransaction();
    
    
                NativeQuery sqlQuery = session.createSQLQuery("SELECT * FROM user");
    
                // 容器的元素是 Object类型的数组
                List<Object[]> list = sqlQuery.list();
    
                for (Object[] objects:list){
                    System.out.println(Arrays.toString(objects));
                }
                
                transaction.commit();
            } catch (Exception exception){
                transaction.rollback(); // 发生异常,回滚事务
                exception.printStackTrace(); // 打印异常信息
            } finally {
                if (session != null) session.close();
                if (sessionFactory != null )sessionFactory.close(); // 然后释放工厂对象
            }
        }

    我们需要先添加这个实体类型,才能返回类型结果

                NativeQuery sqlQuery = session.createSQLQuery("SELECT * FROM user");
    
                sqlQuery.addEntity(User.class);
    
                // 容器的元素是 Object类型的数组
                List<User> list = sqlQuery.list();
                
                for (User user:list){
                    System.out.println(user);
                }

  • 相关阅读:
    redis常用数据类型与命令
    bcb6重启应用程序
    MySQL 关联查询  外连接 { LEFT| RIGHT } JOIN
    MySQL 关联查询 内连接
    MySql子查询
    MySql单表查询
    表级操作语句
    库级操作语句
    14.正则表达式、re模块、元字符
    13.生成器、迭代器、 模块、包和包管理
  • 原文地址:https://www.cnblogs.com/mindzone/p/12865736.html
Copyright © 2020-2023  润新知