Spring3开发实战 之 第四章:对JDBC和ORM的支持(三)

2014-11-24 08:36:46 · 作者: · 浏览: 6
复制到剪贴板打印





oracle.jdbc.driver.OracleDriver


jdbc:oracle:thin:@localhost:1521:orcl

test


配置文件如下:

java代码:
查看复制到剪贴板打印



cn/javass/Spring3/h3/UserModel.hbm.xml





org.hibernate.dialect.Oracle8iDialect

true



客户端文件如下:

java代码:
查看复制到剪贴板打印
public static void main(String[] args)throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"applicationContext-h3.xml"});
Api api = (Api)context.getBean("api");
UserModel um = new UserModel();
um.setUuid("test1");
um.setName("test1");
api.create(um);
}
前面的演示是更新操作,那么查询怎么做呢?如下:

java代码:
查看复制到剪贴板打印
List list = ht.find("select o from UserModel o");
要传入参数怎么做呢?如下:

java代码:
查看复制到剪贴板打印
Object params[] = new Object[1];
params[0] = "test1";
List list = ht.find("select o from UserModel o where o.uuid= ",params);
要传入命名参数怎么做呢?如下:

java代码:
查看复制到剪贴板打印
Object params[] = new Object[1];
params[0] = "test1";
String names[] = new String[1];
names[0] = "uuid";
List list = ht.findByNamedParam("select o from UserModel o where o.uuid=:uuid",names,params);
如果需要使用Hibernate的Query接口,该怎么做呢?如下:

java代码:
查看复制到剪贴板打印
HibernateCallback hcb =new HibernateCallback(){
public Object doInHibernate(Session session)throws HibernateException, SQLException {
Query q = session.createQuery("select o from UserModel o where o.uuid=:uuid");
q.setString("uuid", um.getUuid());
return q.list(); www.2cto.com
}
};
Collection list = (Collection)ht.execute(hcb);
一个回调实现能够有效地在任何Hibernate数据访问中使用。HibernateTemplate 会确保当前Hibernate的 Session 对象的正确打开和关闭,并直接参与到事务管理中去。 Template实例不仅是线程安全的,同时它也是可重用的。因而他们可以作为外部对象的实例变量而被持有。
实现类改成如下:

java代码:
查看复制到剪贴板打印
public class Impl extends HibernateDaoSupport implements Api{
public Collection testQuery(){
List list = this.getHibernateTemplate().find("select o from UserModel o");
for(UserModel tempUm : list){
System.out.println("uuid=="+tempUm.getUuid()+",name="+tempUm.getName());
}
return list;
}
}
配置文件改成如下:

java代码:
查看复制到剪贴板打印



要想使用Session怎么办?如下:

java代码:
查看复制到剪贴板打印
Session session = getSession(getSessionFactory(), false);
通常将一个false作为参数(表示是否允许创建)传递到 getSession(..) 方法中进行调用。 此时,整个调用将在同一个事务内完成(它的整个生命周期由事务控制,避免了关闭返回的 Session 的需要)。
作者:jinnianshilongnian