Query对象:
1、使用query对象,不需要写sql(Structured Query Language)语句,但是要写hql(Hibernate Query Language)语句
sql和hql的区别:
使用sql语句操作的是数据库中的表和表字段
使用hql语句操作的是实体类和实体类中的属性
2、使用hql语句查询所有
from 实体类名称
3、Query对象的使用
//测试Query对象查询
@Test
public void testQuery(){
//创建sessionFactory对象,用于关闭链接,防止测试时内存溢出
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = HibernateUtils.getSession();
tx = session.beginTransaction();
//hql语句查询t_user表中的所有内容
Query query = session.createQuery("from User");
//用一个List对象来存储表中的所有记录
List<User> list = query.list();
//遍历list
for(User u:list){
System.out.println(u.toString());
}
tx.commit();
}
catch(Exception e){
tx.rollback();
}
finally{
sessionFactory.close();
}
}
控制台打印:
Criteria对象:
Criteria对象也可以用来查询结果,与Query对象不同的是,创建criteria对象时,session.createCriteria()方法中传入的直接是实体类对象的class,不再是hql语句
Criteria criteria = session.createCriteria(User.class);
SQLQuery对象:
可以调用底层sql语句
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
如果直接用List接收sqlQuery.list()的话,list中每部分存储的并不是单个的User对象,而是一个存储了User信息的数组
所以需要调用sqlQuery.addEntity(User.class)方法
然后用List接收,此时list中存放的就是单个的User对象
//测试SQLQuery对象查询
@Test
public void testSQLQuery(){
//创建sessionFactory对象,用于关闭链接,防止测试时内存溢出
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = HibernateUtils.getSession();
tx = session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
// List<Object[]> list = sqlQuery.list();
//
// for(Object[] u:list){
// System.out.println(Arrays.toString(u));
// }
sqlQuery.addEntity(User.class);
List<User> list = sqlQuery.list();
for(User u :list){
System.out.println(u.toString());
}
tx.commit();
}
catch(Exception e){
tx.rollback();
}
finally{
sessionFactory.close();
}
}