程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring集成MyBatis框架

Spring集成MyBatis框架

編輯:關於JAVA

Spring集成MyBatis框架。本站提示廣大學習愛好者:(Spring集成MyBatis框架)文章只能為提供參考,不一定能成為您想要的結果。以下是Spring集成MyBatis框架正文


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

<!-- 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配置

<?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的大體框架,可以作為上述配置的一個補述:

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

三、dao接口

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:

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

<?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還是挺不錯的,建議大家在業務適宜的狀況下試用試用。

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved