實戰看這一篇,面試就可以吹牛了

1、 Mybatis簡介

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

MyBatis是這個框架現在的名字,而此框架最早的名字是IBatis,其含義是“internet”、“abatis”兩個單詞的組合,是在2002年的時候開始的一個開源項目,在2010年6月16日Apache將項目交與Google進行管理,更名MyBatis。所以2010年之後,MyBatis框架逐漸成為主流,比Hibernate發展更快。

IBatis和MyBatis兩者的操作原理是相同的。IBatis變為了MyBatis之後,核心操作沒有改變,但是配置部分有部分變化。

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

持久層發展:實體Bean的設計思想 → JDO → Hibernate → MyBatis → JPA標準。MyBatis的性能優於Hibernate。

MyBatis官網:https://mybatis.org/mybatis-3/

2、 第一個MyBatis程序

本次使用Eclipse的Maven進行項目的構建,在pom.xml文件中添加如下代碼;如果使用普通Java項目按需添加Jar包即可

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

在項目下新建目錄:config,將config目錄添加到classpath中(Build Path)。

範例:配置數據庫信息config/dbconfig.properties

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

範例:MyBatis核心配置文件config/mybatis-config.xml

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

對於一些配置做如下解釋:

關於“<transactionmanager> ”配置

此處表示進行事務的配置,但是在MyBatis中有兩種事務配置方式:

· JDBC :表示使用 JDBC 這種比較簡單的方式進行事務的提交或回滾,同時它依賴於從數據源得到的連接來管理事務形式;

· MANAGED:此配置幾乎沒有什麼用處,它即不提交事務也不回滾事務,而是讓容器來管理整個生命週期(例如:Spring 就是一個容器,負責所有對象的生命週期的控制) 。

關於“<datasource> ”配置/<datasource>

dataSource 主要使用基本的 JDBC 數據源接口來配置 JDBC 連接對象。而在 MyBatis 之中提供有三種可用的數據源配置類型:

· UNPOOLED:這個數據源的實現是每次請求時簡單打開和關閉連接操作。不過它的性能有一些慢,如果是一些簡單的應用程序可以適用,因為它不需要及時取得可用連接。不過不同的數據庫對此操作的表現也有所不同,所以對某些數據庫來說配置數據源不重要,那麼使用的機會也就少了,幾乎不用;

· POOLED :是 JDBC 連接對象的數據源連接池的實現,用來避免創建新的連接實例時必要的初始連接和認證時間,速度會快一些,這個是現在開發之中主要使用的形式;

· JNDI:使用一些容器裡面配置的數據庫連接池,此處就是配置一個名稱引用。

關於“<mappers> ”配置/<mappers>

這塊為 MyBatis 的核心配置,主要是利用它來決定操作的數據表。

建立一張emp表,創建對應的簡單Java類也是Emp類。

範例:建立數據庫腳本

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

範例:定義簡單Java類--Emp.java

<code>public class Emp {
\t private Integer empno;
\t private String ename;
\t private String job;
\t private Integer mgr;
\t private Date hiredate;
\t private double sal;
\t public Integer getEmpno() {
\t return empno;
\t }
\t public void setEmpno(Integer empno) {
\t this.empno = empno;
\t }
\t public String getEname() {
\t return ename;
\t }
\t public void setEname(String ename) {
\t this.ename = ename;
\t }
\t public String getJob() {
\t return job;
\t }
\t public void setJob(String job) {
\t this.job = job;
\t }
\t public Integer getMgr() {
\t return mgr;
\t }
\t public void setMgr(Integer mgr) {
\t this.mgr = mgr;
\t }
\t public Date getHiredate() {
\t return hiredate;
\t }
\t public void setHiredate(Date hiredate) {
\t this.hiredate = hiredate;
\t }
\t public double getSal() {
\t return sal;
\t }
\t public void setSal(double sal) {
\t this.sal = sal;
\t }
\t @Override

\t public String toString() {
\t return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job
\t + ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal="
\t + sal + "]";
\t }
}/<code>

此時雖然建立了Java類,但是簡單Java類一定需要一個與它配合的映射文件。數據庫Emp表對應的簡單Java類是Emp.java,與Java類同一路徑下新建EmpMapper.xml文件。

範例:定義EmpMapper.xml文件

<code>
br> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">/<code>

<code><mapper>
<select>
SELECT * FROM emp WHERE empno = #{empno}
/<select>


<insert>
INSERT INTO emp(empno,ename,job,mgr,hiredate,sal)
VALUES (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal})
/<insert>
/<mapper>/<code>

增加操作之中是針對於簡單Java類之中的內容進行取出並填充,所以在訪問屬性的時候使用“#{屬性名稱}”,編寫SQL語句時最後一定不要加“;”。

多個XML配置文件及POJO之間相互引用,初學MyBatis容易出錯。配置文件之間的引用關係如下圖

Mybatis教程 | 實戰看這一篇,面試就可以吹牛了

範例:編寫程序完成數據增加操作

<code>public class Test {
\tpublic static void creat(SqlSession sqlSession) {
Emp emp = new Emp();
/**/<code>

* 測試時運行第二次會報錯:Duplicate entry '7499' for key 'PRIMARY'

* 原因是主鍵衝突了,修改Empno即可。

*/

<code> emp.setEmpno(7499); 
emp.setEname("ALLEN");
emp.setJob("SALESMAN");
emp.setMgr(7695);
emp.setHiredate(new Date());
emp.setSal(1600.00);

System.out.println("數據更新行數:"
+ sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne",emp));
sqlSession.commit(); // 事務提交
}

public static void selectByEmpNo(SqlSession sqlSession,int empno) {
System.out.println(sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne",empno));
}
public static void main(String[] args) {

try {
// 1、取得操作的SqlSession對象
String resource = "mybatis-config.xml"; // MyBatis配置文件路徑
Reader reader = Resources.getResourceAsReader(resource); // 當前配置文件輸入流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 數據庫會話工廠
SqlSession sqlSession = sqlSessionFactory.openSession(); // 取得連接

// 2、操作簡單Java類
// creat(sqlSession); // 增加數據
selectByEmpNo(sqlSession,7499); // 按empno查詢數據

sqlSession.close(); // 關閉連接
} catch(IOException e) {
e.printStackTrace();
}
}
}/<code>

此時數據庫之中已經正常保存了我們添加的數據。

總結一下MyBatis操作的步驟:

· 通過 Resources 取得配置文件(mybatis-config.xml )的信息,通過 Resource 取得一個 Reader 對象路徑;

· 通過此 Reader對象肯定要讀取配置,讀取的配置用於實例化 SqlSessionFactoryBuilder 類對象,通過 SqlSessionBuilder 來建立 SqlSessionFactory 類對象;

· 利用 SqlSessionFactory 打開 SqlSession 對象;

· 利用 SqlSession 來實現數據的 CRUD 操作;

· 如果是更新則提交事務後關閉連接。


分享到:


相關文章: