三种查询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); }