天天看點

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

MyBatis初識

  • 下載下傳jar包、建庫建表、建立項目
  • 建立 MyBatis 的配置檔案
  • 建立持久化類
  • 建立接口和映射檔案
  • 建立測試類
  • mybatis入門手冊

要使用 MyBatis, 隻需将 mybatis-x.x.x.jar 檔案置于 classpath 中即可。

下載下傳jar包、建庫建表、建立項目

Mybatis jar包下載下傳位址:https://github.com/mybatis/mybatis-3/releases.

此次使用3.4.5版本jar包。

Mysql的jar包,https://dev.mysql.com/downloads/j/

建庫建表插入資料:

CREATE DATABASE mybatis;
USE mybatis;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` varchar(20) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mybatis`.`users` (`id`, `name`, `age`, `sex`) VALUES ('1', '小美', '10', '女');
           
MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

通過IDE建立一個JAVA項目,導入下列jar包

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

項目結構如下圖所示:

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

建立 MyBatis 的配置檔案

在 src 目錄下建立 MyBatis 的核心配置檔案 mybatis-config.xml,在該檔案中配置了資料庫環境和映射檔案的位置,具體内容如下:

<?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>
    	<!-- MySQL資料庫驅動 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <!-- 連接配接資料庫的URL -->
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"/>    
        <!-- 連接配接資料庫的使用者 -->
        <property name="username" value="root"/>
        <!-- 連接配接資料庫的密碼 -->
        <property name="password" value="password"/>
    </properties>
	<!-- 配置mybatis運作環境 -->
    <environments default="development">
        <environment id="development">
        	<!-- 使用JDBC的事務管理 -->
            <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> 
    <!-- 将mapper檔案加入到配置檔案中 -->
    <mappers>
        <mapper resource="com/mybatis/mapper/UserMapper.xml"/>
    </mappers>    
</configuration>
           

上述映射檔案和配置檔案都不需要完全手動編寫,都可以從 MyBatis 使用手冊中複制,然後做簡單修改。

首先通過DOCTYPE導入mybatis-3-config.dtd,然後alt+/即可自動出現<configuration>節點,

<properties> JDBC連接配接資料庫的四個屬性:驅動、位址、使用者名、密碼。

<environments>配置環境,其子節點<environment>可有多個。

<dataSource>資料庫源配置

最後将<mappers>檔案加入到配置檔案中,使後面一步配置mapper檔案生效 ,該節點可配置多個<mapper>。

上述配置檔案還包括其他例如:<typeHandlers>、<typeAliases>、<objectFactory>等屬性,此處不詳細說明。

建立持久化類

在 src 目錄下建立一個名為 com.mybatis.pojo 的包,,在該包中建立持久化類 User,注意在類中聲明的屬性與資料表 users 的字段一緻。

User 的代碼如下:

package com.mybatis.pojo;

/**
 * 資料庫中users表的持久類
 */
public class User {
    private int id;// 主鍵
    private String name;
    private String age;
    private String sex;
    // getter和setter方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex="
				+ sex + "]";
	}
}
           

建立接口和映射檔案

在 src 目錄下建立一個名為 com.mybatis.mapper 的包,在該包中建立接口UserMapper.java和映射檔案 UserMapper.xml。其中UserMapper.java就是一個對資料庫的通路接口,不用去實作。相當于MVC模式裡的UserDao.java檔案。

UserMapper.java代碼:

package com.mybatis.mapper;

import com.mybatis.pojo.User;

public interface UserMapper {
	User getUserById(int id);
}

           

UserMapper.xml可以了解為在MVC裡的UserDao.java的實作類UserDaoImpl.java。Mybatis架構通過反射和XML解析把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.mybatis.mapper.UserMapper">
    <select id="getUserById" resultType="com.mybatis.pojo.User">
        select * from users where id = #{id}
    </select>
</mapper>
           

上述檔案主要作用是:編寫需要執行的SQL指令。

先導入Dtd,即<!DOCTYPE…>這一長串代碼,之後alt+/ 即可自動彈出該xml的标簽。

元素是配置檔案的根元素,它包含了一個 namespace 屬性,該屬性值通常設定為“包名+SQL映射檔案名”,指定了唯一的命名空間。

子元素 <select> (包括:<insert>、<update> 以及 <delete> )中的資訊是用于執行查詢(添加、修改以及删除)操作的配置。在定義的 SQL 語句中,“#{}”表示一個占位符,相當于JAVA中的“?”,而“#{id}”表示該占位符待接收參數的名稱為 id。

需要注意的地方是,

