Java框架篇---Mybatis 入門

1、Mybatis介紹

MyBatis是一款一流的支持自定義SQL、存儲過程和高級映射的持久化框架。MyBatis幾乎消除了全部的JDBC代碼,也基本不須要手工去設置參數和獲取檢索結果。MyBatis可以使用簡單的XML格式或者註解進行來配置,可以映射基本數據元素、Map接口和POJOs(普通java對象)到數據庫中的記錄。java

2、MyBatis工做流程

(1)加載配置並初始化
  觸發條件:加載配置文件
  配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)接收調用請求
  觸發條件:調用Mybatis提供的API
  傳入參數:爲SQL的ID和傳入參數對象
  處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操做請求 觸發條件:API接口層傳遞請求過來
  傳入參數:爲SQL的ID和傳入參數對象
  處理過程:
  (A)根據SQL的ID查找對應的MappedStatement對象。
  (B)根據傳入參數對象解析MappedStatement對象,獲得最終要執行的SQL和執行傳入參數。
  (C)獲取數據庫鏈接,根據獲得的最終SQL語句和執行傳入參數到數據庫執行,並獲得執行結果。
  (D)根據MappedStatement對象中的結果映射配置對獲得的執行結果進行轉換處理,並獲得最終的處理結果。
  (E)釋放鏈接資源。
(4)返回處理結果將最終的處理結果返回。

orm工具的基本思想

不管是用過的hibernate,mybatis,你均可以法相他們有一個共同點:mysql

  •  從配置文件(一般是XML配置文件中)獲得 sessionfactory.
  •  由sessionfactory  產生 session
  •  在session 中完成對數據的增刪改查和事務提交等.
  •  在用完以後關閉session 。
  •  在java 對象和 數據庫之間有作mapping 的配置文件,也一般是xml 文件。

功能架構

Mybatis的功能架構分爲三層:
  1. API接口層:提供給外部使用的接口API,開發人員經過這些本地API來操縱數據庫。接口層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
  2. 數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次數據庫操做。
  3. 基礎支撐層:負責最基礎的功能支撐,包括鏈接管理、事務管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來做爲最基礎的組件。爲上層的數據處理層提供最基礎的支撐。  

多須要添加的驅動包:sql

下面進行快速入門:數據庫

目錄以下:apache

實體類User緩存

package com.oumyye.model;

public class User {
    private String id;
    private String name;
    private  int age;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
}

映射文件UserMapping.xmlsession

<?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.oumyye.mapping.UserMapping">
    <!-- 在select標籤中編寫查詢的SQL語句, 設置select標籤的id屬性爲getUser,id屬性值必須是惟一的,不可以重複
    使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢返回的結果集類型
    resultType="com.oumyye.model.User"就表示將查詢結果封裝成一個User類的對象返回
    User類就是users表所對應的實體類
    -->
    <!-- 
        根據id查詢獲得一個user對象
     -->
    <select id="getUser" parameterType="String" 
        resultType="com.oumyye.model.User">
        select * from user where id=#{id}
    </select>
</mapper>

資源文件mybatis.xmlmybatis

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置數據庫鏈接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
       
        <mapper resource="com/oumyye/mapping/userMapping.xml"/>
     </mappers>
</configuration>

測試類:架構

package test;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.oumyye.model.User;

public class Tests {
	@Test
	public void test(){
		String resource = "mybatis.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);
        //構建sqlSession的工廠
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
       
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的標識字符串,
         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值,
         * getUser是select標籤的id屬性值,經過select標籤的id屬性值就能夠找到要執行的SQL
         */
        String statement = "com.oumyye.mapping.UserMapping.getUser";//映射sql的標識字符串
        //執行查詢返回一個惟一user對象的sql
        User user = session.selectOne(statement, "1123");
        System.out.println(user.toString());
	}
}

 結果:app

相關文章
相關標籤/搜索