国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Spring集成MyBatis框架

2019-11-11 04:09:25
字體:
供稿:網(wǎng)友

SPRing集成MyBatis框架

    java在寫數(shù)據(jù)庫(kù)查詢時(shí),我接觸過四種方式:

    1、純Java代碼,引用對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,自己寫連接與釋放邏輯(可以用連接池)

    這種模式實(shí)際上性能是非常不錯(cuò)的,但是使用起來并不是非常方便:一是要手工為Connection做獲取與釋放,大量的冗余代碼也容易出錯(cuò);另一個(gè)是,復(fù)雜的SQL用字符串寫起來簡(jiǎn)直不可維護(hù)(換行、可視長(zhǎng)度、參數(shù)都是問題)。

    2、使用Spring JdbcTemplate

    這個(gè)其實(shí)還是挺不錯(cuò)的,配置比較簡(jiǎn)單,功能豐富上比手工管理Connection要舒服多了,而且代碼也比較簡(jiǎn)潔。突出的問題就是SQL維護(hù)還是挺麻煩的。

    3、使用Hibernate框架

    一句話,配置很麻煩,用起來還是挺不錯(cuò)的。但是有一個(gè)致命缺陷,它并不能像單表查詢一樣可以幫我們完成多表的查詢。如果有復(fù)雜的多表查詢或查詢條件,還是得用SQL去查,這對(duì)于一些業(yè)務(wù)邏輯復(fù)雜或者會(huì)經(jīng)常變更的業(yè)務(wù)來說,后期維護(hù)就是災(zāi)難,改到想哭(因?yàn)檎娴氖呛芑靵y,一定要開始就規(guī)劃好)。

    4、使用MyBatis框架

    這個(gè)是當(dāng)前我所做項(xiàng)目最喜歡用的數(shù)據(jù)庫(kù)持久化框架了,它通過xml配置可以非常簡(jiǎn)單直觀地幫你完成各種條件、判斷、多表的綜合查詢,實(shí)現(xiàn)方式比Java代碼拼SQL要舒服太多了,在這方面更是甩Hibernate一條街。要說易用性,其實(shí)也挺容易用的,但是配置上也要對(duì)一些數(shù)據(jù)做映射,不過相對(duì)而言更加靈活。它的實(shí)體類并不一定要是數(shù)據(jù)庫(kù)物理表,而可以是任意查詢出來的數(shù)據(jù)集(類似數(shù)據(jù)傳輸對(duì)象DTO)。

   

    簡(jiǎn)單總結(jié)一下:

    配置容易程度:1 > 2 > 4 > 3

    使用便捷程度:2 > 3 > 4 > 1

    查詢靈活程度:4 > 1 = 2 > 3

    下面將開始介紹Spring集成MyBatis的配置和使用,項(xiàng)目基于Maven構(gòu)建,連接MySQL數(shù)據(jù)庫(kù):

 

一、Maven配置

復(fù)制代碼
 1         <!-- Spring Base --> 2         <dependency> 3             <groupId>org.springframework</groupId> 4             <artifactId>spring-beans</artifactId> 5             <version>4.2.5.RELEASE</version> 6         </dependency> 7         <dependency> 8             <groupId>org.springframework</groupId> 9             <artifactId>spring-context</artifactId>10             <version>4.2.5.RELEASE</version>11         </dependency>12         <dependency>13             <groupId>org.springframework</groupId>14             <artifactId>spring-jdbc</artifactId>15             <version>4.2.5.RELEASE</version>16         </dependency>17         <!-- MySql -->18         <dependency>19             <groupId>mysql</groupId>20             <artifactId>mysql-connector-java</artifactId>21             <version>5.1.39</version>22         </dependency>23         <dependency>24             <groupId>com.mchange</groupId>25             <artifactId>c3p0</artifactId>26             <version>0.9.5.2</version>27         </dependency>28         <dependency>29             <groupId>org.mybatis</groupId>30             <artifactId>mybatis</artifactId>31             <version>3.4.1</version>32         </dependency>33         <dependency>34             <groupId>org.mybatis</groupId>35             <artifactId>mybatis-spring</artifactId>36             <version>1.3.0</version>37         </dependency>復(fù)制代碼

    關(guān)于Spring的包引用,我這里的引用只作為參考,其它web、mvc的包視各業(yè)務(wù)來引用。如果不用Maven,就自己乖乖引jar包,或者使用其它包管理吧。

 

二、Spring配置

