天天看點

MyBatis 基本構成與架構搭建

核心元件

    SqlSessionFactoryBuilder (構造器)

        根據配置資訊(eg:mybatis-config.xml)或者代碼來生成SqlSessionFactory。

    SqlSessionFactory(工廠接口)

        依靠工廠來生成SqlSession

     SqlSession(類似于JDBC的Connection)

        線程不安全

        擷取映射器,讓映射器通過命名空間和方法名稱找到對應SQL,發送給 資料庫執行後傳回結果。

        直接通過命名資訊去執行SQL傳回結果(iBatis版本留下的方式)

    SQL Mapper(映射器)

        MyBatis新元件,通常由一個Java Interface和XML檔案構成,需給出對應的SQL和映射規則。

        負責發送SQL去執行,并傳回接口。

MyBatis 基本構成與架構搭建

 架構 搭建

-src

    -java

     -SQLDao

    -MessageModel<POJO類>

       -SQLHandle<Mapper接口>

     -TestSQL<運作Test>

    -resource

    -message.xml<MapperXML檔案 >

         -mybatis-configure.xml<配置檔案>

mybatis-configure.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>
    <!-- 實體類别名,對應映射檔案中的resultType -->
    <typeAliases>
        <typeAlias alias="message" type="SQLDao.MessageModel"/>
    </typeAliases>

    <!-- 資料庫連接配接配置,配置連接配接字元串、使用者名、密碼或緩存、懶加載、語句執行逾時時間等這裡目前隻配置了基本的資料庫連接配接屬性 -->
    <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/testdb" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <!-- 實體與資料庫表映射檔案位置,配置後MyBatis才會找到并加載上 -->
    <mappers>
        <mapper resource="message.xml" />
    </mappers>
</configuration>           

複制

MessageModel

package SQLDao;

public class MessageModel {
    public int CarID;
    public int postionX;
    public int postionY;
    public int speed;

    public int getCarID() {
        return CarID;
    }

    public void setCarID(int carID) {
        CarID = carID;
    }

    public int getPostionX() {
        return postionX;
    }

    public void setPostionX(int postionX) {
        this.postionX = postionX;
    }

    public int getPostionY() {
        return postionY;
    }

    public void setPostionY(int postionY) {
        this.postionY = postionY;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }
}           

複制

SQLHandle

package SQLDao;

public interface SQLHandle {
    public int addhistory(MessageModel model);
}           

複制

TestSQL

package SQLDao;

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 java.io.IOException;
import java.io.Reader;

public class TestSQL {
    /**
     * SqlSessionFactory是用來建立SqlSession的工廠,SqlSession會執行映射的語句,進行事物送出、復原等。
     *
     * @return
     */
    public static SqlSessionFactory getSqlSessionFactory() {
        Reader reader = null;
        SqlSessionFactory sqlSessionFactory = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }


    public static void selectUserByID() {
        // 得到SqlSession執行個體,便于執行增删改查、事務送出復原等操作。
        SqlSession session = getSqlSessionFactory().openSession();
        MessageModel messageModel = new MessageModel();
        messageModel.setCarID(1);
        messageModel.setPostionX(2);
        messageModel.setPostionY(3);
        messageModel.setSpeed(4);
        try {
            SQLHandle handle=session.getMapper(SQLHandle.class);
            handle.addhistory(messageModel);
        } finally {
            session.close();
        }
    }

    public static void main(String[] args)  {
        selectUserByID();
    }
}           

複制