亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Mybatis和JDBC的分頁查詢研究

        2015-12-08 12:13:13文歡歡劉振宇吳霖
        電腦知識與技術(shù) 2015年25期

        文歡歡 劉振宇 吳霖

        摘要:基于J2EE的數(shù)據(jù)持久化框架已經(jīng)成為WEB開發(fā)的主流技術(shù),而分頁查詢在與數(shù)據(jù)庫交互中是必不可少的一項。數(shù)據(jù)查詢分頁的方式有很多,從傳統(tǒng)的JDBC分頁查詢到現(xiàn)代ORM框架的分頁查詢,但這些分頁查詢方法中或多或少會出現(xiàn)一些問題,例如JDBC實現(xiàn)物理分頁會導(dǎo)致復(fù)雜化編程、高耦合、性能差、代碼復(fù)用度低、復(fù)雜度高等。應(yīng)用Mybatis來進(jìn)行分頁實現(xiàn)了松散耦合,能極大地提高開發(fā)效率,使系統(tǒng)更具維護(hù)性和可擴(kuò)展性。

        關(guān)鍵詞:Mybatis;持久化;ORM;分頁

        中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)25-0165-03

        在實際的開發(fā)中,開戶者通常會對數(shù)據(jù)信息進(jìn)行過濾選擇,進(jìn)而分頁展示到自身或用戶的視野中。如果采用通用的JDBC物理分頁的方式,也能實現(xiàn)分頁的效果,但實現(xiàn)過程中會相對繁瑣,分頁性能比較低,可移植性較差。如果采用新型ORM框架Mybatis和JDBC改良的分頁方式處理,效果能更加清晰明了的實現(xiàn),數(shù)據(jù)也能更具穩(wěn)定性。此種方式具有較好的可用性、靈活性、交互性,也具備更強的移植性。

        1 Mybatis和JDBC介紹

        JDBC(Java Data Base Connectivity)全稱是java數(shù)據(jù)庫連接,是一種用來執(zhí)行SQL數(shù)據(jù)庫語句的Java API,可以向多種關(guān)系數(shù)據(jù)庫數(shù)據(jù)提供統(tǒng)一訪問,它是由一組由Java語言編寫的類和接口組成的。JDBC提供了一種標(biāo)準(zhǔn),提供構(gòu)建更高級的工具和接口,使開發(fā)人員能更好地編寫數(shù)據(jù)庫應(yīng)用程序[1]。

        Mybatis原來是阿帕奇公司(即Apache公司)的一個面向廣大用戶和企業(yè)而研究的開源項目“ibatis”[2]。隨著開發(fā)團(tuán)隊加入Google Code旗下,ibatis3.X正式更名為Mybatis。其本意是Internet和abatis兩個單詞的組合,是提供給用戶一個持久層框架。Mybatis框架集合了多種操作型的關(guān)系數(shù)據(jù)概念與方法。它是一個強大有效的數(shù)據(jù)訪問工具,主要包含DAO組件和SQL Map組件兩大類,其構(gòu)架圖,如圖1所示[3]:

        圖1 Mybatis構(gòu)架圖

        Mybatis的ORM自動生成方式代替了幾乎所有的JDBC代碼和屬性進(jìn)行配置,直接生成接口類和JAVA Bean對象的數(shù)據(jù)庫表或?qū)?shù)據(jù)庫表直接反向生成接口類和JAVA Model類。Mybatis主要由三層主要功能組成:

        1) API接口層:自動生成JDBC封裝代碼給生成類以外的類提供接口,程序員可以通過本地API對數(shù)據(jù)庫直接進(jìn)行操作和處理。

        2) 數(shù)據(jù)處理層:擁有具體的JDBC代碼,是接口的具體實例化代碼,包括具體的SQL查找、文件解析、程序執(zhí)行與執(zhí)行結(jié)果處理等功能。它的主要目的是根據(jù)調(diào)用的API請求轉(zhuǎn)化成具體代碼,而后由代碼完成一次數(shù)據(jù)庫數(shù)據(jù)處理操作。

        3) 基礎(chǔ)支撐層:負(fù)責(zé)于框架最基礎(chǔ)的管理功能,包括數(shù)據(jù)庫連接、數(shù)據(jù)庫事務(wù)管理、數(shù)據(jù)庫加載配置和數(shù)據(jù)庫緩存處理等,將他們組合成一個最基本的組件,為上層提供服務(wù)。

        2 Mybatis和JDBC分頁方法實現(xiàn)

        要實現(xiàn)分頁方法,需要完成以下工作。

        1)在Mybatis的實體類T的TMapper.xml文件中添加兩個方法映射(這里將兩個映射的id命名為queryByCountCondition和queryByCondition),一個是返回查詢記錄的數(shù)量的方法映射,另一個是進(jìn)行條件查詢分頁的方法映射,然后在Dao層添加queryByCountCondition和queryByCondition方法,并在Dao的實現(xiàn)層對著兩個方法進(jìn)行實現(xiàn)。Mybatis根據(jù)TMapper.xml中namespace的類名映射Dao層中的類,Service層通過Dao層的實現(xiàn)類反向調(diào)用Dao層接口,通過TMapper.xml文件映射SQl操作,進(jìn)而完成整個操作。主要實現(xiàn)代碼如:TMapper.xml文件代碼:

        TDaoImp.java文件代碼:

        public class TDaoImp implements TDao {

        private static final String NAMESPACE = "com.dao.TDao";

        public List queryByCondition(TModel model) throws Exception {

        SqlSession session = null;

        List list = null;

        try {

        session = GetSession.initSession();

        list = session.selectList(NAMESPACE + ".queryByCondition",model);

        } catch (Exception e) {

        e.printStackTrace();

        throw new RuntimeException("系統(tǒng)出錯 :"+e.getMessage());

        }finally{

        session.close();

        }

        return list;

        }

        public int queryCountByCondition(TModel model) throws Exception {

        SqlSession session = null;

        Integer count = null;

        try {

        session = GetSession.initSession();

        Count=(Integer)session.selectOne(NAMESPACE + ".queryCountByCondition",model);

        } catch (Exception e) {

        e.printStackTrace();

        throw new RuntimeException("系統(tǒng)出錯 :"+e.getMessage());

        }finally{

        session.close();

        }

        return count;

        }

        2)創(chuàng)建Page類和PageModel類,在其中建立起始頁、每頁記錄數(shù)、總頁數(shù)、總記錄數(shù)、當(dāng)前頁記錄等。在Dao層建立BaseDao接口,里面只有queryByPage一個方法,返回Page并在其實現(xiàn)類BaseDaoImp實現(xiàn)。實現(xiàn)類內(nèi)部代碼大致如下:

        public Page queryByPage(Page page) throws Exception {

        SqlSession session = null;

        List pageList = null;

        try {

        session = GetSession.initSession();

        pageList=session.selectList(page.getNameSpace()+ page.getMethod(), page.getParams());

        Integer totalRecords = (Integer) session.selectOne(page.getNameSpace() + page.getMethodCount(), page.getParams().get("modelCondition"));

        page.setTotalRecord(totalRecords);

        page.setResults(pageList);

        } catch (Exception e) {

        throw new RuntimeException("系統(tǒng)出錯 :"+e.getMessage());

        }finally{

        session.close();

        }

        return page;

        }

        3)在util包中建立PageDao類用來中間調(diào)用BaseDaoImp的內(nèi)部方法,并加以封裝。其內(nèi)部代碼大致如下:

        public static PageModel pageInation(Object object,Page page) throws Exception{

        PageModel pageModel = new PageModel();

        BaseDaoImp baseDaoImp = new BaseDaoImp();

        try {

        page.getParams().put("modelCondition",object );

        page.getParams().put("start",page.getStart());

        page.getParams().put("pageSize",page.getPageSize());

        page = baseDaoImp.queryByPage(page);

        } catch (Exception e) {

        e.printStackTrace();

        throw new RuntimeException("分頁出錯 :"+e.getMessage());

        }

        pageModel.setStart(page.getStart());

        pageModel.setPageNo(page.getPageNo());

        pageModel.setPageSize(page.getPageSize());

        pageModel.setResults(page.getResults());

        pageModel.setTotalRecords(page.getTotalRecords());

        pageModel.setTotalPage(page.getTotalPage());

        page=null;

        return pageModel;

        4)在util包中建立QureyPage類與上層相契合,作為通用分頁類,其內(nèi)部代碼大致如下:

        public static PageModel getPageResult(BaseModel model,String nameSpace,Integer start, Integer pageNo, Integer pageSize) throws Exception{

        Page page = new Page();

        PageModel pageModel = new PageModel();

        if (pageSize != null && pageSize > 0) {

        page.setPageSize(pageSize);

        }

        if (pageNo != null && pageSize > 0) {

        page.setPageNo(pageNo);

        }

        page.setStart(start);

        page.setNameSpace(nameSpace);

        pageModel = PageDao.pageInation(model, page);

        return pageModel;

        }

        至此,大致的Mybatis和JDBC結(jié)合分頁的大致流程基本完成。

        3 結(jié)束語

        文中對Mybatis和JDBC進(jìn)行了簡要的介紹,對基于Myatbis和JDBC相結(jié)合的分頁方式進(jìn)行了分析,設(shè)計并實現(xiàn)了通用頁面信息映射類和實現(xiàn)類,同時在效的整合了Mybatis和JDBC的基礎(chǔ)上,設(shè)計出一種通用的分頁查詢方法,最后通過具體代碼實現(xiàn)了整個過程。

        該方法通過配置文件中的自動映射,提高了代碼的可靠性和有效性,降低了編程的耦合度,使得分頁查詢更易于實現(xiàn)。

        參考文獻(xiàn):

        [1] 李德水, 陰國富. JDBC體系結(jié)構(gòu)分析[J]. 電腦開發(fā)與應(yīng)用, 2006(10).

        [2] 夏汛, 陳玲. 基于Spring MVC和Mybatis的動態(tài)表單設(shè)計[J]. 計算機光盤軟件和應(yīng)用, 2012(20).

        [3] 徐雯, 高建華. 基于Spring MVC及Mybatis的Web應(yīng)用框架研究[J]. 微型電腦應(yīng)用, 2012(7).

        国产精品麻豆成人AV电影艾秋| 亚洲高潮喷水无码av电影| 久久精品不卡一区二区三区| 日韩在线观看入口一二三四| 日本一区二区三区爆乳| 国产亚洲精品精品精品| 女人扒开屁股爽桶30分钟| 久久亚洲精品无码va大香大香| 精品人妻无码视频中文字幕一区二区三区| 国产欧美日韩在线观看| 亚洲精品中国国产嫩草影院美女| 国产做床爱无遮挡免费视频 | 青青自拍视频成人免费观看| 国产日本精品一区二区免费| av中国av一区二区三区av| 国产亚洲精品精品精品| 99精品视频69V精品视频| 亚洲国产99精品国自产拍| 少妇被粗大猛进进出出| 中文字幕日韩精品亚洲精品| 亚洲天堂av一区二区| 欧美群妇大交群| 亚洲国产av无码专区亚洲av| 中文字幕爆乳julia女教师| 国产真实露脸4p视频| 日韩在线精品视频免费| 在线免费观看蜜桃视频| 人人妻人人澡人人爽人人dvd| 国产乱国产乱老熟300部视频| 亚洲精品成人网站在线观看| 国产激情久久99久久| 国产精品亚洲精品专区| 亚洲中字幕日产av片在线| 日韩精品无码av中文无码版| 无码毛片高潮一级一免费| 日本黄色特级一区二区三区| 中文字幕成人乱码熟女精品国50| 久久97久久97精品免视看| 成人欧美一区二区三区1314| 无码人妻一区二区三区免费n鬼沢| 91久久福利国产成人精品|