Hibernate执行Sql

package com.hib.sql.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers;
import org.hibernate.type.Type;

import com.hib.sql.model.HibSqlBean;
import com.hib.sql.model.Students;
import com.hib.sql.model.Subjects;
import com.hib.sql.sessionFactory.HibernateSessionFactory;

/**
 * @ClassName: HibSqkService
 * @Description: 
 * @author zhangl
 * @date 2010-12-28 下午02:56:25
 * @version V1.0
 */
public class HibSqlDao {

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
//			testHibSqlObject();
//			testHibSqlOne();
//			testHibSqlTwo();
			testHibSqlCus();
		}catch(Exception e){
			e.printStackTrace();
			//...
		}
	}
	

	/**
	 * 
	 * 结果:
studentsId=4||subjectsId=4||studentsName=Helly||studentsAge=22||subjectsName=语文||subjectsRemark=备注
studentsId=4||subjectsId=14||studentsName=Helly||studentsAge=22||subjectsName=政治||subjectsRemark=备注
studentsId=7||subjectsId=17||studentsName=Micy||studentsAge=22||subjectsName=物理||subjectsRemark=备注
studentsId=7||subjectsId=7||studentsName=Micy||studentsAge=22||subjectsName=语文||subjectsRemark=备注
	 */
	public static void testHibSqlCus() throws Exception{
		String sql = " select sb.subjects_id as subjectsId, sb.subjects_name as subjectsName, " +
					" sb.subjects_remark as subjectsRemark, st.students_id as studentsId, " +
					" st.students_name as studentsName, st.students_age as studentsAge " +
				"  from subjects sb, students st  " +
				" where sb.students_id = st.students_id " +
					" and (st.students_name = ? or st.students_name = ?) ";
		List<Class> listClass = new ArrayList<Class>();
		listClass.add(Subjects.class);
		listClass.add(Students.class);
		Collection<String> parameters = new ArrayList<String>();
		parameters.add("Helly");
		parameters.add("Micy");
		Map<String, Type> scalars = new HashMap<String, Type>();
		scalars.put("subjectsId", Hibernate.LONG);
		scalars.put("subjectsName", Hibernate.STRING);
		scalars.put("subjectsRemark", Hibernate.STRING);
		scalars.put("studentsId", Hibernate.LONG);
		scalars.put("studentsName", Hibernate.STRING);
		scalars.put("studentsAge", Hibernate.LONG);
		List<HibSqlBean> list = hibSqlCus(sql, parameters.toArray(), HibSqlBean.class, scalars);
		System.out.println(sql);
		for(HibSqlBean hb: list){
			System.out.println(hb.toString());
		}
	}
	
	public static <T> List<T> hibSqlCus(String sql, Object[] parameters, Class<T> resultClass,
			Map<String, Type> scalars)
		throws Exception{
		Session session = HibernateSessionFactory.getSession();
		SQLQuery query = session.createSQLQuery(sql);
		ResultTransformer rsTransformer = Transformers.aliasToBean(resultClass);
		query.setResultTransformer(rsTransformer);
		if(scalars != null){
			for(Entry<String, Type> entry: scalars.entrySet()){
				query.addScalar(entry.getKey(), entry.getValue());
			}
		}
		if(parameters != null && parameters.length > 0){
			for(int i = 0; i < parameters.length; i ++){
				query.setParameter(i, parameters[i]);
			}
		}
		return (List<T>)query.list();
	}
	
	
	
	
	/**
	 * 
subjects.subjects_name=语文||students.students_name=Helly
subjects.subjects_name=政治||students.students_name=Helly
subjects.subjects_name=物理||students.students_name=Micy
subjects.subjects_name=语文||students.students_name=Micy
	 * @throws Exception
	 */
	public static void testHibSqlTwo() throws Exception{
		String sql = " select sb.*, st.* from subjects sb, students st  " +
				" where sb.students_id = st.students_id " +
				" and (st.students_name = ? or st.students_name = ?) ";
		List<Class> listClass = new ArrayList<Class>();
		listClass.add(Subjects.class);
		listClass.add(Students.class);
		Collection<String> parameters = new ArrayList<String>();
		parameters.add("Helly");
		parameters.add("Micy");
		List list = hibSql(sql, parameters.toArray(), listClass);
		System.out.println(sql);
		for(Object o: list){
			Object[] obj = (Object[])o;
			Subjects sb = (Subjects)obj[0];
			Students st = (Students)obj[1];
			System.out.println("subjects.subjects_name="+sb.getSubjectsName()+"||"
					+"students.students_name="+st.getStudentsName());
		}
	}
	/**
	 * 结果:
subjects.subjects_name=化学
subjects.subjects_name=政治
subjects.subjects_name=历史
subjects.subjects_name=物理
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static void testHibSqlOne() throws Exception{
		String sql = " select * from subjects ";
		List<Class> listClass = new ArrayList<Class>();
		listClass.add(Subjects.class);
		List<Subjects> list = hibSql(sql, null, listClass);
		for(Subjects mh: list){
			System.out.println("subjects.subjects_name="+mh.getSubjectsName());
		}
	}
	
	/**
	 * 返回对象组成的List
	 * @param sql
	 * @param parameters
	 * @param listClass
	 * @return
	 * @throws Exception
	 */
	public static List hibSql(String sql, Object[] parameters, List<Class> listClass)
		throws Exception{
		Session session = HibernateSessionFactory.getSession();
		SQLQuery query = session.createSQLQuery(sql);
		for(Class c: listClass){
			query.addEntity(c);
		}
		if(parameters != null && parameters.length > 0){
			for(int i = 0; i < parameters.length; i ++){
				query.setParameter(i, parameters[i]);
			}
		}
		return query.list();
	}
	
	/**
	 * 
	 * @throws Exception
	 * 
subjects.students_name=语文||students.students_name=Tom
subjects.students_name=数学||students.students_name=Tom
subjects.students_name=化学||students.students_name=Tom
	 */
	public static void testHibSqlObject() throws Exception{
		String sql = " select * from subjects sb, students st " +
			" where sb.students_id = st.students_id and st.students_id = ?";
		Collection<Object> parameters = new ArrayList<Object>();
		Long num = 1L;
		parameters.add(num);
		List list = hibSqlObject(sql, parameters.toArray());
		for(Object o: list){
			Object[] obj = (Object[])o;
			System.out.println("subjects.students_name="+obj[1]+"||students.students_name="+obj[5]);
		}
	}
	/**
	 * 返回Object[]组成的List
	 * @param sql
	 * @param parameters
	 * @return
	 * @throws Exception
	 */
	public static List hibSqlObject(String sql, Object[] parameters)
		throws Exception{
		Session session = HibernateSessionFactory.getSession();
		SQLQuery query = session.createSQLQuery(sql);
		if(parameters != null && parameters.length > 0){
			for(int i = 0; i < parameters.length; i ++){
				query.setParameter(i, parameters[i]);
			}
		}
		return query.list();
	}
}

 

 

