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

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

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

    JAVA涂鴉
    關于JAVA的點點滴滴
    posts - 50,  comments - 689,  trackbacks - 0

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

    ?

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

    ?

    現在就來編寫 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 不是數據庫自動生成的,而是根據需要由程序生成,一般項目中的主鍵 ID 都是采取這種方式。

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

    package ?com.game.products.model;

    public ? class ?Products? {
    ????
    // ????Fields?
    ???? private ?String?gameId; // 編號
    ???? private ?String?gameNameCn; // 中文名稱
    ???? private ?String?gameNameEn; // 英文名稱
    ???? private ?String?gameCapacity; // 碟數
    ???? private ?String?gameVersion; // 版本
    ???? private ?String?gameMedia; // 介質
    ???? private ?String?gameCopyright; // 版權
    ???? 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 類型,因為在項目中傳遞數據,用 string 類型最為方便,同時也便于代碼的編寫。只是在前臺需要編寫驗證代碼,免得有字符數據插入整數字段而造成數據庫異常。

    ?

    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(); // 獲得總行數
    ???? int ?getRows(String?fieldname,String?value); // 獲得總行數
    ????List?queryProducts(String?fieldname,String?value); // 根據條件查詢的所有記錄
    ????List?queryProducts(String?fieldname,String?value, int ?pageSize,? int ?startRow); // 根據條件查詢的一段記錄
    ????Products?getProduct(String?gameId); // 根據ID獲得記錄
    ????String?getMaxID(); // 獲得最大ID值
    ???? void ?addProduct(Products?pd); // 添加記錄
    ???? void ?updateProductd(Products?pd); // 修改記錄
    ???? void ?deleteProduct(Products?pd); // 刪除記錄????
    }


    ?

    com.game.products.dao.hibernate包中新建繼承HibernateDaoSupportProductsMapDao類,并實現了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() {}

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

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


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

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


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

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

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

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

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

    ????
    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();
    ????????????}

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


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

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


    ????
    /**
    ?????*?函數說明:獲得最大ID
    ?????*?參數說明:?
    ?????*?返回值:最大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;
    ????}


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

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


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

    ????
    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);
    ????}

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

    ????
    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();
    ????}

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

    ????
    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層的代碼已經編寫完成。下一篇,將編寫service層代碼。

    struts+spring+hibernate web 應用 < > Service 層代碼編寫

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

    FeedBack:
    # re: struts+spring+hibernate的web應用 Dao層代碼編寫
    2007-03-13 16:16 | tornado
    支持一下,
    贊一個  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Dao層代碼編寫[未登錄]
    2007-03-14 14:02 | 阿蜜果
    對異常的處理呢?
    這個問題我一直覺得頭大,沒找到我滿意的方法
    可是這個web應用里面我好像根本沒見到對異常的處理哦。
    嘻嘻,寫得很詳細,不錯,支持!  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Dao層代碼編寫
    2007-05-16 16:31 | 風箏飛滿天
    你好,我對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

    仔細對照了一下代碼,沒找到錯誤,可否致電一下,看看到此可能是那里的錯誤,應該怎么改!!
    先謝謝了,我現在急需要搞定一個例子,以便好好研究一下!
    我的QQ是:410125014,如果方便的話,可以QQ聊一下,希望支持一下,謝謝!!!  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Dao層代碼編寫
    2007-08-08 16:41 | winie
    good  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 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();
    }

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



    <2015年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(35)

    隨筆檔案

    文章分類

    文章檔案

    好友的blog

    我的其他blog

    老婆的Blog

    搜索

    •  

    積分與排名

    • 積分 - 775093
    • 排名 - 56

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久久噜噜噜亚洲熟女综合| 亚洲AV无码乱码国产麻豆| 国产精品成人69XXX免费视频| 亚洲an天堂an在线观看| 最近最新中文字幕完整版免费高清| 黄色网页免费观看| 亚洲黄色在线网站| 婷婷亚洲天堂影院| 8x8×在线永久免费视频| 真正全免费视频a毛片| 久久久久亚洲AV片无码| 国产女高清在线看免费观看| 久久国产精品国产自线拍免费| 亚洲综合av一区二区三区不卡 | 日本免费高清视频| 亚洲久热无码av中文字幕| 亚洲VA中文字幕无码一二三区| 性感美女视频在线观看免费精品 | 2020久久精品亚洲热综合一本| 亚洲日韩在线中文字幕第一页 | 免费电视剧在线观看| 久久国产乱子伦精品免费午夜 | 亚洲?V无码乱码国产精品| 免费h片在线观看网址最新| 国产99久久久国产精免费| 国产亚洲福利在线视频| 久久久久久久久亚洲| 亚洲av成人一区二区三区在线观看| 国产成人免费午夜在线观看| 一个人看的www免费在线视频| 亚洲熟妇AV一区二区三区宅男| 亚洲午夜视频在线观看| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 扒开双腿猛进入爽爽免费视频 | 中文字幕精品无码亚洲字| 在线免费观看a级片| 亚洲一区二区三区免费观看| 热99RE久久精品这里都是精品免费| 久久久久久久久无码精品亚洲日韩| 亚洲AV无码成人专区| 亚洲精品国产电影午夜|