引言
Java互聯(lián)網(wǎng)應(yīng)用可以通過mybatis框架訪問數(shù)據(jù)庫(kù),使用MyBatis框架主要有一下三個(gè)優(yōu)點(diǎn):
- 不屏蔽SQL,開發(fā)人員可以更為精確地定位SQL語(yǔ)句,可以對(duì)其進(jìn)行優(yōu)化和改造,有利于互聯(lián)網(wǎng)系統(tǒng)性能的提高
- 提供強(qiáng)大靈活的映射機(jī)制,提供動(dòng)態(tài)SQL的功能,允許我們根據(jù)不同條件組裝SQL,可維護(hù)性比較高
- 在MyBatis中,提供了Mapper的接口編程,只要一個(gè)XML和一個(gè)接口就能創(chuàng)建映射器,進(jìn)一步簡(jiǎn)化工作,使開發(fā)人員更集中于業(yè)務(wù)邏輯
準(zhǔn)備MyBatis環(huán)境
在搭建環(huán)境時(shí)用的是MyBatis版本為3.4.5(可能無(wú)法下載),我把它上傳到了百度云盤, 密碼: xwaa 方便大家下載.解壓縮后會(huì)看如下文件目錄
MyBatis核心組件
MyBatis組件有四部分:
- SqlSessionFactoryBuilder(構(gòu)造器):它會(huì)根據(jù)配置或者代碼來生成SqlSessionFactory,采用的是分步構(gòu)建的Builder模式
- SqlSessionFactory(工廠接口):依靠它來生成SqlSession,使用的是工廠模式
- SqlSession(會(huì)話):既可以發(fā)送sql執(zhí)行返回結(jié)果,也可以獲取Mapper的接口.在現(xiàn)有的技術(shù)中,一般我們會(huì)讓其在業(yè)務(wù)邏輯代碼中小時(shí),而使用的MyBatis體感那個(gè)的SQL Mapper接口編程技術(shù),能提高代碼的可讀性和可維護(hù)性.
- SQL Mapper:MyBatis新設(shè)計(jì)的組件,它由一個(gè)Java接口和xml文件(或注解)構(gòu)成,需要給出對(duì)應(yīng)的映射規(guī)則.
構(gòu)建SqlSessionFactory
在Mybatis中既可以通過讀取配置的xml文件生成SqlSessionFactory,也可以通過Java代碼的形式生成SqlSessionFactory.一般都采用xml的形式
而在MyBatis中,xml分為兩類,一類是基礎(chǔ)配置文件小腊,一般只有一個(gè),主要是配置一些最基本的上下文參數(shù)和運(yùn)行環(huán)境忿檩;另一類是映射文件,配置映射關(guān)系爆阶、SQL燥透、參數(shù)等信息。先看一份簡(jiǎn)易的基礎(chǔ)配置文件辨图,代碼如下所示:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 數(shù)據(jù)庫(kù)環(huán)境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<!--數(shù)據(jù)源配置 type=POOLED代表采用的MyBatis內(nèi)部提供的連接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/blogdemo"/>
<property name="username" value="root"/>
<property name="password" value="mysql123"/>
</dataSource>
</environment>
</environments>
<!--別名配置-->
<typeAliases>
<!-- 為單個(gè)類配置別名班套,Blogger代表ssm.blog.entity.Blogger -->
<typeAliases alias="Blogger" type="ssm.blog.entity.Blogger">
<!-- 為實(shí)體類包配置別名,整個(gè)包中的類都可以用類名作為別名 -->
<package name="ssm.blog.entity"/>
</typeAliases>
<!--映射文件配置-->
<mappers>
<package name="com.test.pojo"/>
</mappers>
</configuration>
有了基礎(chǔ)配置文件故河,就可以用簡(jiǎn)短的代碼生成SqlSessionFactory了吱韭,代碼如下所示:
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 使用MyBatis提供的Resources類加載配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 構(gòu)建SqlSession的工廠
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
首先讀取mybatis-config.xml,然后通過SqlSessionFactoryBuilder的Builder方法去創(chuàng)建SqlSessionFactory鱼的。
SqlSession
在MyBatis中SqlSession是核心接口理盆。它有兩個(gè)實(shí)現(xiàn)類:一個(gè)是DefaultSqlSession瞻讽,單線程使用;另一個(gè)是SqlSessionManager熏挎,在多線程環(huán)境下使用。SqlSession類似jdbc中的Connection對(duì)象晌砾,代表著一個(gè)資源的啟用坎拐。主要有以下三個(gè)作用:
- 獲取Mapper接口
- 發(fā)送SQL給數(shù)據(jù)庫(kù)
- 控制數(shù)據(jù)庫(kù)事務(wù)
它的創(chuàng)建方法也挺簡(jiǎn)單:
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession控制數(shù)據(jù)庫(kù)事務(wù)的方法:
SqlSession sqlsession=null;
try{
//打開Session會(huì)話
sqlsession=sqlSessionFactory.openSession();
//some code...
//提交事務(wù)
sqlsession.commit();
}catch(Exception e){
sqlsession.rollback;
}finally{
if(sqlsession!=null){
//確保資源被順利關(guān)閉
sqlsession.close();
}
}