`
stone_1231
  • 浏览: 39420 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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执行原生sql语句

    "hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...

    hibernate 执行原生sql的几种方式

    在Java的持久化框架Hibernate中,执行原生SQL(Native SQL)是常见需求,尤其是在处理特定数据库特性或者优化性能时。本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1....

    hibernate实现动态SQL查询

    // 使用Hibernate执行SQL Session session = sessionFactory.openSession(); SQLQuery query = session.createSQLQuery(sql); // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2",...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    spring+hibernate,自己封装了原生sql的处理,模仿mybatis使用

    3. 在Service层中调用解析器方法,执行相应的SQL操作。 4. 结合Spring的事务管理,确保数据操作的一致性和原子性。 从"只有controller和service层"来看,这个项目可能没有涉及视图层,因此可能是一个RESTful API...

    spring hibernate执行存储过程的例子

    本文将深入探讨如何在Spring和Hibernate中执行存储过程,并基于描述中的例子进行解析。 首先,让我们了解Spring如何执行存储过程。Spring通过JdbcTemplate或NamedParameterJdbcTemplate提供存储过程的调用。...

    hibernate执行外部sql

    通常,Hibernate以其对象关系映射(ORM)能力著称,允许开发者通过Java对象来操作数据库,但有时我们仍需直接执行SQL,特别是在处理复杂查询或者批量数据操作时。以下是如何利用Hibernate实现这一功能的方法: 1. *...

    hibernate显示不带?的完整sql

    这些配置会捕获Hibernate执行的SQL语句及其参数绑定,从而在控制台看到完整的、参数化的SQL。 在开发环境中,这样的配置非常有用,因为它能帮助我们理解查询行为,定位潜在的性能瓶颈,或者检查数据是否按照预期...

    使用hibernate对sqlserver 2005进行增删改查

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...

    Hibernate中Sql语句

    给定代码示例中的`ProductBoxLogDaoImpl`类展示了如何在Hibernate中执行原生SQL查询,并将结果转换为Java对象列表。 ##### 1. 创建SQLQuery对象 ```java SQLQuery query1 = session.createSQLQuery(sql); ``` 这里...

    hibernate sql案例

    在使用Hibernate执行SQL查询时,我们通常有以下几种方式: 1. HQL(Hibernate Query Language):这是Hibernate专有的查询语言,语法类似于SQL,但面向对象。例如,我们可以用`from Customer`来获取所有Customer...

    简单的新闻发布系统(Struts+hibernate+SQL Server2000)

    1. 新闻发布:管理员通过后台界面输入新闻标题、内容、分类等信息,点击发布后,数据通过Struts提交到Hibernate,由Hibernate执行SQL语句将数据存入数据库。 2. 新闻管理:管理员可以查看、编辑和删除已发布的新闻...

    hibernate 连接sqlserver2000

    标题 "Hibernate 连接 SQL Server 2000" 涉及到的是在Java开发中使用Hibernate ORM框架与较旧版本的SQL Server数据库(即SQL Server 2000)进行交互的知识点。以下是对这个主题的详细阐述: Hibernate是Java领域中...

    Hibernate生产SQL语句

    Hibernate会根据这些查询语句动态生成对应的SQL,并执行在数据库上。这极大地简化了数据库操作,同时保持了代码的可读性和可维护性。 模仿Hibernate生成SQL语句,我们可以从以下几个方面入手: 1. **实体类...

    Hibernate+sqlserver2000分页

    这通常涉及到在HQL中嵌入SQL片段,或者使用`createSQLQuery`方法直接执行SQL查询。同时,别忘了映射查询结果到对应的Java对象。 4. **max分页**: 提到的`max分页`可能是指在某些场景下,我们需要知道总共有多少页...

    Spring集成Hibernate写SQLServer

    本文将深入探讨如何将Spring与Hibernate整合,以便在SQL Server数据库上执行SQL操作。 首先,Spring框架是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得应用...

    Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法

    然而,在使用Hibernate执行SQL查询时,如果查询的目标表中存在char类型的字段,Hibernate有时会将该字段的数据映射成一个字符,而非完整的字符串。这主要是由于Hibernate默认的映射机制所导致的,即对于char类型的...

    hibernate数据库通用SQL代码

    在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者可以更专注于业务逻辑而不是底层的SQL操作。本文将详细讲解如何使用Hibernate来编写通用的数据库操作代码,包括插入...

    hibernate将本地SQL查询结果封装成对象

    当我们需要执行一些特殊的、复杂的或者非标准的SQL查询时, Hibernate的本地SQL查询功能就显得尤为实用。本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指...

Global site tag (gtag.js) - Google Analytics