Hibernate HQL,Criteria和SQL

LetonLIU 2019-12-23

Hibernate HQL和Criteria

HQL:HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL 更接近于面向对象的思维方式。

/**
 * ---------HQL查询根据name进行模糊查询--------
 
 */
public class TestHibernate6 {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        //模糊查询
        String name="iPhone";
        //HQL查询SQL语句
        Query query = session.createQuery("from Product p where p.name like ?");
        query.setString(0,"%"+name+"%");
        List<Product> productList = query.list();
        for (Product product : productList) {
            System.out.println(product);
        }
        //提交时事务
        session.getTransaction().commit();
        //关闭
        session.close();
        sessionFactory.close();
    }

}

Criteria:与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹

/**
 * ---------Criteria查询根据name进行模糊查询--------
 * @author fereli
 */
public class TestHibernate7 {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        //模糊查询
        String name="iPhone";
        //Criteria的使用
        Criteria criteria = session.createCriteria(Product.class);
        criteria.add(Restrictions.like("name","%"+name+"%"));
        List<Product> productList = criteria.list();
        for (Product product : productList) {
            System.out.println(product);
        }
        //提交时事务
        session.getTransaction().commit();
        //关闭
        session.close();
        sessionFactory.close();
    }

}

两个结果一样:

Hibernate HQL,Criteria和SQL

SQL:因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。 不能保证其查询结果能够装进一个Product对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。

/**
 * ---------标注sql查询根据name进行模糊查询--------
 * @author fereli
 */
public class TestHibernate8 {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        //模糊查询
        String name="iPhone";
        //标准sql的使用
        String sql="select * from product_ p where p.name like ‘%"+name+"%‘";
        Query query= session.createSQLQuery(sql);
        List<Object[]> list = query.list();
        for (Object[] objects : list) {
            for (Object object : objects) {
                System.out.print(object+"\t");
            }
            System.out.println();
        }
        //提交时事务
        session.getTransaction().commit();
        //关闭
        session.close();
        sessionFactory.close();
    }
}

结果:

Hibernate HQL,Criteria和SQL

相关推荐