<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 層代碼編寫

    ?

    現(xiàn)在開始編寫 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();; // 獲得總行數(shù)
    ????List?getProducts( int ?pageSize,? int ?startRow)?; // 獲得一段記錄
    ????Products?getProduct(String?gameId); // 根據(jù)ID獲得記錄
    ????String?getMaxID(); // 獲得最大ID值
    ???? void ?updateProductd(Products?pd); // 修改記錄
    ????List?queryProducts(String?fieldname,String?value); // 根據(jù)條件查詢的所有記錄
    ???? int ?getRows(String?fieldname,String?value); // 獲得總行數(shù)
    ????List?queryProducts(String?fieldname,String?value, int ?pageSize,? int ?startRow); // 根據(jù)條件查詢的一段記錄
    }

    com.game.products.services 包中新建 ProductsServiceImp 類,這個類實現(xiàn)了 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() {}
    ????
    ????
    /**
    ?????*?函數(shù)說明:添加信息
    ?????*?參數(shù)說明:對象?
    ?????*?返回值:
    ?????
    */

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


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

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


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

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

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

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

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

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


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

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


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

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


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

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


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

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

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

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

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

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


    }


    ?

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


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

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

    package ?com.game.commons;

    import ?java.math. * ;

    public ? class ?Pager? {
    ????
    private ? int ?totalRows;? // 總行數(shù)
    ???? private ? int ?pageSize? = ? 30 ;? // 每頁顯示的行數(shù)
    ???? private ? int ?currentPage;? // 當前頁號
    ???? private ? int ?totalPages;? // 總頁數(shù)
    ???? private ? int ?startRow;? // 當前頁在數(shù)據(jù)庫中的起始行
    ????
    ????
    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));
    ????????}

    ????????
    // ????獲取當前執(zhí)行的方法,首頁,前一頁,后一頁,尾頁。
    ???????? 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 控制。數(shù)據(jù)庫鏈接我采用的是數(shù)據(jù)源方式,需要在 tomcat 的conf文件夾下的 server.xml 中添加數(shù)據(jù)源,添加的數(shù)據(jù)如下:

    < 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 >


    ?

    這個數(shù)據(jù)源是針對 tomcat 5.5 以上版本的,以下版本的寫法有所不同,不同之處可以用 google 搜索得知。這個數(shù)據(jù)源很簡單,并沒有過多的配置來優(yōu)化系統(tǒng),只是為了讓項目更容易讓人理解。需要注意都是,我的數(shù)據(jù)鏈接的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開發(fā)

    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組裝時候,需要根據(jù)dao層異常來提交或回滾service層的事務。 現(xiàn)在這樣簡單寫很容易把哪些新入門的人誤導了啊。以為這就萬事大吉了。  回復  更多評論
      
    # 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借口對象???
    調(diào)用 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層無法創(chuàng)建~~~
    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  回復  更多評論
      
    正在閱讀:



    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(35)

    隨筆檔案

    文章分類

    文章檔案

    好友的blog

    我的其他blog

    老婆的Blog

    搜索

    •  

    積分與排名

    • 積分 - 775110
    • 排名 - 56

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品V欧洲精品V日韩精品 | 亚洲国产91精品无码专区| 亚洲高清无码专区视频| 亚洲色欲久久久综合网| 亚洲美女视频网址| 亚洲av永久无码| 两个人日本免费完整版在线观看1| 久久综合九色综合97免费下载| 国产精品久久久久免费a∨| 国产成人aaa在线视频免费观看| 亚洲无码高清在线观看| 亚洲AV日韩AV天堂一区二区三区| 亚洲一欧洲中文字幕在线| 国产精品亚洲综合一区在线观看| a级毛片在线视频免费观看| 2021免费日韩视频网| 亚洲高清免费视频| 亚洲一区二区电影| 精品国产亚洲AV麻豆| 全免费a级毛片免费看| 成人午夜性A级毛片免费| 久久久久亚洲精品无码网址 | 亚洲午夜精品在线| 女人裸身j部免费视频无遮挡| 国产成人精品免费久久久久| 成年女人免费视频播放体验区| 久久久久亚洲爆乳少妇无| 亚洲一区二区三区在线网站| 精品国产福利尤物免费| 国产一卡2卡3卡4卡无卡免费视频| 亚洲精品WWW久久久久久| 亚洲天堂福利视频| 亚欧乱色国产精品免费视频| 4虎永免费最新永久免费地址| 免费一级毛片在级播放| 亚洲精品亚洲人成在线麻豆| 一级毛片视频免费| 男人的好看免费观看在线视频 | 亚洲电影在线播放| a级毛片免费高清视频| 最近2019中文字幕免费看最新 |