Hibernate 自定义sql 01

我们一般在用到Hibernate写sql查询时,有的时候list 中的Object并不是已有的Model,所以一般我们会重新新建一个Model。

     方法一:在Dao层中编写。Spring框架支持持久层开发

public List<MyObj> getList(int rid, String name){      
         List<MyObj> list = new ArrayList();     
         Connection conn = null;      
         Statement cs = null;      
         ResultSet rs = null;      
         try{           
              conn = 
       SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();           
                 String sql = "...";           
                 cs = conn.createStatement();           
                 rs = cs.executeQuery(sql);          
                 int orderIndex = 1;           
                 while(rs.next){              
                 MyObj obj = new MyObj(orderIndex);              
                 obj.setCode(rs.getFloat("code"));              
                 obj.setName(rs.getName("name"));     
                 ....
                 orderIndex++;
                 list.add(obj);    
              }                 
              if(rs!=null){
                  rs.close();
              }   
              if(cs!=null){
                   cs.close();
              }
          }catch (SQLException e) {
	log.error("call package_statistics.statistics_subject1错误!",e);
          } finally {
	if (rs != null)
	try {
                     rs.close();
	} catch (Exception e) {
	}
	if (cs != null)
	try {
	     cs.close();
	} catch (Exception e) {
	}
	try {
	     if (conn != null) {
	           conn.close();
	     }
	} catch (Exception e) {
	}
       }
}

 方法二、在Dao

public List<TMember> infoListByTMember(String sql) {
		List<TMember> list = new ArrayList<TMember>();
		Session session = null;
		Transaction t = null;
		try {
			session = getSessionFactory().openSession();
			t = session.beginTransaction();
			SQLQuery query = session.createSQLQuery(sql);
			// 1、将查询结果转换成List<Map<字段名,字段值>>
			query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
			// 2、将结果转换成指定的bean List<你的指定javaBean>
			query.setResultTransformer(Transformers.aliasToBean(TMember.class));
			list = query.list();
			t.commit();
		} catch (Exception e) {
			e.printStackTrace();
			t.rollback();
		} finally {
			t = null;
			session.close();
		}
		return list;
	}

    

    

原文地址:https://www.cnblogs.com/GenghisKhan/p/2342696.html