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

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

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

    JAVA涂鴉
    關(guān)于JAVA的點點滴滴
    posts - 50,  comments - 689,  trackbacks - 0

    前一篇文章 (struts+spring+hibernateweb應(yīng)用<>? 架構(gòu)搭建) 讓我們打好了架子,接下來就來編寫代碼了。在編碼之前,我們需要先自行了解 strust,spring,hibernate 基礎(chǔ)知識,后面的文章將不會過多的介紹這些框架的基礎(chǔ)知識。整個項目由 Dao,Services,Web 三層組成, Dao 層主要通過 hibernate 來操作數(shù)據(jù)庫, Service 層主要體現(xiàn)了業(yè)務(wù),事務(wù)的處理, Web 層由 struts 來控制。整個項目的控制交由 spring 管理。

    ?

    現(xiàn)在的這個小項目除了完成基本的添刪改查,還有一個簡單的分頁功能。這個分頁功能不僅前臺分頁,而且在后臺數(shù)據(jù)庫也進(jìn)行了分頁處理。

    ?

    現(xiàn)在就來編寫 Dao 層的代碼。

    首先寫好 pojo 的代碼:

    com.game.products.model 中新建 products.hbm.xml 類,代碼如下:

    <? xml?version="1.0"?encoding="GB2312" ?>
    <! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
    >

    < hibernate-mapping >
    ?????
    < class? name ="com.game.products.model.Products" ?table ="products" ? >
    ?????????
    < id? name ="gameId" ?type ="string" >
    ????????????
    < column? name ="game_id" ?length ="5" ? />
    ????????????
    < generator? class ="assigned" ? />
    ????????
    </ id >
    ????????
    < property? name ="gameNameCn" ?type ="string" >
    ????????????
    < column? name ="game_name_cn" ?length ="100" ? />
    ????????
    </ property >
    ?????????
    < property? name ="gameNameEn" ?type ="string" >
    ????????????
    < column? name ="game_name_en" ?length ="100" ? />
    ????????
    </ property >
    ????????
    < property? name ="gameCapacity" ?type ="string" >
    ????????????
    < column? name ="game_capacity" ?length ="4" ? />
    ????????
    </ property >
    ?????????
    < property? name ="gameVersion" ?type ="string" >
    ????????????
    < column? name ="game_version" ?length ="4" ? />
    ????????
    </ property >
    ??????????
    < property? name ="gameMedia" ?type ="string" >
    ????????????
    < column? name ="game_media" ?length ="4" ? />
    ????????
    </ property >
    ????????
    < property? name ="gameCopyright" ?type ="string" >
    ????????????
    < column? name ="game_copyright" ?length ="4" ? />
    ????????
    </ property >
    ????????
    < property? name ="gamePrice" ?type ="string" >
    ????????????
    < column? name ="game_price" ?length ="4" ? />
    ????????
    </ property > ?
    ?????????
    < property? name ="gameContent" ?type ="string" >
    ????????????
    < column? name ="game_content" ?length ="100" ? />
    ????????
    </ property >
    ?????
    </ class >
    </ hibernate-mapping >


    ?

    注意這里的 ID 不是數(shù)據(jù)庫自動生成的,而是根據(jù)需要由程序生成,一般項目中的主鍵 ID 都是采取這種方式。

    然后在這個包中再新建 Products 類,代碼如下:

    package ?com.game.products.model;

    public ? class ?Products? {
    ????
    // ????Fields?
    ???? private ?String?gameId; // 編號
    ???? private ?String?gameNameCn; // 中文名稱
    ???? private ?String?gameNameEn; // 英文名稱
    ???? private ?String?gameCapacity; // 碟數(shù)
    ???? private ?String?gameVersion; // 版本
    ???? private ?String?gameMedia; // 介質(zhì)
    ???? private ?String?gameCopyright; // 版權(quán)
    ???? private ?String?gamePrice; // 價格
    ???? private ?String?gameContent; // 攻略
    ????
    ????
    // ????Constructors
    ???? public ?Products() {}
    ????
    ????
    // ????Property?accessors
    ???? public ?String?getGameCapacity()? {
    ????????
    return ?gameCapacity;
    ????}


    ????
    public ? void ?setGameCapacity(String?gameCapacity)? {
    ????????
    this .gameCapacity? = ?gameCapacity;
    ????}


    ????
    public ?String?getGameId()? {
    ????????
    return ?gameId;
    ????}


    ????
    public ? void ?setGameId(String?gameId)? {
    ????????
    this .gameId? = ?gameId;
    ????}


    ????
    public ?String?getGameNameCn()? {
    ????????
    return ?gameNameCn;
    ????}


    ????
    public ? void ?setGameNameCn(String?gameNameCn)? {
    ????????
    this .gameNameCn? = ?gameNameCn;
    ????}


    ????
    public ?String?getGameNameEn()? {
    ????????
    return ?gameNameEn;
    ????}


    ????
    public ? void ?setGameNameEn(String?gameNameEn)? {
    ????????
    this .gameNameEn? = ?gameNameEn;
    ????}


    ????
    public ?String?getGameVersion()? {
    ????????
    return ?gameVersion;
    ????}


    ????
    public ? void ?setGameVersion(String?gameVersion)? {
    ????????
    this .gameVersion? = ?gameVersion;
    ????}


    ????
    public ?String?getGameMedia()? {
    ????????
    return ?gameMedia;
    ????}


    ????
    public ? void ?setGameMedia(String?gameMedia)? {
    ????????
    this .gameMedia? = ?gameMedia;
    ????}


    ????
    public ?String?getGameCopyright()? {
    ????????
    return ?gameCopyright;
    ????}


    ????
    public ? void ?setGameCopyright(String?gameCopyright)? {
    ????????
    this .gameCopyright? = ?gameCopyright;
    ????}


    ????
    public ?String?getGameContent()? {
    ????????
    return ?gameContent;
    ????}


    ????
    public ? void ?setGameContent(String?gameContent)? {
    ????????
    this .gameContent? = ?gameContent;
    ????}


    ????
    public ?String?getGamePrice()? {
    ????????
    return ?gamePrice;
    ????}


    ????
    public ? void ?setGamePrice(String?gamePrice)? {
    ????????
    this .gamePrice? = ?gamePrice;
    ????}


    }


    ?

    需要注意的是,我這里都是采用了 string 類型,因為在項目中傳遞數(shù)據(jù),用 string 類型最為方便,同時也便于代碼的編寫。只是在前臺需要編寫驗證代碼,免得有字符數(shù)據(jù)插入整數(shù)字段而造成數(shù)據(jù)庫異常。

    ?

    com.game.products.dao.iface 包中新建ProductsDao接口。

    代碼如下所示:

    package ?com.game.products.dao.iface;

    import ?java.util.List;

    import ?com.game.products.model.Products;

    public ? interface ?ProductsDao? {
    ????List?getProducts();
    // 獲得所有記錄
    ????List?getProducts( int ?pageSize,? int ?startRow); // 獲得一段記錄
    ???? int ?getRows(); // 獲得總行數(shù)
    ???? int ?getRows(String?fieldname,String?value); // 獲得總行數(shù)
    ????List?queryProducts(String?fieldname,String?value); // 根據(jù)條件查詢的所有記錄
    ????List?queryProducts(String?fieldname,String?value, int ?pageSize,? int ?startRow); // 根據(jù)條件查詢的一段記錄
    ????Products?getProduct(String?gameId); // 根據(jù)ID獲得記錄
    ????String?getMaxID(); // 獲得最大ID值
    ???? void ?addProduct(Products?pd); // 添加記錄
    ???? void ?updateProductd(Products?pd); // 修改記錄
    ???? void ?deleteProduct(Products?pd); // 刪除記錄????
    }


    ?

    com.game.products.dao.hibernate包中新建繼承HibernateDaoSupportProductsMapDao類,并實現(xiàn)了ProductsDao接口。

    代碼如下:

    package ?com.game.products.dao.hibernate;

    import ?java.sql.SQLException;
    import ?java.util.Iterator;
    import ?java.util.List;

    import ?org.hibernate.HibernateException;
    import ?org.hibernate.Query;
    import ?org.hibernate.Session;
    import ?org.springframework.orm.hibernate3.HibernateCallback;
    import ?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import ?com.game.products.dao.iface.ProductsDao;
    import ?com.game.products.model.Products;


    /**
    ?*?
    @author ?cwf
    ?*
    ?
    */

    public ? class ?ProductsMapDao? extends ?HibernateDaoSupport? implements ?ProductsDao? {

    ????
    public ?ProductsMapDao() {}

    ????
    /**
    ?????*?函數(shù)說明:添加信息
    ?????*?參數(shù)說明:對象?
    ?????*?返回值:
    ?????
    */

    ????
    public ? void ?addProduct(Products?pd)? {
    ????????
    this .getHibernateTemplate().save(pd);
    ????}


    ????
    /**
    ?????*?函數(shù)說明:刪除信息
    ?????*?參數(shù)說明:?對象
    ?????*?返回值:
    ?????
    */

    ????
    public ? void ?deleteProduct(Products?pd)? {
    ????????
    this .getHibernateTemplate().delete(pd);
    ????}


    ????
    /**
    ?????*?函數(shù)說明:獲得所有的信息
    ?????*?參數(shù)說明:?
    ?????*?返回值:信息的集合
    ?????
    */

    ????
    public ?List?getProducts()? {
    ????????String?sql
    = " FROM?Products?ORDER?BY?gameNameCn " ;
    ????????
    return ? this .getHibernateTemplate().find(sql);
    ????}

    ????
    ????
    /**
    ?????*?函數(shù)說明:獲得總行數(shù)
    ?????*?參數(shù)說明:?
    ?????*?返回值:總行數(shù)
    ?????
    */

    ????
    public ? int ?getRows()? {
    ????????String?sql
    = " FROM?Products?ORDER?BY?gameNameCn " ;
    ????????List?list
    = this .getHibernateTemplate().find(sql);
    ????????
    return ?list.size();
    ????}

    ????
    ????
    /**
    ?????*?函數(shù)說明:獲得一段記錄信息
    ?????*?參數(shù)說明:?
    ?????*?返回值:信息的集合
    ?????
    */

    ????
    public ?List?getProducts( int ?pageSize,? int ?startRow)? throws ?HibernateException? {
    ????????
    final ? int ?pageSize1 = pageSize;
    ????????
    final ? int ?startRow1 = startRow;
    ????????
    return ? this .getHibernateTemplate().executeFind( new ?HibernateCallback() {

    ????????????
    public ?List?doInHibernate(Session?session)? throws ?HibernateException,?SQLException? {
    ????????????????Query?query
    = session.createQuery( " FROM?Products?ORDER?BY?gameNameCn " );
    ????????????????query.setFirstResult(startRow1);
    ????????????????query.setMaxResults(pageSize1);
    ????????????????
    return ?query.list();
    ????????????}

    ????????}
    );
    ????}


    ????
    /**
    ?????*?函數(shù)說明:獲得一條的信息
    ?????*?參數(shù)說明:?ID
    ?????*?返回值:對象
    ?????
    */

    ????
    public ?Products?getProduct(String?gameId)? {
    ????????
    return ?(Products) this .getHibernateTemplate().get(Products. class ,gameId);
    ????}


    ????
    /**
    ?????*?函數(shù)說明:獲得最大ID
    ?????*?參數(shù)說明:?
    ?????*?返回值:最大ID
    ?????
    */

    ????
    public ?String?getMaxID()? {
    ????????String?sql
    = " SELECT?MAX(gameId)+1?FROM?Products?? " ;
    ????????String?noStr?
    = ? null ;
    ????????List?ll?
    = ?(List)? this .getHibernateTemplate().find(sql);
    ????????Iterator?itr?
    = ?ll.iterator();
    ????????
    if ?(itr.hasNext())? {
    ????????????Object?noint?
    = ?itr.next();
    ????????????
    if (noint? == ? null ) {
    ????????????????noStr?
    = ? " 1 " ;????????????????
    ????????????}
    else {
    ????????????????noStr?
    = ?noint.toString();
    ????????????}

    ????????}

    ????????
    ????????
    if (noStr.length() == 1 ) {
    ????????????noStr
    = " 000 " + noStr;
    ????????}
    else ? if (noStr.length() == 2 ) {
    ????????????noStr
    = " 00 " + noStr;
    ????????}
    else ? if (noStr.length() == 3 ) {
    ????????????noStr
    = " 0 " + noStr;
    ????????}
    else {
    ????????????noStr
    = noStr;
    ????????}

    ????????
    return ?noStr;
    ????}


    ????
    /**
    ?????*?函數(shù)說明:修改信息
    ?????*?參數(shù)說明:?對象
    ?????*?返回值:
    ?????
    */

    ????
    public ? void ?updateProductd(Products?pd)? {
    ????????
    this .getHibernateTemplate().update(pd);
    ????}


    ????
    /**
    ?????*?函數(shù)說明:查詢的所有信息
    ?????*?參數(shù)說明:?集合
    ?????*?返回值:
    ?????
    */

    ????
    public ?List?queryProducts(String?fieldname,String?value)? {
    ????????System.out.println(
    " value:? " + value);
    ????????String?sql
    = " FROM?Products?where? " + fieldname + " ?like?'% " + value + " %' " + " ORDER?BY?gameNameCn " ;
    ????????
    return ? this .getHibernateTemplate().find(sql);
    ????}

    ????
    ????
    /**
    ?????*?函數(shù)說明:獲得總行數(shù)
    ?????*?參數(shù)說明:?
    ?????*?返回值:總行數(shù)
    ?????
    */

    ????
    public ? int ?getRows(String?fieldname,String?value)? {
    ????????String?sql
    = " FROM?Products?where? " + fieldname + " ?like?'% " + value + " %' " + " ORDER?BY?gameNameCn " ;
    ????????List?list
    = this .getHibernateTemplate().find(sql);
    ????????
    return ?list.size();
    ????}

    ????
    ????
    /**
    ?????*?函數(shù)說明:查詢的一段信息
    ?????*?參數(shù)說明:?集合
    ?????*?返回值:
    ?????
    */

    ????
    public ?List?queryProducts(String?fieldname,String?value, int ?pageSize,? int ?startRow)? {
    ????????
    final ? int ?pageSize1 = pageSize;
    ????????
    final ? int ?startRow1 = startRow;
    ????????
    final ?String?sql = " FROM?Products?where? " + fieldname + " ?like?'% " + value + " %' " + " ORDER?BY?gameNameCn " ;
    ????????
    return ? this .getHibernateTemplate().executeFind( new ?HibernateCallback() {

    ????????????
    public ?List?doInHibernate(Session?session)? throws ?HibernateException,?SQLException? {
    ????????????????Query?query
    = session.createQuery(sql);
    ????????????????query.setFirstResult(startRow1);
    ????????????????query.setMaxResults(pageSize1);
    ????????????????
    return ?query.list();
    ????????????}

    ????????}
    );
    ????}


    }



    ?

    com.game.bean.hibernate包中新建hibernate.cfg.xml,代碼如下:

    <? xml?version="1.0"?encoding="GB2312" ?>
    <! DOCTYPE?hibernate-configuration?PUBLIC
    ????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
    ????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
    >
    < hibernate-configuration >
    ????
    < session-factory >
    ????????
    < property? name ="dialect" > org.hibernate.dialect.SQLServerDialect </ property >
    ????????
    < property? name ="show_sql" > true </ property >

    ????????
    < mapping? resource ="com/game/products/model/products.hbm.xml" ></ mapping >
    ????
    </ session-factory >
    </ hibernate-configuration >


    ?

    至此,DAO層的代碼已經(jīng)編寫完成。下一篇,將編寫service層代碼。

    struts+spring+hibernate web 應(yīng)用 < > Service 層代碼編寫

    posted on 2007-03-13 13:57 千山鳥飛絕 閱讀(19808) 評論(11)  編輯  收藏 所屬分類: Web開發(fā)

    FeedBack:
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2007-03-13 16:16 | tornado
    支持一下,
    贊一個  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫[未登錄]
    2007-03-14 14:02 | 阿蜜果
    對異常的處理呢?
    這個問題我一直覺得頭大,沒找到我滿意的方法
    可是這個web應(yīng)用里面我好像根本沒見到對異常的處理哦。
    嘻嘻,寫得很詳細(xì),不錯,支持!  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2007-05-16 16:31 | 風(fēng)箏飛滿天
    你好,我對struts+spring+hibernate是初次接觸,看了你的例子,我就模仿你的文章寫了一個程序,可是在TOMCAT-5.5下運行,卻報告錯誤:
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/getProducts' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'productsService' while setting bean property 'productsService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productsService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'productsDao' while setting bean property 'productsDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productsDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/transaction/TransactionManager

    仔細(xì)對照了一下代碼,沒找到錯誤,可否致電一下,看看到此可能是那里的錯誤,應(yīng)該怎么改!!
    先謝謝了,我現(xiàn)在急需要搞定一個例子,以便好好研究一下!
    我的QQ是:410125014,如果方便的話,可以QQ聊一下,希望支持一下,謝謝!!!  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2007-08-08 16:41 | winie
    good  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2008-04-12 20:18 | jave
    public int getRows() {
    String sql = " FROM Products ORDER BY gameNameCn " ;
    List list = this .getHibernateTemplate().find(sql);
    return list.size();
    }

    這種做法效率很差  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2008-06-08 01:03 | wwfg5j
    大哥,你能把這個你編寫的程序通過Email發(fā)給我嗎 那些圖片我看不到 我又在網(wǎng)吧上網(wǎng) 弄不來
    可以的話給我發(fā)個吧 謝謝啦
    我郵箱233265653@qq.com  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2008-06-21 15:42 | zhangsan
    transactionManager事務(wù)管理的怎么有沒有用到  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2011-10-18 11:27 | 小劉 JAVA 菜鳥
    可以把你這個項目文件 發(fā)我嗎? 謝謝樓主  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2011-10-18 11:29 | 小劉 JAVA 菜鳥
    可以把項目文件發(fā)我嗎? 郵箱 564414405@qq.com 謝謝  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2014-09-02 14:19 | 方法
    方法  回復(fù)  更多評論
      
    # re: struts+spring+hibernate的web應(yīng)用 Dao層代碼編寫
    2015-03-08 00:58 | 我暈
    又是個只操作單個表的,不要老寫這些toy code!  回復(fù)  更多評論
      
    正在閱讀:



    <2014年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(35)

    隨筆檔案

    文章分類

    文章檔案

    好友的blog

    我的其他blog

    老婆的Blog

    搜索

    •  

    積分與排名

    • 積分 - 775109
    • 排名 - 56

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线免费观看韩国a视频| 亚洲国产欧洲综合997久久| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲AV日韩AV鸥美在线观看| 国产成人免费网站在线观看| 免费观看激色视频网站bd| 成人自慰女黄网站免费大全| 国产精品日本亚洲777| avtt天堂网手机版亚洲| 亚洲综合在线视频| 国产啪亚洲国产精品无码| 永久免费bbbbbb视频| 全免费毛片在线播放| 久久99精品国产免费观看| 亚洲AV色欲色欲WWW| 国产午夜亚洲精品| 亚洲制服丝袜第一页| 亚洲精品视频在线免费| 亚洲午夜精品一区二区| 久久青青草原亚洲AV无码麻豆| 狠狠亚洲婷婷综合色香五月排名| 亚洲国产专区一区| 免费人成视频x8x8入口| 免费观看亚洲人成网站| 国产免费私拍一区二区三区| 日本牲交大片免费观看| 免费看美女让人桶尿口| 成人黄页网站免费观看大全| 免费无码AV片在线观看软件| 青娱乐免费在线视频| 我要看WWW免费看插插视频| 久久久久亚洲精品美女| 成人免费无码H在线观看不卡| 一级毛片免费毛片毛片| 一边摸一边桶一边脱免费视频 | 亚洲情a成黄在线观看| 无码国模国产在线观看免费| 国产美女无遮挡免费视频网站| 国产美女精品视频免费观看| 免费乱码中文字幕网站| 国外亚洲成AV人片在线观看|