create table STUDENTS
(
  STUDENTS_ID   NUMBER not null,
  STUDENTS_NAME VARCHAR2(30),
  STUDENTS_AGE  NUMBER
)


create table SUBJECTS
(
  SUBJECTS_ID     NUMBER not null,
  SUBJECTS_NAME   VARCHAR2(30),
  SUBJECTS_REMARK VARCHAR2(30),
  STUDENTS_ID     NUMBER
)

 

Hibernate是一个开源的Java持久化框架,它提供了对象-关系映射(ORM)的功能,可以方便地将Java对象映射到关系数据库中的表。通过Hibernate,我们可以使用面向对象的方式来操作数据库,而不需要编写大量的SQL语句。 在Hibernate中,我们可以使用HQL(Hibernate Query Language)来执行数据库操作,它类似于SQL语言,但更加面向对象。HQL允许我们使用实体类和属性名称来进行查询和更新操作。 除了HQL,Hibernate也支持使用本地SQL语句进行数据库操作。我们可以使用Hibernate提供的SQL查询功能,执行原生的SQL语句并获取结果。 下面是一个使用Hibernate执行SQL查询的示例: ```java // 创建Session对象 Session session = HibernateUtil.getSessionFactory().openSession(); // 创建原生SQL查询 String sqlQuery = "SELECT * FROM your_table"; SQLQuery query = session.createSQLQuery(sqlQuery); // 获取结果集 List<Object[]> rows = query.list(); for (Object[] row : rows) { // 处理结果集 // row[0]代表第一个列的值,row[1]代表第二个列的值,依此类推 } // 关闭Session session.close(); ``` 在上面的示例中,我们首先创建了一个Session对象,然后使用`createSQLQuery()`方法创建了一个原生SQL查询对象。我们可以通过调用`list()`方法执行查询并获取结果集。最后,记得关闭Session对象。 需要注意的是,使用原生SQL查询可能会使你的代码与特定的数据库厂商耦合,不够跨数据库。在实际开发中,建议尽量使用Hibernate提供的HQL查询,它更加灵活和可移植。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值