Hibernate HQL和Criteria
HQL:HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL 更接近于面向对象的思维方式。
1 /** 2 * ---------HQL查询根据name进行模糊查询-------- 3 4 */ 5 public class TestHibernate6 { 6 public static void main(String[] args) { 7 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 8 Session session = sessionFactory.openSession(); 9 session.beginTransaction(); 10 //模糊查询 11 String name="iPhone"; 12 //HQL查询SQL语句 13 Query query = session.createQuery("from Product p where p.name like ?"); 14 query.setString(0,"%" name "%"); 15 List<Product> productList = query.list(); 16 for (Product product : productList) { 17 System.out.println(product); 18 } 19 //提交时事务 20 session.getTransaction().commit(); 21 //关闭 22 session.close(); 23 sessionFactory.close(); 24 } 25 26 }
Criteria:与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹
1 /** 2 * ---------Criteria查询根据name进行模糊查询-------- 3 * @author fereli 4 */ 5 public class TestHibernate7 { 6 public static void main(String[] args) { 7 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 8 Session session = sessionFactory.openSession(); 9 session.beginTransaction(); 10 //模糊查询 11 String name="iPhone"; 12 //Criteria的使用 13 Criteria criteria = session.createCriteria(Product.class); 14 criteria.add(Restrictions.like("name","%" name "%")); 15 List<Product> productList = criteria.list(); 16 for (Product product : productList) { 17 System.out.println(product); 18 } 19 //提交时事务 20 session.getTransaction().commit(); 21 //关闭 22 session.close(); 23 sessionFactory.close(); 24 } 25 26 }
两个结果一样:
SQL:因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。 不能保证其查询结果能够装进一个Product对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。
1 /** 2 * ---------标注sql查询根据name进行模糊查询-------- 3 * @author fereli 4 */ 5 public class TestHibernate8 { 6 public static void main(String[] args) { 7 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 8 Session session = sessionFactory.openSession(); 9 session.beginTransaction(); 10 //模糊查询 11 String name="iPhone"; 12 //标准sql的使用 13 String sql="select * from product_ p where p.name like ‘%" name "%‘"; 14 Query query= session.createSQLQuery(sql); 15 List<Object[]> list = query.list(); 16 for (Object[] objects : list) { 17 for (Object object : objects) { 18 System.out.print(object "t"); 19 } 20 System.out.println(); 21 } 22 //提交时事务 23 session.getTransaction().commit(); 24 //关闭 25 session.close(); 26 sessionFactory.close(); 27 } 28 }
结果: