zoukankan      html  css  js  c++  java
  • 【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);
                }

  • 相关阅读:
    最近邻插值
    tp类型自动转换和自动完成
    tp读取器和写入器
    tp模型和数据库操作方法
    tp数据库操作
    tp请求和响应
    tp配置+路由+基本操作
    git的常见操作方法
    php 检查该数组有重复值
    公众号的TOKEN配置PHP代码
  • 原文地址:https://www.cnblogs.com/mindzone/p/12865736.html
Copyright © 2011-2022 走看看