第5行的namespace:可了解為實作類的全路徑(包名+類名)。此處須定義成mapper.xml檔案對應的mapper接口(此處即UserMapper.java檔案)。如果不寫接口的話,則可随意定義,例如定義成:a.b,則a包下的b類。

第6行的id:方法名。必須是mapper接口的方法名稱(此處即getUserById方法)。若沒定義接口,則可自行定義名稱。

resultType:傳回類型。在這裡必須是User類的絕對路徑(此處查詢的是一個User加粗樣式類)。如果方法傳回值是list,在resultType中寫List的泛型,因為Mybatis對jdbc封裝 一行一行讀取資料。由于架構的反射機制,resultType不能直接寫類名,而要求必須寫類的全路徑,即:com.mybatis.pojo.User。SQL語句中查出的列名,即自動映射到實體類中的屬性,若屬性與列名不同,則會傳回Null,解決方法可将此處的sql查詢出的列名取别名 例如實體類中的name改成userName則mapper.xml中的sql須改成select id,name userName,… from users。

parameterType:定義參數類型,此處沒寫出。

第7行#{id}的“id”即映射mapper接口中getUserById方法的參數。

建立測試類

在 src 目錄下建立一個名為 com.mybatis.test 的包,導入JUnit的jar包後,在該包中建立 MyTest 測試類。

mybatis的核心: 每個MyBatis應用都以一個SqlSessionFactory為核心。一個SqlSessionFactory執行個體能夠通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder能夠從XML配置檔案或者從配置類建構一個SqlSessionFactory執行個體。

SqlSession由SqlSessionFactory建立,SqlSessionFactory是一個接口,其實作類有DefaultSqlSessionFactory和SqlSessionManager,然而DefaultSqlSessionFactory構造方法需要一個configuration參數。當某些類進行執行個體化比較複雜時,可使用了build(建構者)模式(即:SqlSessionFactoryBuilder())進行建構對象,SqlSessionFactoryBuilder()的build(Reader reader)方法的參數是字元流基類。

在測試類中首先使用輸入流讀取配置檔案,然後根據配置資訊建構 SqlSessionFactory 對象。

接下來通過 SqlSessionFactory 對象建立 SqlSession 對象,并使用 SqlSession 對象的方法執行資料庫操作。

MyBatisTest 測試類的代碼如下:

package com.mybatis.test;

import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import com.mybatis.mapper.UserMapper;
import com.mybatis.pojo.User;
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;

public class MyTest {
	@Test
	public void test(){
		try {
		// 讀取配置檔案 mybatis-config.xml
        InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
        // 根據配置檔案建構SqlSessionFactory
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
        // 通過 SqlSessionFactory 建立 SqlSession
        SqlSession ss = ssf.openSession();
        // SqlSession執行映射檔案中定義的SQL,并傳回映射結果
        UserMapper userMapper = ss.getMapper(UserMapper.class);
        // 查詢id=1的使用者
        User user = userMapper.getUserById(1);
        System.out.println(user);
        // 送出事務
        //ss.commit();
        // 關閉 SqlSession
        ss.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

           

右擊運作進行測試,結果如下:

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

每個MyBatis應用都以一個SqlSessionFactory為核心,可建立一個util包,可進行将建立 SqlSession進行封裝。

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

SessionFactory 代碼如下:

package com.mybatis.util;

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;

/**
 * 擷取SqlSession執行個體
 */
public class SessionFactory {
    public static SqlSession getSqlSession(String resource) throws IOException{
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        return sqlSession;
    }
}

           

之後的測試類可改成:

package com.mybatis.test;

import static org.junit.Assert.*;
import java.io.IOException;
import com.mybatis.mapper.UserMapper;
import com.mybatis.pojo.User;
import com.mybatis.util.SessionFactory;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyTest {

	@Test
	public void test() throws IOException {
        String resource = "mybatis-config.xml";        //擷取mybatis配置檔案路徑
        SqlSession sqlSession = SessionFactory.getSqlSession(resource);    //通過SessionFactory工具類(此工具類為自己構造即util包中的SessionFactory)構造SqlSession
        
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUserById(1);
        System.out.println(user);
	}
	
}

           

測試結果:

MyBatis入門第一個程式下載下傳jar包、建庫建表、建立項目建立 MyBatis 的配置檔案建立持久化類建立接口和映射檔案建立測試類mybatis入門手冊

測試結果相同。

mybatis的第一個入門demo程式完成。

mybatis入門手冊

傳送門:https://mybatis.org/mybatis-3/zh/getting-started.html

繼續閱讀