復(fù)制代碼
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 4  5     <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 6         <property name="driverClass" value="com.mysql.jdbc.Driver" /> 7         <property name="jdbcUrl" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxdb" /> 8         <property name="user" value="lekko" /> 9         <property name="passWord" value="xxx" />10         <property name="minPoolSize" value="2" />11         <property name="maxPoolSize" value="100" />12     </bean>13 14     <bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">15         <property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" />16         <property name="dataSource" ref="myDataSource" />17     </bean>18  19     <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">20         <property name="basePackage" value="lekko.code.**.dao" />21     </bean>22 23 </beans>復(fù)制代碼

    這里的配置比較關(guān)鍵。

    1、myDataSource是一個(gè)ComboPooledDataSource類型的實(shí)例bean,它實(shí)現(xiàn)了數(shù)據(jù)庫(kù)連接池的功能。

    2、sqlSessionFactory是MyBatis用于建立查詢的工廠實(shí)例,它包括了一個(gè)mapperLocations定位,以及dataSource數(shù)據(jù)庫(kù)連接來源。

            - mapperLocations指定了MyBatis將會(huì)搜索的路徑,支持Ant風(fēng)格路徑。在指定的路徑下,MyBatis會(huì)把讀取其中的xml查詢,并將用于后面的dao映射。

            - dataSource是來源數(shù)據(jù)庫(kù),這里直接就是前面的連接池。

    3、mapperScannerConfigurer是MyBatis用于自動(dòng)建立數(shù)據(jù)庫(kù)dao類的配置器。

            - basePackage指定了要掃描的包名稱,支持Ant風(fēng)格路徑。在指定的包名稱下,MyBatis通過Spring,會(huì)自動(dòng)發(fā)現(xiàn)對(duì)應(yīng)包名下的dao接口,在后面需要查詢時(shí),為接口提供實(shí)現(xiàn)。

    下圖是MyBatis的大體框架,可以作為上述配置的一個(gè)補(bǔ)述:

    也就是說,MyBatis會(huì)根據(jù)XML配置Mapper去組成數(shù)據(jù)庫(kù)查詢,然后把查詢中所涉及的參數(shù)、返回結(jié)果,都映射成為Java對(duì)象(或元數(shù)據(jù)類型)。最后交由數(shù)據(jù)庫(kù)去執(zhí)行,返回。三、dao接口復(fù)制代碼
 1 package lekko.code.test.dao; 2  3 import lekko.code.test.model.TestModel; 4 import org.springframework.stereotype.Repository; 5  6 /** 7  * 測(cè)試DAO 8  */ 9 @Repository10 public interface TestDao {11 12     TestModel getTest(String name);13 14     int addTest(String name);15 16 }復(fù)制代碼

    上面這個(gè)接口,由于屬于包lekko.code.**.dao,所以會(huì)被識(shí)別為需要映射的dao。

    接口只有兩個(gè)方法,一個(gè)是查詢getTest,一個(gè)是新增addTest。至于getTest已經(jīng)根據(jù)需要,我這里提取成了一個(gè)實(shí)體類TestModel:

復(fù)制代碼
 1 package lekko.code.test.model; 2  3 /** 4  * 測(cè)試數(shù)據(jù)類 5  */ 6 public class TestModel { 7  8     private int id; 9     private String name;10 11     public String getName() {12         return name;13     }14     public void setName(String name) {15         this.name = name;16     }17 18     public int getId() {19         return id;20     }21     public void setId(int id) {22         this.id = id;23     }24 25 }復(fù)制代碼

 

四、Mapper映射

復(fù)制代碼
 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3  4 <mapper namespace="lekko.code.test.dao.TestDao"> 5  6     <select id="getTest" resultType="lekko.code.test.model.TestModel"> 7         select id, name from Test where name = #{name} 8     </select> 9 10     <insert id="addTest">11         insert into Test (name, createdTime) values (#{name}, now())12     </insert>13 14 </mapper>復(fù)制代碼

    語法我就不詳細(xì)解釋了,百度一下就有。各種條件、判斷、參數(shù)都有解釋。我本人非常喜歡這種自由度高,sql看起來也很舒服的配置方式。

    

    至此,大體的使用介紹已經(jīng)完畢。MyBatis還是挺不錯(cuò)的,建議大家在業(yè)務(wù)合適的情況下試用試用。

     

from: http://www.cnblogs.com/lekko/p/6367732.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 满城县| 乌鲁木齐县| 商洛市| 天津市| 武夷山市| 东城区| 岳池县| 鱼台县| 毕节市| 德安县| 东方市| 锡林郭勒盟| 松滋市| 武胜县| 巨鹿县| 疏附县| 尉氏县| 和平区| 五寨县| 宾阳县| 蓝田县| 师宗县| 偏关县| 房山区| 丰都县| 勐海县| 贵定县| 屏东县| 高台县| 苗栗市| 富顺县| 图片| 无棣县| 抚顺市| 蒙山县| 偏关县| 恩平市| 藁城市| 秀山| 西城区| 都匀市|