1. 程式人生 > 其它 >Mybatis入門-01搭建

Mybatis入門-01搭建

Mybatis 入門-01搭建

1. 搭建基於Maven的父工程,匯入相應的包與外掛

 <build>

<plugins>
<!-- 解決maven test命令時console出現中文亂碼亂碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
</plugins>

<!-- 掃描資源 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

1.1. 匯入依賴

 <!--  匯入依賴  -->
<dependencies>
<!-- mysql驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis驅動 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
</dependencies>

2. 建立子工程

基於Maven的專案已經約定好了各個檔案的位置,我們要在resources路徑下建立mybatis-config.xml配置檔案

(每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的例項為核心的。SqlSessionFactory 的例項可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置檔案或一個預先配置的 Configuration 例項來構建出 SqlSessionFactory 例項。)

mybatis-config.xml配置檔案的頭部用來驗證其正確性 DOCTYPE: 文件型別 很明顯是configuration配置型別

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

</configuration>

2.1 從 XML 中構建 SqlSessionFactory

這裡我們需要一個工具類,在java目錄下建立基本的三層目錄com/hd/utils 在其中建立工具類MybatisUtils,它包含一些實用方法,使得從類路徑或其它位置載入資原始檔更加容易。

注意這裡的方式是單例模式+靜態程式碼塊(因為作用域的原因 )

SqlSessionFactoryBuilder

這個類可以被例項化、使用和丟棄,一旦建立了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 例項的最佳作用域是方法作用域(也就是區域性方法變數)。 你可以重用 SqlSessionFactoryBuilder 來建立多個 SqlSessionFactory 例項,但最好還是不要一直保留著它,以保證所有的 XML 解析資源可以被釋放給更重要的事情。

SqlSessionFactory

SqlSessionFactory 一旦被建立就應該在應用的執行期間一直存在,沒有任何理由丟棄它或重新建立另一個例項。 使用 SqlSessionFactory 的最佳實踐是在應用執行期間不要重複建立多次,多次重建 SqlSessionFactory 被視為一種程式碼“壞習慣”。因此 SqlSessionFactory 的最佳作用域是應用作用域。 有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。

SqlSession

每個執行緒都應該有它自己的 SqlSession 例項。SqlSession 的例項不是執行緒安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。 絕對不能將 SqlSession 例項的引用放在一個類的靜態域,甚至一個類的例項變數也不行。 也絕不能將 SqlSession 例項的引用放在任何型別的託管作用域中,比如 Servlet 框架中的 HttpSession。 如果你現在正在使用一種 Web 框架,考慮將 SqlSession 放在一個和 HTTP 請求相似的作用域中。 換句話說,每次收到 HTTP 請求,就可以開啟一個 SqlSession,返回一個響應後,就關閉它。 這個關閉操作很重要,為了確保每次都能執行關閉操作,你應該把這個關閉操作放到 finally 塊中。 下面的示例就是一個確保 SqlSession 關閉的標準模式:

public class MybatisUtils {
//為了使用類名來訪問屬性 設定成靜態的,單例模式的基本形式
private static InputStream inputStream;
private static SqlSessionFactory sqlSessionFactory;

static {
try {
//使用Mybatis獲取sqlSessionFactory物件
String resource = "mybatis-config.xml";
//將resources檔案解析成流?
inputStream = Resources.getResourceAsStream(resource);
//通過這個流建立sqlSessionFactory的例項
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}

}

public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}

2.2 配置資料庫連線

在resources目錄下建立db.properties檔案 並在xml配置中引入

driver: 驅動 指明是什麼型別的資料庫

url: 資源定位符 指明連線資料庫中的哪個庫,並設定一系列連線型別

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;userUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true
username=root
password=jhd963852

2.3 配置xml檔案

注意,此時我們的工具類將讀取mybatis-config.xml 配置檔案,但事實上我們還沒有配置它

(XML 配置檔案中包含了對 MyBatis 系統的核心設定,包括獲取資料庫連線例項的資料來源(DataSource)以及決定事務作用域和控制方式的事務管理器(TransactionManager))

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

<!-- 對映器註冊 目前為空 -->
<mappers>
<mapper/>
</mappers>
</configuration>

2.4 建立基本框架 pojo dao

我們以最簡單的user表為例

1,王大,123456 2,趙二,123456 3,張三,123890 5,Ge,1102233

那麼pojo路徑下需要一個User類,我們直接利用三個註解生成無參,有參,get and set 方法

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}

在dao路徑下,我們需要一個UserMapper介面,它用來定義抽象方法;另外,我們要實現實現一個UserMapper.xml,來實現介面中定義的方法。在UserMapper.xml中;頭部與mybatis-config.xml配置檔案的頭部相似 只是把configuration換成了mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper>
</mapper>

3.CRUD

那麼現在,我們可以進行具體的CRUD了。