<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ryan's Java world!

    something about Java and opensource!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

    ?

    Spring in Action 筆記(III)

    By: icess blog: http://blog.matrix.org.cn/page/icess

    這次來看看使用Spring的Hibernate模板來操作數(shù)據(jù), Spring提供了Hibernate的一層包裝,使Hibernate使用起來更加方便,尤其是結(jié)合Hibernate Annotation時(shí), 配置文件更少,維護(hù)更加簡(jiǎn)單. 下面來看看吧.

    下面是一個(gè)測(cè)試數(shù)據(jù)實(shí)體類TestData.java 和前一篇提到的實(shí)體類一樣,只不過用了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;
    ?? }
    }

    下面是測(cè)試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;
    ?? }
    ??
    ?? //測(cè)試使用HibernateTemplate來操作數(shù)據(jù)
    ?? 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);
    ?????? }
    ??????
    ???? });
    ?? }
    //??上面查詢數(shù)據(jù)的方法?使用了HibernateCallBack接口,對(duì)于這樣簡(jiǎn)單的查詢,可以使用下面由HibernateTemplate?提供的更簡(jiǎn)單的方法
    ?? public? TestData?getTestData2( final?int? id)?{
    ???? return? (TestData)?hibernateTemplate.get(TestData.class,?id);
    ?? }
    ?? /*?如果上面的兩處方法使用Load?方法的時(shí),?拋出延遲加載屬性異常,?Spring管理Session的問題,?應(yīng)該是Spring用完Session?然后就關(guān)閉了,
    ??? *?所以不可以延遲加載,?也就不可以使用load?方法了,,??????為什么????*/
    ??
    ?? //?其他操作數(shù)據(jù)方法?如:?插入,修改....?和使用Hibernate?session?差不多,?HibernateTemplate只是Session的包裝
    }

    可以看到使用Hibernate模板來操作數(shù)據(jù),是多么簡(jiǎn)單,

    注意: 上面注釋中,提到了在使用Load方法時(shí)候,會(huì)有問題, Session in view 時(shí)候使用load是不會(huì)出問題的, 這里Spring提供的方法應(yīng)該是按照Hibernate的語義寫的吧.

    下面就是用來測(cè)試上面的類是否正常工作的測(cè)試類了.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();
    ????
    ?? }

    }

     

    注意: 本測(cè)試中用到了上一篇使用到的DatabaseUtils.java 工具類來操作Derby數(shù)據(jù)庫.

    以上實(shí)例可以看出,在Spring中使用Hibernate,效率更高一些. 你不這樣認(rèn)為嗎?

    同時(shí) Spring也提供了 JDO等其他一些數(shù)據(jù)操作框架的包裝,使用上基本上?是一樣的這里就不在詳述了.

    下一次我們來看看Spring的I18N處理,和自定義屬性編輯器的實(shí)現(xiàn).

    posted on 2006-05-27 11:01 冰雨 閱讀(1901) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

    JSF中文技術(shù)文摘
    主站蜘蛛池模板: 最新欧洲大片免费在线| 亚洲精品美女在线观看播放| 亚洲国产精品免费在线观看| eeuss影院ss奇兵免费com| 亚洲熟妇无码AV| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲伊人久久精品影院| 亚洲av日韩av欧v在线天堂| 成年女人视频网站免费m| 在线免费观看国产| 永久免费av无码网站yy| 久久精品成人免费观看97| 妇女自拍偷自拍亚洲精品| 亚洲熟妇AV日韩熟妇在线| 亚洲色图黄色小说| 亚洲国产婷婷六月丁香| 91麻豆国产自产在线观看亚洲| 成年女人永久免费观看片| 毛片免费全部免费观看| 免费h片在线观看网址最新| 久久不见久久见免费视频7| 精品亚洲永久免费精品| 中文字幕无码毛片免费看| 老司机精品免费视频| 2022免费国产精品福利在线| 一级毛片**免费看试看20分钟| 免费看一级一级人妻片| 真正全免费视频a毛片| 日本一区二区三区在线视频观看免费 | 亚洲国产人成精品| 国产成人精品免费视频软件| 青青草国产免费久久久下载| 在线观看免费为成年视频| 免费看香港一级毛片| 免费国产成人午夜电影| 日韩亚洲精品福利| 国产亚洲色视频在线| 久久国产亚洲观看| 亚洲午夜精品一区二区| 亚洲国产成人久久综合一区| 亚洲日韩AV无码一区二区三区人|