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
)