Hibernate之SQL检索(查询)方式

HQL和QBC是通过Hibernate生成标准的sql语句,这两种检索方式是跨平台的。

但是有些情况下,需要根据数据库地城方言生成sql语句,这个时候就用到了SQL检索方式,

与HQL不同的是,通过session的createSQLQuery()来创建query对象。

对于经常写sql的人,比较习惯,不用像HQL感觉像写半截sql。

实例1:

package com.lanhuigu.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.lanhuigu.hibernate.entity.Customer;

public class TestHibernateJianSuo {
	public static void main(String[] args) throws Exception{
		Configuration cfg = new Configuration().configure();
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction tr = session.beginTransaction();
		//1.创建Query对象
		Query query = session.createSQLQuery("select c.* from CUSTOMERS c where c.name =:v_name")
				.addEntity(Customer.class);
		//2.命名参数设置查询条件
		query.setString("v_name", "test");
		//2.执行SQL
		List<Customer> list = query.list();
		//3.输出结果
		for (int i = 0;i<list.size();i++) {
			Customer customer = list.get(i);
			System.out.println(customer.getName());
		}
		//4.事务提交
		tr.commit();
		//5.关闭session
		session.close();
	}
}

控制台执行结果:

Hibernate: select c.* from CUSTOMERS c where c.name =?
test

与HQL比较:

(1)HQL语句的FROM后面跟实例对象名(Customer),而SQL检索方式FROM后面跟数据库表名(CUSTOMERS)

(2)HQL返回结果为一个含有持久化对象的集合,而SQL则不同,可以指定返回结果的类型,以上实例指定返回结果为

持久化对象集合。

你可能感兴趣的:(query,createSQLQuery,addentity,setString)