你知道目前最流行的Mybatis框架嗎?如何搭建呢?

MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。

iBATIS一詞來(lái)源于“internet”和“abatis”的組合,是一個(gè)基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索封裝。MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

mybatis不是一個(gè)完全的orm框架,Mybatis需要程序員自己寫(xiě)sql,但是也存在映射(輸入?yún)?shù)映射,輸出結(jié)果映射),學(xué)習(xí)門(mén)檻mybatis比hibernate低;同時(shí)靈活性高,特別適用于業(yè)務(wù)模型易變的項(xiàng)目,使用范圍廣。

簡(jiǎn)單概括:更加簡(jiǎn)化jdbc代碼,簡(jiǎn)化持久層,sql語(yǔ)句從代碼中分離,利用反射,將表中數(shù)據(jù)與java bean 屬性一一映射即ORM(Object Relational Mapping 對(duì)象關(guān)系映射)

使用范圍:

在日常的開(kāi)發(fā)項(xiàng)目中,如中小型項(xiàng)目,例如ERP(Crm客戶關(guān)系管理系統(tǒng),OA系統(tǒng)),需求與關(guān)系模型相對(duì)固定建議使用Hibernate,對(duì)于需求不固定的項(xiàng)目,比如:互聯(lián)網(wǎng)項(xiàng)目,建議使用mybatis,因?yàn)?b>需要經(jīng)常靈活去編寫(xiě)sql語(yǔ)句。總之,mybatis成為當(dāng)下必須學(xué)習(xí)掌握的一個(gè)持久層框架。

Mybatis框架搭建的方式

新建Maven項(xiàng)目

log4j 日志添加

resources目錄下配置文件添加

映射文件添加

實(shí)體類Customer添加

在父類工程pom獲取資源

測(cè)試

案例實(shí)操

1.新建Maven項(xiàng)目

新建maven項(xiàng)目 ,pom文件添加依賴jar


<dependency>??

<groupId>org.mybatis</groupId>?

<artifactId>mybatis</artifactId>??

<version>3.4.1</version>

</dependency>


<dependency>??

<groupId>mysql</groupId>?

<artifactId>mysql-connector-java</artifactId>?

<version>5.1.39</version>

</dependency>


<dependency>?

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>?

<version>1.2.16</version>

</dependency>

2.log4j 日志添加

在src/main/resources 資源包下添加log4j日志輸出properties文件,便于查看日志輸出信息

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

#Consoleoutput...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.resources目錄下配置文件添加

新建mybatis.xml文件,并加入配置信息如下(數(shù)據(jù)庫(kù)名mybatis,表 user)


"http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>

<environments default="development">

<environment id="development">


<transactionManager type="jdbc"?/>


<dataSource type="pooled">

<property name="driver" value="com.mysql.jdbc.Driver"?/>

<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring-test"?/>

<property name="username" value="root"?/>

<property name="password" value=""/>

</dataSource>

</environment>

</environments>


<mappers>

<mapper resource="com/xxx/mapper/CustomerMapper.xml"?/>

</mappers>

</configuration>

對(duì)于標(biāo)簽的配置可能不會(huì)出現(xiàn)自動(dòng)提示:

解決辦法:引入mybatis-3-config.dtd 文件

Window-preferences-搜索xml-xml catalog

在User Specified Entries目錄下 ? add->

Locattion:http://mybatis.org/dtd/mybatis-3-mapper.dtd ? ? (值與xml模板中對(duì)應(yīng)) Key Type:URI Key:-//mybatis.org//DTD Mapper 3.0//EN ? ? (值與xml模板中對(duì)應(yīng)) 第二步: 關(guān)閉xml,重新打開(kāi),如果重新打開(kāi)不可以,重啟Eclipse即可。

最后點(diǎn)擊確定即可

4.映射文件添加

新建CustomerMapper.xml配置文件


PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">


1.命名空間配置 ?全局唯一 ?包名+文件名

2.配置Mapped Statement?

3. statement配置?

id 值聲明statement編號(hào) ?同一命名空間(同一文件)下不可重復(fù)

parameterType ?輸入?yún)?shù)即占位符的數(shù)據(jù)類型 ?類型可以是 基本數(shù)據(jù)類型,字符串,java bean ,map,list等

resultType ? ? 輸出結(jié)果 ?類型可以是基本數(shù)據(jù)類型,字符串,java bean,map等

statement 描述 即待執(zhí)行的sql

#{id} ?占位符 ?變量名為id/value 均可 ? ${value} ?變量名必須為value 字符串拼接形式 ?無(wú)法避免sql 注入

-->

<mapper namespace="com.xxx.mapper.customerMapper">


<select id="queryCustomerById" parameterType="int" resultType="com.xxx.pojo.Customer">

