我的第一個MyBatis程序

什麼是MyBatis

MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。

什麼叫持久層,簡單的來說,我們訪問一個平臺就會產生一定的數據,比如瀏覽記錄等,這些數據在服務器斷電的時候或者重啓之後就會消失,所謂的持久就是指將數據存放在數據庫中,方便後續使用。所以說MyBatis是一款持久層框架就是說它是工作在DAO層的,和數據庫打交道,MyBatis封裝了jdbc,使我們更方便更高效操作數據庫。

什麼是POJO,POJO就是一些特殊的 類 的名稱,只不過這種 類 除了 get 和set 方法就沒有其他的方法了。

 

創建第一個MyBatis程序

我們需要兩個依賴架包,一個是MyBatis架包,一個是jdbc

MyBatis的架包在GitHub上有。

如:https://github.com/mybatis/mybatis-3/releases

jdbc的架包在Mysql官網

如:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-source.html

 

步驟

1,創建一個數據庫爲“test” ,然後創建一個數據表“Student”,自己添加幾條數據。

2,創建一個POJO類,取名Student。

項目結構如圖所示:

Student類:

public class Student {
    private int id;
    private String name;
    private int age;

    public Student(){ }

    public Student(int id, String name, int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{ id="+id+", name='"+name+"', age="+age+"}";
    }
}

3,創建一個映射文件,用於映射Student類,取名爲:StudentMapper.xml

MyBatis中,映射文件的取名一般約定爲 xxxMapper.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.entity.StudentMapper">
<!--namespace 填寫映射文件的類路徑-->
    
    <!--id 名稱 resultType 結果集類型 parameterType 輸入類型-->
    <select id="selectStudent" resultType="com.entity.Student" parameterType="int">
       select * from Student where id = #{id}
    </select>

</mapper>

相應的意思已經標註

其中,#{id},表示一個變量佔位符,parameterType即爲#{id}的類型。

4,創建配置文件 conf.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>
    <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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        
        </environment>
    </environments>

    <mappers>
        <!--加載映射問價,填寫映射文件路徑-->
        <mapper resource="com/entity/StudentMapper.xml"/>
    </mappers>

</configuration>

其中:

<transactionManager type="JDBC"/>表示事務的提交方式

JDBC 表示利用JDBC 的方式處理事務,比如:commit,rollback,close

MANAGED 將事務交由其他組件去託管,比如:spring,jobss 。MANAGED 默認會關閉連接,即當一次sql語句執行完畢之後將關閉連接。 也可以選擇不關閉,在後面加上 <peoperty name="closeConnection" value="false" /> 即可。

<dataSource type="POOLED">表示數據源類型

UNPOOLED 傳統的jdbc模式,每次訪問數據庫,均需要打開,關閉等數據庫操作,比較消耗性能。

POOLED 使用數據庫連接池 。不嚴謹的說,數據庫連接池就是數據庫。

JNDI 從tomcat中獲取一個內置的數據庫連接池。

 

<environments default="development"> default 表明我們需要使用哪個數據庫環境,即我們使用名叫development的數據庫環境,是我們的本地環境。

<environment id="development">  environment標籤用於設置不用的數據庫環境,id名稱是給不同的數據庫取不同的名稱。

也就是說我們可以在conf.xml文件中配置很多<environment>標籤,可以有用於測試的數據庫,用於開發的數據庫,用於正式運行的數據庫等。MyBatis如何知道我們到底要使用哪個數據庫呢? 即通過 default="xxxxx"指定

 

5,創建一個測試類 MyBatisTest

首先,只有SqlSession才能訪問數據庫,所以我們得要有SqlSession。SqlSession可以用SqlSessionFactory來創建。

因此:

5.1,將我們配置的conf.xml導入數據流中。

5.2,實例化一個SqlSessionFactory對象。

5.3,用SqlSessionFactory對象實例化一個SqlSession對象。

5.4,通過SqlSession對象的selectOne()方法,訪問數據庫。

SqlSession對象的很多方法的可以通過IDEA的提示看得到

selectOne() 有兩個參數

第一個參數 statement 是映射文件的路徑加上sql語句的id 這樣即可唯一識別一個sql語句。

第二個參數是傳入#{id}的值。

selectOne的返回類型也有說明,在它的映射文件StudentMapper.xml中,resultType即指明瞭返回值的類型。


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 TestMyBatis {
    public static void main(String[] args) throws IOException {
        //加載MyBatis配置文件,訪問數據庫
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //SqlSessionFactory - connection
        //可以通過build的第二個值強行修改數據庫環境
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //session - connection
        SqlSession session = sessionFactory.openSession();
        String statement = "com.entity.StudentMapper.selectStudent";
        Student student = session.selectOne(statement,2);

        System.out.println(student);
        session.close();

    }
}

運行結果如下:

至此第一個MyBatis項目完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章