1. 程式人生 > >MyBatis | 入門和基礎

MyBatis | 入門和基礎

一、什麼是 MyBatis ?

官方部落格是這麼說的:MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

簡單的來說,就是之前將資料庫表中的欄位與 JavaBean 的屬性相對映,同時,Sql 語句可以不用嵌在程式碼中,而只需要寫在 XML 配置檔案中

二、如何使用 Mybatis ?

2.1 所需架包

mybatis-3.4.6.jar

mysql-connector-java-5.1.41.jar

log4j-1.2.17.jar

#####2.2 配置檔案

######①. log4j.properties

配置 log4j 日誌檔案

# Global logging configuration

# developer–>DEBUG productor–>INFO or ERROR

log4j.rootLogger=DEBUG, stdout

# MyBatis logging configuration…

log4j.logger.org.mybatis.example.BlogMapper=TRACE

# Console output…

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

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

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

中引用 sql 對映檔案,這在後面也會詳細講述

2.3 編寫程式碼

首先得有一個 POJO 類,這裡我定義的是 Employee.java

public class Employee {

private Integer id;

private String lastName;

private String email;

private String gender;

public Integer getId() {

return id;

}

public void setId(Integer id) {

}

}

當然只列舉了部分

①. 從 XML 中構建 SqlSessionFactory

這裡我參照的是 MyBatis 官方文件給出的程式碼,我先寫一個獲取 SqlSessionFactory 物件的類,該類返回的是 SqlSessionFactory 的例項

private SqlSessionFactory getSqlSessionFactoty() throws IOException {

String resource = “mybatis-config.xml”;

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

return sqlSessionFactory;

}

這裡使用類路徑下的資原始檔進行配置,該資原始檔是全域性配置。

②. 從 SqlSessionFactory 中獲取 SqlSession

SqlSession 包含了面向資料庫執行 SQL 命令所需的所有方法,包括增、刪、改、查等等

selectOne(String statement, Object parameter)

statement:sql 唯一標識, 即對應 mymapper.xml 中設定的 id 值

parameter:執行 sql 要使用的引數,比如 id,name 等等

@Test

void test() throws IOException {

//1. 根據 xml 配置檔案(全域性配置檔案)建立一個 SqlSessionFactory

SqlSessionFactory sqlSessionFactory = getSqlSessionFactoty();

//2. 獲取 sqlSession 例項, 能直接執行已經對映的 sql 語句

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

Employee employee = sqlSession.selectOne(“emp”, 3);

System.out.println(employee);

} finally {

sqlSession.close();

}

}

可以看到,上面的 selectOne 方法的第一個引數已經設定,這是因為我已經配置好了 sql 對映檔案 mymapper.xml

select id, last_name lastName, email, gender from Employee where id = #{id}

介紹一下配置檔案的引數(當然,這只是最基本的幾個引數,更加詳細的介紹會在之後文章)

namespace:名稱空間,這種方式可以隨意設定名稱空間的值

id:標識對映檔案中的sql,SqlSession 的 selectOne 的第一個引數就是對應的這個 id

#{id}:從傳遞過來的引數中獲取 id 值,類似於 jdbc 中的 “?”

resultType:指定輸出結果的型別,即查詢結果所對映的java物件,這裡返回的物件是 Employee

以下是這段程式碼的執行流程:

根據全域性配置檔案(mybatis-config.xml), 建立一個 SqlSessionFactory 物件, 該配置檔案包含資料來源的配置資訊

sql 對映檔案(mymapper.xml), 用來寫 sql 語句, 配置了每一個 sql, 以及 sql 的封裝規則

將 sql 對映檔案註冊在全域性配置檔案中

1). 根據全域性配置檔案得到 SqlSessionFactory

2).使用 SqlSessionFactory, 獲取到 sqlSession 物件, 並使用該物件來執行增刪改查操作,一個 sqlSession 就是代表和資料庫的一次會話, 用完關閉

3).使用 sql 的唯一標誌(配置檔案的 id 屬性)來告訴 mybatis 執行哪個 sql. 語句都是儲存在 sql 對映檔案中的

但是,官方還給我們提供了另外一種方式,介面式程式設計。即在接口裡面定義對資料庫的各種操作方式,然後將介面類名對應到 sql 配置檔案的名稱空間中(namespace)

我們先寫一個介面類

public interface EmployeeMapper {

public Employee getEmployee(Integer id);

}

把介面類對映到 sql 配置檔案的 namespace 中,id 即為介面中的方法名,這裡是 getEmployee,resultType 即執行語句返回的物件,這裡是 Employee

select id, last_name lastName, email, gender from Employee where id = #{id}

接下來寫測試程式碼

@Test

void test2() throws IOException {

//1. 獲取 sqlSessionFactory 物件

SqlSessionFactory sqlSessionFactory = getSqlSessionFactoty();

//2. 獲取 sqlSession 物件

SqlSession sqlSession = sqlSessionFactory.openSession();

try {

//3. 獲取介面的實現類物件, 會為介面自動建立一個代理物件, 代理物件去執行增、刪、改、查

EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

Employee employee = employeeMapper.getEmployee(1);

System.out.println(employee);

} finally {

sqlSession.close();

}

}

流程:

介面式程式設計

原生:Dao ====> DaoImpl

如今:Mapper ====> xxMapper.xml

SqlSession 代表和資料庫的一次會話, 用完必須關閉

SqlSession 和 Connection 一樣, 都是非執行緒安全的, 每次使用都應該去獲取新的物件,如 private SqlSession sqlSession 這種共享的物件, 不應該使用

mapper 介面沒有實現類, 但是 mybatis 會為這個介面生成一個代理物件(介面與 xml 進行繫結),即 sqlSession.getMapper(EmployeeMapper.class)

兩個重要的配置檔案

mybatis-config.xml: mysql:全域性配置檔案, 包含資料庫連線池資訊, 事務管理器資訊等

mymapper.xml: sql:對映檔案, 儲存了每一個 sql 語句的對映資訊. 將 sql 語句抽取出來

瀋陽性病醫院哪家好