一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring集成MyBatis框架

Spring集成MyBatis框架

2020-08-03 16:23Lekko.Li Java教程

本文主要介紹了Spring集成MyBatis的配置和使用,項目基于Maven構建,連接Mysql數據庫。下面跟著小編一起來看下吧

Java在寫數據庫查詢時,我接觸過四種方式:

1、純Java代碼,引用對應的數據庫驅動包,自己寫連接與釋放邏輯(可以用連接池)

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

2、使用Spring JdbcTemplate

這個其實還是挺不錯的,配置比較簡單,功能豐富上比手工管理Connection要舒服多了,而且代碼也比較簡潔。突出的問題就是SQL維護還是挺麻煩的。

3、使用Hibernate框架

一句話,配置很麻煩,用起來還是挺不錯的。但是有一個致命缺陷,它并不能像單表查詢一樣可以幫我們完成多表的查詢。如果有復雜的多表查詢或查詢條件,還是得用SQL去查,這對于一些業務邏輯復雜或者會經常變更的業務來說,后期維護就是災難,改到想哭(因為真的是很混亂,一定要開始就規劃好)。

4、使用MyBatis框架

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

簡單總結一下:

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

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

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

下面將開始介紹Spring集成MyBatis的配置和使用,項目基于Maven構建,連接Mysql數據庫:

一、Maven配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!-- 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>

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

二、Spring配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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>

這里的配置比較關鍵。

1、myDataSource是一個ComboPooledDataSource類型的實例bean,它實現了數據庫連接池的功能。

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

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

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

3、mapperScannerConfigurer是MyBatis用于自動建立數據庫dao類的配置器。

   - basePackage指定了要掃描的包名稱,支持Ant風格路徑。在指定的包名稱下,MyBatis通過Spring,會自動發現對應包名下的dao接口,在后面需要查詢時,為接口提供實現。

下圖是MyBatis的大體框架,可以作為上述配置的一個補述:

Spring集成MyBatis框架

也就是說,MyBatis會根據XML配置Mapper去組成數據庫查詢,然后把查詢中所涉及的參數、返回結果,都映射成為Java對象(或元數據類型)。最后交由數據庫去執行,返回。

三、dao接口

?
1
2
3
4
5
6
7
8
9
10
11
package lekko.code.test.dao;
import lekko.code.test.model.TestModel;
import org.springframework.stereotype.Repository;
/**
 * 測試DAO
 */
@Repository
public interface TestDao {
 TestModel getTest(String name);
 int addTest(String name);
}

上面這個接口,由于屬于包lekko.code.**.dao,所以會被識別為需要映射的dao。

接口只有兩個方法,一個是查詢getTest,一個是新增addTest。至于getTest已經根據需要,我這里提取成了一個實體類TestModel:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package lekko.code.test.model;
/**
 * 測試數據類
 */
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映射

?
1
2
3
4
5
6
7
8
9
10
<?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>

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

至此,大體的使用介紹已經完畢。MyBatis還是挺不錯的,建議大家在業務合適的情況下試用試用。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/lekko/p/6367732.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品 视频一区 二区三区 | 亚洲一区二区三区在线播放 | 久久99re热在线播放7 | 精品老司机在线视频香蕉 | 四虎永久免费在线观看 | 国模孕妇季玥全部人体写真 | 调教老师肉色丝袜的故事 | 欧美日韩专区国产精品 | 久久99国产精品二区不卡 | 插得好爽| 色就色欧美综合偷拍区a | 欧美18一19性高清hd4k | 特黄a大片免费视频 | www在线看| 国产精品suv一区二区 | 亚洲国产欧美另类 | 91嫩草国产在线观看免费 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 俄罗斯妈妈235 | 无限观看社区在线视频 | 日韩精品久久不卡中文字幕 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | pregnantxxx孕交| blacked亚裔videoshd| 美女任你模 | 亚洲国产日韩制服在线观看 | 天天爽视频| 亚洲AV无码一区二区三区乱子伦 | 2019nv天堂香蕉在线观看 | 失禁尿丝袜vk | 欧美成人中文字幕 | 青青热久久综合网伊人 | 催奶师小说 | 成人免费毛片一区二区三区 | 乌克兰粉嫩摘花第一次 | 精品网站 | 成年美女黄网色大观看全 | 国产xxxxxx久色视频在 | 奇米影视4444 | 四虎免费看黄 | 校花被老头夺去第一次动图 |