簡介
MyBatis 是一款優秀的持久層框架,它支援自定義 SQL、儲存過程以及高階對映。MyBatis免除了幾乎所有的 JDBC 程式碼以及設定引數和獲取結果集的工作。MyBatis 可以透過簡單的 XML 或註解來配置和對映原始型別、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄。
其中mybatis的下載,可以透過github獲取,地址:https://github.com/mybatis/mybatis-3
例項準備工作為了便於理解,例項採用eclipse的普通工程加mysql作為講解。
其中資料庫用使用者作為演示的例項,在mysql資料庫中建立使用者表,其使用者結構及資料內容如下:
/*使用者表 */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '使用者編號', `username` varchar(20) DEFAULT NULL COMMENT '使用者名稱', `password` varchar(20) DEFAULT NULL COMMENT '密碼', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;insert into `user`(`id`,`username`,`password`) values (1,'demo','123456');
在eclipse中建立一個java工程。目錄結構如下:
com.example.mybatis.config:用於存放mybatis的配置檔案
com.example.mybatis.entries:用於存放對應的使用者表對應的實體類
com.example.mybatis.mappers:用於存放mytabtis對應對映檔案
test:用於存放對應的測試用例
透過github下載mybatis,把裡面的mybatis-x.x.x.jar、log4j以及對應資料庫型別的驅動放到lib目錄下作為專案環境的依賴jar。
建立及配置MyBatis的資源配置檔案在com.example.mybatis.config建立一個名為mybatis-config.xml的檔案。檔案內容如下:
編寫配置檔案的測試用例,測試配置資訊是否正確。測試用例程式碼如下:
package com.example.mybatis.config;import static org.junit.Assert.*;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;public class MybatisConfigTest { @Test public void test() throws IOException { String resource = "com/example/mybatis/config/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); assertNotNull(sqlSessionFactory); }}
建立使用者的實體類在com.example.mybatis.entries目錄下建立使用者實體類檔案:User.java。
package com.example.mybatis.entries;/** * 使用者實體類 * @author root * */public class User { private Long id; private String username; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; }}
建立針對使用者表實現的對映檔案在com.example.mybatis.mappers目錄下建立一個user.xml的檔案。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mybatis.mappers.user"> <select id="selectById" resultType="com.example.mybatis.entries.User"> select * from user where id = #{id} </select></mapper>
把建立的user.xml新增到mybatis配置檔案的對映器中,即加入<mappers></mappers>中。
測試用例程式碼:
package com.example.mybatis.config;import static org.junit.Assert.*;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import com.example.mybatis.entries.User;public class GetUserInfoByIdTest { @Test public void test() { String resource = "com/example/mybatis/config/mybatis-config.xml"; SqlSession sqlSession=null; try { InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession=sqlSessionFactory.openSession(); User user= sqlSession.selectOne("com.example.mybatis.mappers.user.selectById", 1); System.out.println(user.toString()); assertNotNull(user); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { sqlSession.close(); } }}
測試結果:
測試用例輸出的內容
總結透過示例我們可以發現最終查詢資料是透過SqlSession來實現的。而SqlSession是透過一個會話工廠SqlSessionFactory獲取的。所以每個基於 MyBatis 的應用都是以一個 SqlSessionFactory 的例項為核心的。SqlSessionFactory 的例項可以透過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置檔案或一個預先配置的 Configuration 例項來構建出 SqlSessionFactory 例項。