欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring集成MyBatis框架

 更新時(shí)間:2017年02月06日 09:15:39   作者:Lekko.Li  
本文主要介紹了Spring集成MyBatis的配置和使用,項(xiàng)目基于Maven構(gòu)建,連接Mysql數(shù)據(jù)庫。下面跟著小編一起來看下吧

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

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

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

2、使用Spring JdbcTemplate

這個(gè)其實(shí)還是挺不錯(cuò)的,配置比較簡單,功能豐富上比手工管理Connection要舒服多了,而且代碼也比較簡潔。突出的問題就是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ù)庫持久化框架了,它通過XML配置可以非常簡單直觀地幫你完成各種條件、判斷、多表的綜合查詢,實(shí)現(xiàn)方式比Java代碼拼SQL要舒服太多了,在這方面更是甩Hibernate一條街。要說易用性,其實(shí)也挺容易用的,但是配置上也要對(duì)一些數(shù)據(jù)做映射,不過相對(duì)而言更加靈活。它的實(shí)體類并不一定要是數(shù)據(jù)庫物理表,而可以是任意查詢出來的數(shù)據(jù)集(類似數(shù)據(jù)傳輸對(duì)象DTO)。

簡單總結(jié)一下:

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

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

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

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

一、Maven配置

<!-- Spring Base -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-beans</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>4.2.5.RELEASE</version>
 </dependency>
 <!-- MySql -->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.39</version>
 </dependency>
 <dependency>
 <groupId>com.mchange</groupId>
 <artifactId>c3p0</artifactId>
 <version>0.9.5.2</version>
 </dependency>
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.4.1</version>
 </dependency>
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-spring</artifactId>
 <version>1.3.0</version>
 </dependency>

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

二、Spring配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
 <property name="driverClass" value="com.mysql.jdbc.Driver" />
 <property name="jdbcUrl" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxdb" />
 <property name="user" value="lekko" />
 <property name="password" value="xxx" />
 <property name="minPoolSize" value="2" />
 <property name="maxPoolSize" value="100" />
 </bean>
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" />
 <property name="dataSource" ref="myDataSource" />
 </bean>
 <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 <property name="basePackage" value="lekko.code.**.dao" />
 </bean>
</beans>

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

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

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

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

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

3、mapperScannerConfigurer是MyBatis用于自動(dòng)建立數(shù)據(jù)庫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ù)庫查詢,然后把查詢中所涉及的參數(shù)、返回結(jié)果,都映射成為Java對(duì)象(或元數(shù)據(jù)類型)。最后交由數(shù)據(jù)庫去執(zhí)行,返回。

三、dao接口

package lekko.code.test.dao;
import lekko.code.test.model.TestModel;
import org.springframework.stereotype.Repository;
/**
 * 測(cè)試DAO
 */
@Repository
public interface TestDao {
 TestModel getTest(String name);
 int addTest(String name);
}

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

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

package lekko.code.test.model;
/**
 * 測(cè)試數(shù)據(jù)類
 */
public class TestModel {
 private int id;
 private String name;
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
}

四、Mapper映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lekko.code.test.dao.TestDao">
 <select id="getTest" resultType="lekko.code.test.model.TestModel">
 select id, name from Test where name = #{name}
 </select>
 <insert id="addTest">
 insert into Test (name, createdTime) values (#{name}, now())
 </insert>
</mapper>

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

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

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • 如何更優(yōu)雅地獲取spring boot yml中的值

    如何更優(yōu)雅地獲取spring boot yml中的值

    這篇文章主要給大家介紹了關(guān)于如何更優(yōu)雅地獲取spring boot yml中值的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java中json處理工具JsonPath的使用教程

    Java中json處理工具JsonPath的使用教程

    JsonPath類似于XPath,是一種json數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)定位和導(dǎo)航表達(dá)式語言,這篇文章主要為大家介紹了JsonPath的基本使用,需要的小伙伴可以參考下
    2023-08-08
  • JavaWeb學(xué)習(xí)筆記分享(必看篇)

    JavaWeb學(xué)習(xí)筆記分享(必看篇)

    下面小編就為大家?guī)硪黄狫avaWeb學(xué)習(xí)筆記分享(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題

    Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之背包問題

    背包問題是一個(gè)非常典型的考察動(dòng)態(tài)規(guī)劃應(yīng)用的題目,對(duì)其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動(dòng)態(tài)規(guī)劃,就必須對(duì)背包問題了如指掌
    2022-02-02
  • SpringCache緩存自定義配置的實(shí)現(xiàn)

    SpringCache緩存自定義配置的實(shí)現(xiàn)

    本文主要介紹了SpringCache緩存自定義配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • JAVA設(shè)計(jì)模式之訪問者模式詳解

    JAVA設(shè)計(jì)模式之訪問者模式詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之訪問者模式詳解,訪問者模式是對(duì)象的行為模式,訪問者模式的目的是封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作,需要的朋友可以參考下
    2015-04-04
  • Java漢字轉(zhuǎn)拼音pinyin4j用法詳解

    Java漢字轉(zhuǎn)拼音pinyin4j用法詳解

    這篇文章主要介紹了Java漢字轉(zhuǎn)拼音pinyin4j用法詳解,需要的朋友可以參考下
    2020-02-02
  • 通過實(shí)例解析Java List正確使用方法

    通過實(shí)例解析Java List正確使用方法

    這篇文章主要介紹了通過實(shí)例解析Java List正確使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 線上Spring CPU 高負(fù)載解決思路詳解

    線上Spring CPU 高負(fù)載解決思路詳解

    這篇文章主要為大家介紹了線上Spring CPU 高負(fù)載解決思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java實(shí)現(xiàn)簡單網(wǎng)絡(luò)象棋游戲

    java實(shí)現(xiàn)簡單網(wǎng)絡(luò)象棋游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單網(wǎng)絡(luò)象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評(píng)論