本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7593709
建立时间:2006年5月29日




[Spring]Spring in Action 笔记(III) -- 在Spring下的Hibernate数据操作
软件技术

lhwork 发表于 2006/7/14 10:27:09

这次来看看使用Spring的Hibernate模板来操作数据, Spring提供了Hibernate的一层包装,使Hibernate使用起来更加方便,尤其是结合Hibernate Annotation时, 配置文件更少,维护更加简单. 下面来看看吧. 下面是一个测试数据实体类TestData.java 和前一篇提到的实体类一样,只不过用了Annotation注释.  package  test.orm.hibernate.model; import  javax.persistence.Basic; import  javax.persistence.Entity; import  javax.persistence.Id; import  javax.persistence.Table; @Entity @Table(name =  "test" ,schema =  "APP" ) public class  TestData {    private int  id;    private  String name;    public  TestData( int  id, String name) {      this .id = id;      this .name = name;    }    public  TestData() {}       @Id    public int  getId() {      return  id;    }    public void  setId( int  id) {      this .id = id;    }    @Basic    public  String getName() {      return  name;    }    public void  setName(String name) {      this .name = name;    } } 下面是测试Hibernate模板的类, TestHibernateTemplate.java package  test.orm.hibernate; import  java.sql.SQLException; import  org.hibernate.HibernateException; import  org.hibernate.Session; import  org.springframework.orm.hibernate3.HibernateCallback; import  org.springframework.orm.hibernate3.HibernateTemplate; import  test.orm.hibernate.model.TestData; public class  TestHibernateTemplate {    private  HibernateTemplate hibernateTemplate;       public  TestHibernateTemplate() {}    public  HibernateTemplate getHibernateTemplate() {      return  hibernateTemplate;    }    public void  setHibernateTemplate(HibernateTemplate hibernateTemplate) {      this .hibernateTemplate = hibernateTemplate;    }       //测试使用HibernateTemplate来操作数据    public  TestData getTestData( final int  id) {      return  (TestData) hibernateTemplate.execute( new  HibernateCallback() {        public  Object doInHibernate(Session s)  throws  HibernateException, SQLException {          // TODO Auto-generated method stub          return  s.get(TestData.class, id);        }             });    } //  上面查询数据的方法 使用了HibernateCallBack接口,对于这样简单的查询,可以使用下面由HibernateTemplate 提供的更简单的方法    public  TestData getTestData2( final int  id) {      return  (TestData) hibernateTemplate.get(TestData.class, id);    }    /* 如果上面的两处方法使用Load 方法的时, 抛出延迟加载属性异常, Spring管理Session的问题, 应该是Spring用完Session 然后就关闭了,     * 所以不可以延迟加载, 也就不可以使用load 方法了,,????? 为什么????*/       // 其他操作数据方法 如: 插入,修改.... 和使用Hibernate session 差不多, HibernateTemplate只是Session的包装 } 可以看到使用Hibernate模板来操作数据,是多么简单, 注意: 上面注释中,提到了在使用Load方法时候,会有问题, Session in view 时候使用load是不会出问题的, 这里Spring提供的方法应该是按照Hibernate的语义写的吧. 下面就是用来测试上面的类是否正常工作的测试类了.TestApp.java package  test.orm.hibernate; import  org.springframework.context.ApplicationContext; import  org.springframework.context.support.ClassPathXmlApplicationContext; import  test.jdbc.DatabaseUtils; import  test.orm.hibernate.model.TestData; public class  TestApp {    /**     *  @param  args     */    public static void  main(String[] args) {      // TODO Auto-generated method stub      DatabaseUtils dataUtils =  new  DatabaseUtils();      dataUtils.connect();      System.out.println( "Open database:!" );      ApplicationContext context =  new  ClassPathXmlApplicationContext( "test/orm/hibernate/spring-hibernate.xml" );           TestHibernateTemplate hibernateTemplate = (TestHibernateTemplate) context.getBean( "testDao" );           System.out.println( "name : "  );      TestData data = hibernateTemplate.getTestData( 9 );      System.out.println( "name : "  + data.getName());      data = hibernateTemplate.getTestData2( 3 );      System.out.println( "name 2: "  + data.getName());                dataUtils.disconnect();         } }   注意: 本测试中用到了上一篇使用到的DatabaseUtils.java 工具类来操作Derby数据库. 由 以上实例可以看出,在Spring中使用Hibernate,效率更高一些. 你不这样认为吗? 同时 Spring也提供了 JDO等其他一些数据操作框架的包装,使用上基本上 是一样的这里就不在详述了. 下一次我们来看看Spring的I18N处理,和自定义属性编辑器的实现.


阅读全文(1780) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.070 second(s), page refreshed 144763290 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号