<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+hibernate web 應用 < > 架構搭建

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

    ?

    現在開始編寫 Service 層代碼:

    com.game.products.services.iface 包中新建 ProductsService 接口,代碼如下:

    ?

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

    import ?java.util.List;

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

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

    com.game.products.services 包中新建 ProductsServiceImp 類,這個類實現了 ProductsService 接口,代碼如下:

    package ?com.game.products.services;

    import ?java.util.List;

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

    public ? class ?ProductsServiceImp? implements ?ProductsService {
    ????
    private ?ProductsDao?productsDao;
    ????
    ????
    public ?ProductsServiceImp() {}
    ????
    ????
    /**
    ?????*?函數說明:添加信息
    ?????*?參數說明:對象?
    ?????*?返回值:
    ?????
    */

    ????
    public ? void ?addProduct(Products?pd)? {
    ????????productsDao.addProduct(pd);
    ????}


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

    ????
    public ? void ?deleteProduct(Products?pd)? {
    ????????productsDao.deleteProduct(pd);
    ????}


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

    ????
    public ?List?getProducts()? {
    ????????
    return ?productsDao.getProducts();
    ????}

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

    ????
    public ? int ?getRows()? {
    ????????
    return ?productsDao.getRows();
    ????}

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

    ????
    public ?List?getProducts( int ?pageSize,? int ?startRow)? {
    ????????
    return ?productsDao.getProducts(pageSize,?startRow);
    ????}


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

    ????
    public ?Products?getProduct(String?gameId)? {
    ????????
    return ?productsDao.getProduct(gameId);
    ????}


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

    ????
    public ?String?getMaxID()? {
    ????????
    return ?productsDao.getMaxID();
    ????}


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

    ????
    public ? void ?updateProductd(Products?pd)? {
    ????????productsDao.updateProductd(pd);
    ????}


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

    ????
    public ?List?queryProducts(String?fieldname,String?value)? {
    ????????
    return ?productsDao.queryProducts(fieldname,?value);
    ????}

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

    ????
    public ? int ?getRows(String?fieldname,String?value)? {
    ????????
    return ?productsDao.getRows(fieldname,?value);
    ????}

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

    ????
    public ?List?queryProducts(String?fieldname,String?value, int ?pageSize,? int ?startRow)? {
    ????????
    return ?productsDao.queryProducts(fieldname,?value,pageSize,startRow);
    ????}


    ????
    public ?ProductsDao?getProductsDao()? {
    ????????
    return ?productsDao;
    ????}


    ????
    public ? void ?setProductsDao(ProductsDao?productsDao)? {
    ????????
    this .productsDao? = ?productsDao;
    ????}


    }


    ?

    基本的業務層代碼就這些了。因為還有分頁的業務,所以接下來編寫分頁的代碼。


    分頁是個公共的類,所以放在
    com.game.commons 中。

    Pager 類,封裝了分頁需要的屬性,代碼如下:

    package ?com.game.commons;

    import ?java.math. * ;

    public ? class ?Pager? {
    ????
    private ? int ?totalRows;? // 總行數
    ???? private ? int ?pageSize? = ? 30 ;? // 每頁顯示的行數
    ???? private ? int ?currentPage;? // 當前頁號
    ???? private ? int ?totalPages;? // 總頁數
    ???? private ? int ?startRow;? // 當前頁在數據庫中的起始行
    ????
    ????
    public ?Pager()? {
    ????}

    ????
    ????
    public ?Pager( int ?_totalRows)? {
    ????????totalRows?
    = ?_totalRows;
    ????????totalPages
    = totalRows / pageSize;
    ????????
    int ?mod = totalRows % pageSize;
    ????????
    if (mod > 0 ) {
    ????????????totalPages
    ++ ;
    ????????}

    ????????currentPage?
    = ? 1 ;
    ????????startRow?
    = ? 0 ;
    ????}

    ????
    ????
    public ? int ?getStartRow()? {
    ????????
    return ?startRow;
    ????}

    ????
    public ? int ?getTotalPages()? {
    ????????
    return ?totalPages;
    ????}

    ????
    public ? int ?getCurrentPage()? {
    ????????
    return ?currentPage;
    ????}

    ????
    public ? int ?getPageSize()? {
    ????????
    return ?pageSize;
    ????}

    ????
    public ? void ?setTotalRows( int ?totalRows)? {
    ????????
    this .totalRows? = ?totalRows;
    ????}

    ????
    public ? void ?setStartRow( int ?startRow)? {
    ????????
    this .startRow? = ?startRow;
    ????}

    ????
    public ? void ?setTotalPages( int ?totalPages)? {
    ????????
    this .totalPages? = ?totalPages;
    ????}

    ????
    public ? void ?setCurrentPage( int ?currentPage)? {
    ????????
    this .currentPage? = ?currentPage;
    ????}

    ????
    public ? void ?setPageSize( int ?pageSize)? {
    ????????
    this .pageSize? = ?pageSize;
    ????}

    ????
    public ? int ?getTotalRows()? {
    ????????
    return ?totalRows;
    ????}

    ????
    public ? void ?first()? {
    ????????currentPage?
    = ? 1 ;
    ????????startRow?
    = ? 0 ;
    ????}

    ????
    public ? void ?previous()? {
    ????????
    if ?(currentPage? == ? 1 )? {
    ????????????
    return ;
    ????????}

    ????????currentPage
    -- ;
    ????????startRow?
    = ?(currentPage? - ? 1 )? * ?pageSize;
    ????}

    ????
    public ? void ?next()? {
    ????????
    if ?(currentPage? < ?totalPages)? {
    ????????????currentPage
    ++ ;
    ????????}

    ????????startRow?
    = ?(currentPage? - ? 1 )? * ?pageSize;
    ????}

    ????
    public ? void ?last()? {
    ????????currentPage?
    = ?totalPages;
    ????????startRow?
    = ?(currentPage? - ? 1 )? * ?pageSize;
    ????}

    ????
    public ? void ?refresh( int ?_currentPage)? {
    ????????currentPage?
    = ?_currentPage;
    ????????
    if ?(currentPage? > ?totalPages)? {
    ????????????last();
    ????????}

    ????}

    }


    ?

    PagerService 類,主要有個 getPager 方法返回 Pager 類。代碼如下:

    package ?com.game.commons;

    public ? class ?PagerService? {
    ????
    public ?Pager?getPager(String?currentPage,String?pagerMethod, int ?totalRows)? {
    ????????
    // ????定義pager對象,用于傳到頁面
    ????????Pager?pager? = ? new ?Pager(totalRows);
    ????????
    // ????如果當前頁號為空,表示為首次查詢該頁
    ????????
    // ????如果不為空,則刷新pager對象,輸入當前頁號等信息
    ???????? if ?(currentPage? != ? null )? {
    ????????????pager.refresh(Integer.parseInt(currentPage));
    ????????}

    ????????
    // ????獲取當前執行的方法,首頁,前一頁,后一頁,尾頁。
    ???????? if ?(pagerMethod? != ? null )? {
    ????????????
    if ?(pagerMethod.equals( " first " ))? {
    ????????????????pager.first();
    ????????????}
    ? else ? if ?(pagerMethod.equals( " previous " ))? {
    ????????????????pager.previous();
    ????????????}
    ? else ? if ?(pagerMethod.equals( " next " ))? {
    ????????????????pager.next();
    ????????????}
    ? else ? if ?(pagerMethod.equals( " last " ))? {
    ????????????????pager.last();
    ????????????}

    ????????}

    ????????
    return ?pager;
    ????}

    }

    ?

    ?

    這個分頁方法比較簡單,而且功能也齊全,許多頁面級的開源 table 中分頁很多也是基于這個原理,所以理解了這個分頁,對其他各種分頁技術的理解也就迎刃而解了。

    ?

    服務層的代碼就這些了,接下來就可以寫 spring 的配置文件來用 spring 管理這些 Dao Service 了。

    spring-context 包中新建 applicationContext.xml 。配置的寫法如下:

    <? xml?version="1.0"?encoding="ISO-8859-1" ?>
    <! DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd" >
    ?
    < beans >
    ????
    <!-- ?dataSource?config? -->
    ????
    < bean? id ="dataSource" ?class ="org.springframework.jndi.JndiObjectFactoryBean" >
    ????????
    < property? name ="jndiName" >
    ????????????
    < value > java:comp/env/jdbc/game </ value >
    ????????
    </ property >
    ????
    </ bean >
    <!-- ?SessionFactory? -->
    ????
    < bean? id ="sessionFactory"
    ????????class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

    ????????
    < property? name ="dataSource" >
    ????????????
    < ref? bean ="dataSource" />
    ????????
    </ property >
    ????????
    < property? name ="configLocation" >
    ????????????
    < value > classpath:com\game\bean\hibernate\hibernate.cfg.xml </ value >
    ????????
    </ property > ????????
    ????
    </ bean >
    ????
    ????
    <!-- ?TransactionManager?? -->
    ????
    < bean? id ="transactionManager"
    ????????class
    ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
    ????????
    < property? name ="sessionFactory" >
    ????????????
    < ref? local ="sessionFactory" />
    ????????
    </ property >
    ????
    </ bean >
    <!-- ?DAO? -->
    ????
    < bean? id ="productsDao" ?class ="com.game.products.dao.hibernate.ProductsMapDao" >
    ????????
    < property? name ="sessionFactory" >
    ????????????
    < ref? bean ="sessionFactory" />
    ????????
    </ property >
    ????
    </ bean >
    ????
    ????
    <!-- ?Services? -->
    ?????
    < bean? id ="productsService" ?class ="com.game.products.services.ProductsServiceImp" >
    ????????
    < property? name ="productsDao" >
    ????????????
    < ref? bean ="productsDao" />
    ????????
    </ property >
    ????
    </ bean > ?
    < bean? id ="pagerService" ?class ="com.game.commons.PagerService" >
    ????
    </ bean >
    </beans>


    ?

    配置文件不難,主要是些 IOC 控制。數據庫鏈接我采用的是數據源方式,需要在 tomcat 的conf文件夾下的 server.xml 中添加數據源,添加的數據如下:

    < Context? path ="/game" ?docBase ="D:\tomcat-5.5.20\webapps\game" ?debug ="0" ?reloadable ="true" >
    ????????
    < Resource
    ????????????
    name ="jdbc/game"
    ????????????type
    ="javax.sql.DataSource"
    ????????????password
    =""
    ????????????driverClassName
    ="net.sourceforge.jtds.jdbc.Driver"
    ????????????maxIdle
    ="2"
    ????????????maxWait
    ="5000"
    ????????????username
    ="sa"
    ????????????url
    ="jdbc:jtds:sqlserver://127.0.0.1:16899/game"
    ????????????maxActive
    ="4" />

    ????????
    </ Context >


    ?

    這個數據源是針對 tomcat 5.5 以上版本的,以下版本的寫法有所不同,不同之處可以用 google 搜索得知。這個數據源很簡單,并沒有過多的配置來優化系統,只是為了讓項目更容易讓人理解。需要注意都是,我的數據鏈接的JDBC包是jtds包,而不是普通的那個三個jar包。

    ?

    下一篇,將寫 Web 層的代碼了。

    struts+spring+hibernate web 應用 < > Web 層代碼編寫(1)

    struts+spring+hibernate web 應用 < > Web 層代碼編寫(2)


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

    FeedBack:
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2007-03-13 17:04 | w
    多謝lz   回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2007-03-13 22:22 | tornado
    哥們辛苦了  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫[未登錄]
    2007-03-14 12:50 | 阿蜜果
    up!
    期待下篇  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2007-03-15 17:40 | walk man
    service層在spring配置中沒有對方法進行事務配置  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2007-03-16 08:47 | 千山鳥飛絕
    @walk man

    在下一篇,使用權限配置的時候,將對service進行事務管理。
    一般的添刪改查不需要事務處理。
      回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2007-03-16 10:20 | walk man
    @千山鳥飛絕
    建議:作為例子再把異常體系設計一下,尤其當你的dao層和service層通過spring組裝時候,需要根據dao層異常來提交或回滾service層的事務。 現在這樣簡單寫很容易把哪些新入門的人誤導了啊。以為這就萬事大吉了。  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2008-02-25 09:28 | xx
    為什么要搞那么多接口呀?  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2008-04-25 17:14 | whttaotao
    你在Service層聲明了ProductsDao借口對象???
    調用 ProductsDao的子類方法 編譯能通過???
      回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2008-04-25 17:16 | whttaotao
    還有你的spring沒有用到自醒機制啊~!建議補上~!  回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2008-04-25 17:45 | whttaotao
    @whttaotao
    這里當我白說 說錯了
      回復  更多評論
      
    # re: struts+spring+hibernate的web應用 Service層代碼編寫
    2010-06-08 14:30 | 細菌
    Service層無法創建~~~
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobservice' defined in ServletContext resource [/WEB-INF/classes/action.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
    求助啊~~
    email:levin_xh@hotmail.com  回復  更多評論
      
    正在閱讀:



    <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(35)

    隨筆檔案

    文章分類

    文章檔案

    好友的blog

    我的其他blog

    老婆的Blog

    搜索

    •  

    積分與排名

    • 積分 - 775298
    • 排名 - 56

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码专区电影在线观看| 免费又黄又爽的视频| 亚洲AV日韩精品久久久久久| 一级毛片在播放免费| 亚洲区不卡顿区在线观看| 九九九国产精品成人免费视频| 四虎影视永久免费视频观看| 亚洲色偷偷综合亚洲av78| 国内自产少妇自拍区免费| 亚洲精品456人成在线| 最近2019中文字幕mv免费看| 国产午夜亚洲精品| 日本人护士免费xxxx视频| 羞羞漫画页面免费入口欢迎你| 亚洲成a人片在线观看久| 国产精品玖玖美女张开腿让男人桶爽免费看 | 日韩精品无码免费专区午夜| 亚洲AV综合色一区二区三区| 午夜视频免费在线观看| 亚洲精品国产精品国自产网站 | 激情吃奶吻胸免费视频xxxx| 亚洲欧洲自拍拍偷精品 美利坚 | 国产精品久免费的黄网站| 免费福利在线观看| 亚洲成亚洲乱码一二三四区软件| 99re免费视频| 亚洲精品乱码久久久久久V | 国产麻豆免费观看91| gogo免费在线观看| 亚洲一区二区三区电影| 精品久久洲久久久久护士免费| 色哟哟国产精品免费观看| 久久久亚洲精品国产| 成人无遮挡毛片免费看| 一级做a爰片久久毛片免费陪 | 亚洲中文字幕无码av在线| 亚洲电影日韩精品| 99久久人妻精品免费一区| 亚洲中文字幕久久精品蜜桃| 亚洲综合av永久无码精品一区二区| 最近中文字幕免费完整|