@SuppressWarnings("unchecked")
public static void findBySQLQuery()
{
//利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。
//查询结果返回的是一个Object的数组
String sql = "select id,name from banji";
SQLQuery q = this.getSession().createSQLQuery(sql);
//通过addScalar()方法设置返回数据的类型。如:
q.addScalar("id", Hibernate.LONG);
q.addScalar("name", Hibernate.STRING);
List<Object[]> list = q.list();
for(int i=0; i<list.size(); i++)
{
Object[] objs = list.get(i);
System.out.println( (Long)objs[0]);
System.out.println( (String)objs[1]);
}
}
//返回SQL查询的持久对象1(SQLQuery. addEntity(Class arg0))
@SuppressWarnings("unchecked")
public static void findBySQLQuery()
{
// Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,
// 还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:
String sql = "select id, bankName from Bank";
SQLQuery q = this.getSession().createSQLQuery(sql);
q.addEntity(BankInfo.class);
List<BankInfo> list = q.list();
for(int i=0; i<list.size(); i++)
{
BankInfo objs = list.get(i);
System.out.println( objs.getId());
System.out.println( objs.getBankName());
}
}
//返回SQL查询的持久对象
//方式2:使用大括号指定查询的字段,然后通过SQLQuery对象的addEntity()方法关联SQL中的别名和持久化类
//确定要返回的List对象中的每个元素类型。如:
@SuppressWarnings("unchecked")
public static void findBySQLQuery()
{
String sql = "select {a.*} from Bank b, ZP_KH_BANK a where b.ID=a.bankId";
SQLQuery q = this.getSession().createSQLQuery(sql);
q.addEntity("a", Bank.class);
List<Bank> list = q.list();
for(int i=0; i<list.size(); i++)
{
Bank objs = list.get(i);
System.out.println( objs.getId());
System.out.println( objs.getName());
}
}
//返回SQL查询的持久对象
//方式3:同时使用SQLQuery对象的addScalar()方法和Transformers对象的aliasToBean()方法关联数据库的表与持久化类
//确定返回记录的各个字段与持久化类属性的对象对应关系。如:
@SuppressWarnings("unchecked")
public static void findBySQLQuery()
{
String sql = "select a.id, a.name from Bank b, ZP_KH_BANK a where b.ID=a.bankId";
SQLQuery q = this.getSession().createSQLQuery(sql);
q.addScalar("id", Hibernate.INTEGER);
q.addScalar("name", Hibernate.STRING);
q.setResultTransformer(Transformers.aliasToBean(Bank.class));
List<Bank> list = q.list();
for(int i=0; i<list.size(); i++)
{
Bank objs = list.get(i);
System.out.println( objs.getId());
System.out.println( objs.getName());
}
}
//返回SQL查询的Map
//方式3:同时使用SQLQuery对象的addScalar()方法和Transformers对象的Transformers.ALIAS_TO_ENTITY_MAP
@SuppressWarnings("unchecked")
public static void findBySQLQuery()
{
String sql = "select a.id, a.name from Bank b, ZP_KH_BANK a where b.ID=a.bankId";
SQLQuery q = this.getSession().createSQLQuery(sql);
q.addScalar("id", Hibernate.INTEGER);
q.addScalar("name", Hibernate.STRING);
q.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map> list = q.list();
for(int i=0; i<list.size(); i++)
{
Map objs = list.get(i);
System.out.println( objs.get("id"));
System.out.println( objs.get("name"));
}
}
|
import org.hibernate.jdbc.Work;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
public Map<String,Integer> findBanJi()
{
final Map<String,Integer> map = new HashMap<String,Integer>();
//调用Session的doWork方法在Hibernate中直接使用SQL
this.getSession().doWork(new Work(){
public void execute(Connection arg0) throws SQLException {
String sql = "select id, name from banji";
Statement stmt = arg0.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
map.put(rs.getString("name"), rs.getInt("id"));
}
rs.close();
stmt.close();
}});
return map;
}
|