SELECT id,user_name 'userName',user_balance 'userBalance' FROM ?yg_customer WHERE ?id=#{id}

</select>

</mapper>

5.實(shí)體類Customer添加

package com.xxx.pojo;

public class Customer {

private ?int id;

private ?String userName;

private ?String userBalance;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserBalance() {

return userBalance;

}

public void setUserBalance(String userBalance) {

this.userBalance = userBalance;

}

@Override

public String toString() {

return "Customer{" +

"id=" + id +

", userName='" + userName + '\'' +

", userBalance='" + userBalance + '\'' +

'}';

}

}

6.在父類工程pom獲取資源

<build>

<resources>

<resource>

<directory>src/main/java</directory>

<includes>

<include>**/*.xml</include>

</includes>

</resource>

<resource>

<directory>src/main/resources</directory>

<includes>

<include>**/*.xml</include>

<include>**/*.properties</include>

</includes>

</resource>

</resources>

</build>

7.測(cè)試

@Test

public void test() throws IOException {?

/**?

a)、讀取mybatis的配置文件

b)、加載配置文件創(chuàng)建SqlSessionFactory?

c)、根據(jù)SqlSessionFactory創(chuàng)建SqlSession?

d)、通過(guò)sqlSession操作數(shù)據(jù)庫(kù)

e)、處理結(jié)果

f)、關(guān)閉session?

*/?

/**

* 加載配置到內(nèi)存?

*/?

InputStream is= Resources.getResourceAsStream("mybatis.xml");

/**

* ?創(chuàng)建SqlSessionFactory 對(duì)象 ?hibernate 也是如此 必須先獲取SqlSessionFactory 實(shí)例化對(duì)象 ? ? ? */

SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);

/**?

* ?獲取session以便操作數(shù)據(jù)庫(kù)

* ?參數(shù)一:指定UserMapper.xml 映射文件id ?必須加入命名空間?

* ?參數(shù)二: 指定輸入?yún)?shù)

*/

SqlSession session=factory.openSession();?

Customer customer = session.selectOne("com.xxx.mapper.customerMapper.queryCustomerById", 2);

/**

* 將返回的結(jié)果輸出

*/?

System.out.println(customer);?

/**?

* 操作完數(shù)據(jù)庫(kù) 關(guān)閉session

*/

session.close();

}

擴(kuò)展

MyBatis 框架體系結(jié)構(gòu)

說(shuō)明:

1 Configuration-mybatis配置

1)、與spring 一樣,可以通過(guò)配置文件或注解的形式進(jìn)行配置;

2)、mybatis.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運(yùn)行環(huán)境等信息;

3)、mapper文件即sql映射文件,文件中配置了操作數(shù)據(jù)庫(kù)的sql語(yǔ)句。此文件需要在mybatis.xml中加載。

4)、有了配置文件后,通過(guò)mybatis環(huán)境等配置信息構(gòu)造SqlSessionFactory即會(huì)話工廠

5)、由會(huì)話工廠創(chuàng)建sqlSession即會(huì)話,操作數(shù)據(jù)庫(kù)需要通過(guò)sqlSession進(jìn)行

6)、sqlSession使用Executor(數(shù)據(jù)庫(kù)操作執(zhí)行器接口)操作數(shù)據(jù)庫(kù),同Executor 具體實(shí)現(xiàn)類實(shí)現(xiàn)指定dao 層數(shù)據(jù)訪問(wèn)操作。

2 Mapped Statement

框架底層封裝對(duì)象(sql語(yǔ)句、輸入?yún)?shù)、輸出結(jié)果類型),它包裝了mybatis配置信息及sql映射信息等,mapper文件(即Mapper.xml)中一個(gè)sql對(duì)應(yīng)一個(gè)Mapped Statement對(duì)象,sql的id即是Mapped statement的id。

3 Sql的輸入映射參數(shù)

基本和簡(jiǎn)單類型、HashMap、自定義POJO等。輸入?yún)?shù)映射就是jdbc編程中對(duì)preparedStatement設(shè)置參數(shù),Executor通過(guò)Mapped Statement在執(zhí)行sql前將輸入的java對(duì)象映射至sql中。

4 Sql的輸出映射參數(shù)

基本和簡(jiǎn)單類型、HashMap、自定義POJO。 Statement對(duì)sql執(zhí)行輸出結(jié)果進(jìn)行定義,輸出結(jié)果映射過(guò)程相當(dāng)于jdbc編程中對(duì)結(jié)果的解析處理過(guò)程,Executor通過(guò)Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對(duì)象中。

這里使用Maven 工程,對(duì)應(yīng)的mybatis jar包下載通過(guò)maven 倉(cāng)庫(kù)統(tǒng)一管理下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容