天天看點

MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

目錄

  • 一、MyBatis介紹
  • 二、MyBatis工作原理
  • 三、MyBatis環境搭載
  • 四、實作步驟

一、MyBatis介紹

MyBatis是一個支援普通SQL查詢、存儲過程以及進階映射的持久層架構。
MyBatis架構也被稱之為ORM(Object/Relation Mapping,即對象關系映射)
架構。所謂的ORM就是一種為了解決面向對象與關系型資料庫中資料類型
不比對的技術,它通過描述Java對象與資料庫表之間的映射關系,自動将
Java應用程式中的對象持久化到關系型資料庫的表中。
           
MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

ORM架構的工作原理

二、MyBatis工作原理

MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

MyBatis的工作流程

(1)MyBatis讀取核心配置檔案mybatis-config.xml:mybatis-config.xml核心配置檔案主要配置了MyBatis的運作環境等資訊。
(2)加載映射檔案Mapper.xm:Mapper.xml檔案即SQL映射檔案,該檔案配置了操作資料庫的SQL語句,需要在mybatis-config.xml中加載才能執行。
(3)構造會話工廠:通過MyBatis的環境等配置資訊建構會話工廠SqlSessionFactory,用于建立SqlSession。
(4)建立SqlSession對象:由會話工廠SqlSessionFactory建立SqlSession對象,該對象中包含了執行SQL語句的所有方法。
(5)動态生成SQL語句:MyBatis底層定義了一個Executor接口用于操作資料庫,它會根據SqlSession傳遞的參數動态的生成需要執行的SQL語句,同時負責查詢緩存地維護。
(6)MappedStatement對象将傳入的Java對象映射到SQL語句中:SqlSession内部通過執行器Executor操作資料庫,增删改語句通過Executor接口的update()方法執行,查詢語句通過query()方法執行。這兩個執行方法中包含一個MappedStatement類型的參數,該參數是對映射資訊的封裝,存儲了要映射的SQL語句的id、參數等。Mapper.xml檔案中一個SQL語句對應一個MappedStatement對象,SQL語句的id即是MappedStatement的id。
(7)輸入參數映射:在執行Executor類的update()方法和query()方法時,MappedStatement對象會對使用者執行SQL語句時輸入的參數進行定義,Executor執行器會在執行SQL語句之前,通過MappedStatement對象将輸入的參數映射到SQL語句中。Executor執行器對輸入參數的映射過程類似于JDBC程式設計對PreparedStatement對象設定參數的過程。
(8)輸出結果映射:excutor()方法在資料庫中執行完SQL語句後,MappedStatement對象會對輸出的結果進行定義,Executor執行器會在執行SQL語句之後,通過MappedStatement對象将輸出結果映射至Java對象中。Executor執行器将輸出結果映射到Java對象的過程類似于JDBC程式設計對結果的解析處理過程。
           

三、MyBatis環境搭載

使用MyBatis架構進行資料庫開發之前,需要先搭建MyBatis環境,MyBatis環境搭建主要有如下基本步驟。
(1)建立工程;
(2)引入相關依賴;
(3)資料庫準備;
(4)編寫資料庫連接配接資訊配置檔案;
(5)編寫核心配置檔案和映射檔案。
           

1.建立工程:在IntelliJ IDEA中,建立名稱為mybatis的Maven工程

2.引入相關依賴:由于本項目要連接配接資料庫以及對程式進行測試,是以需要在項目的pom.xml檔案中導入MySQL驅動包、Junit測試包、MyBatis的核心包等相關依賴。編寫好pom檔案後,重新加載pom檔案起作用:pom檔案上右鍵-Maven-Reimport

<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.2</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.11</version>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
</dependencies>
<build>
	<resources>
		<resource>
			<directory>src/main/java</directory>
			<includes>
				<include>**/*.properties</include>
				<include>**/*.xml</include>
			</includes>
			<filtering>true</filtering>
		</resource>
	</resources>
</build>
           

3.建立資料庫:在MySQL中建立一個名稱為mybatis的資料庫

4.建立資料庫連接配接資訊配置檔案:在項目的src/main/resources目錄下建立資料庫連接配接的配置檔案,這裡将其命名為db.properties,在該檔案中配置資料庫連接配接的參數。

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=1234
           

5.建立MyBatis的核心配置檔案:在項目的src/main/resources目錄下建立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 resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 資料庫連接配接相關配置 ,db.properties檔案中的内容-->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

           

四、實作步驟

該程式是實作根據id查詢使用者資訊的操作,實作步驟如下:

1.資料準備:在mybatis資料庫中建立users表,并在users表中插入幾條資料。

//使用mybatis資料庫
use mybatis;
//建立users表
create table users(
    uid int primary key auto_increment,
    uname varchar(20) not null,
    uage int not null
);
//向users表中插入資料
insert into users(uid,uname,uage) values(null,'張三',20),(null,'李四',18);
           

2.建立POJO實體:在項目的src/main/java目錄下建立com.zh.pojo包,在com.zh.pojo包下建立User類,該類用于封裝User對象的屬性。

package com.zh.pojo;

public class User {
    private int id;         //使用者id
    private String uname;   //使用者姓名
    private int uage;       //使用者年齡
    //生成getter、setter方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public int getUage() {
        return uage;
    }
    public void setUage(int uage) {
        this.uage = uage;
    }
}

           

3.建立映射檔案UserMapper.xml:在項目的src/main/resources目錄下建立一個檔案夾,在mapper檔案夾下建立映射檔案UserMapper.xml,該檔案主要用于實作SQL語句和Java對象之間的映射,使SQL語句查詢出來的關系型資料能夠被封裝成Java對象。

<?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>
    <select id="findById" parameterType="int" resultMap="com.zh.pojo.User">
        select * from users where uid = #{id}
    </select>
</mapper>
           

4.修改mybatis-config.xml配置檔案:在mybatis-config.xml映射檔案中添加UserMapper.xml映射檔案路徑的配置,用于将UserMapper.xml映射檔案加載到程式中。

<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>
           
MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

5.編寫測試類:在項目的src/test/java目錄下建立Test包,在Test包下建立UserTest類,該類主要用于程式測試。

package Test;

import com.itheima.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;

import java.io.IOException;
import java.io.Reader;

public class UserTest {
    @Test
    public void userFindByIdTest() {
        //讀取檔案名
        String resources = "mybatis-config.xml";
        //建立流
        Reader reader = null;
        try {
            //讀取mybatis-config.xml檔案内容到reader對象中
            reader = Resources.getResourceAsReader(resources);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //初始化mybatis資料庫,建立SqlSessionFactory類的執行個體
        SqlSessionFactory sqlMapper = new
                SqlSessionFactoryBuilder().build(reader);
        //建立SqlSession執行個體
        SqlSession session = sqlMapper.openSession();
        //傳入參數查詢,傳回結果
        User user = session.selectOne("findById", 1);
        //輸出結果
        System.out.println(user.getUname());
        //關閉session
        session.close();
    }
}
           

6.點選運作程式,觀察控制台輸出。

MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

補充:如果出現以下錯誤資訊。

MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟

該問題主要是沒有識别到我們的配置檔案,将resources目錄mark為resources root即可解決

MyBatis入門程式一、MyBatis介紹二、MyBatis工作原理三、MyBatis環境搭載四、實作步驟