MyBatis1:MyBatis入門

五月的倉頡發表於2016-03-08

MyBatis是什麼

MyBatis是什麼,MyBatis的jar包中有它的官方文件,文件是這麼描述MyBatis的:

MyBatis is a first class persistence framework with support for custom SQL, stored procedures
and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of
parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration
and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.

翻譯過來就是:MyBatis是一款支援普通SQL查詢、儲存過程和高階對映的持久層框架。MyBatis消除了幾乎所有的JDBC程式碼、引數的設定和結果集的檢索。MyBatis可以使用簡單的XML或註解用於引數配置和原始對映,將介面和Java POJO(普通Java物件)對映成資料庫中的記錄。

本文先入門地搭建表、建立實體類、寫基礎的配置檔案、寫簡單的Java類,從資料庫中查出資料,深入的內容後面的文章再逐一研究。

 

建表、建立實體類

從簡單表開始研究MyBatis,所以我們先建立一張簡單的表:

create table student
(
  studentId          int                        primary key     auto_increment    not null,
  studentName        varchar(20)                                                  not null,
  studentAge         int                                                          not null,
  studentPhone       varchar(20)                                                  not null
)charset=utf8

insert into student values(null, 'Jack', 20, '000000');
insert into student values(null, 'Mark', 21, '111111');
insert into student values(null, 'Lily', 22, '222222');
insert into student values(null, 'Lucy', 23, '333333');
commit;

一個名為student的表格,裡面存放了student相關欄位,當然此時我們需要有一個Java實體類與之對應:

public class Student
{
    private int        studentId;
    private String     studentName;
    private int        studentAge;
    private String    studentPhone;
    
    public Student()
    {
        super();
    }

    public Student(int studentId, String studentName, int studentAge,
            String studentPhone)
    {
        this.studentId = studentId;
        this.studentName = studentName;
        this.studentAge = studentAge;
        this.studentPhone = studentPhone;
    }

    public int getStudentId()
    {
        return studentId;
    }
    
    public void setStudentId(int studentId)
    {
        this.studentId = studentId;
    }
    
    public String getStudentName()
    {
        return studentName;
    }
    
    public void setStudentName(String studentName)
    {
        this.studentName = studentName;
    }
    
    public int getStudentAge()
    {
        return studentAge;
    }
    
    public void setStudentAge(int studentAge)
    {
        this.studentAge = studentAge;
    }
    
    public String getStudentPhone()
    {
        return studentPhone;
    }
    
    public void setStudentPhone(String studentPhone)
    {
        this.studentPhone = studentPhone;
    }
    
    public String toString()
    {
        return "StudentId:" + studentId + "\tStudentName:" + studentName + 
            "\tStudentAge:" + studentAge + "\tStudentPhone:" + studentAge;
    }
}

注意,這裡空構造方法必須要有,SqlSession的selectOne方法查詢一條資訊的時候會呼叫空構造方法去例項化一個domain出來。OK,這樣student表及其對應的實體類Student.java就建立好了。

 

寫config.xml檔案

在寫SQL語句之前,首先得有SQL執行環境,因此第一步是配置SQL執行的環境。建立一個Java工程,右鍵src資料夾,建立一個普通檔案,取個名字叫做config.xml,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>
    <typeAliases>
        <typeAlias alias="Student" type="com.xrq.domain.Student"/>
    </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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="student.xml"/>
    </mappers>
</configuration>

這就是一個最簡單的config.xml的寫法。接著右鍵src,建立一個普通檔案,命名為student.xml,和mapper裡面的一致(resource沒有任何的路徑則表示student.xml和config.xml同路徑),student.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.xrq.StudentMapper">
    <select id="selectStudentById" parameterType="int" resultType="Student">
        <![CDATA[
            select * from student where studentId = #{id}
        ]]>
    </select>
</mapper>

專門有一個student.xml表示student表的sql語句,當然也可以幾張表共用一個.xml檔案,這個看自己的專案和個人喜好。至此,MyBatis需要的兩個.xml檔案都已經建立好,接下來需要做的就是寫Java程式碼了。

 

Java程式碼實現

首先要進入MyBatis的jar包:

第二個MySql-JDBC的jar包注意一下要引入,這個很容易忘記。

接著建立一個類,我起名字叫做StudentOperator,由於這種運算元據庫的類被呼叫頻繁但是呼叫者之間又不存在資料共享的問題,因此使用單例會比較節省資源。為了好看,寫一個父類BaseOperator,SqlSessionFactory和Reader都定義在父類裡面,子類去繼承這個父類:

public class BaseOperator
{
    protected static SqlSessionFactory ssf;
    protected static Reader reader;
    
    static
    {
        try
        {
            reader = Resources.getResourceAsReader("config.xml");
            ssf = new SqlSessionFactoryBuilder().build(reader);
        } 
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

然後建立子類StudentOperator:

public class StudentOperator extends BaseOperator
{
    private static StudentOperator instance = new StudentOperator();
    
    private StudentOperator()
    {
        
    }
    
    public static StudentOperator getInstance()
    {
        return instance;
    }
    
    public Student selectStudentById(int studentId)
    {
        SqlSession ss = ssf.openSession();
        Student student = null;
        try
        {
            student = ss.selectOne("com.xrq.StudentMapper.selectStudentById", 1);
        }
        finally
        {
            ss.close();
        }
        return student;
    }
}

這個類裡面做了兩件事情:

1、構造一個StudentOperator的單例項

2、寫一個方法根據studentId查詢出一個指定的Student

 

驗證

至此,所有步驟全部就緒,接著寫一個類來驗證一下:

public class MyBatisTest
{
    public static void main(String[] args)
    {
        System.out.println(StudentOperator.getInstance().selectStudentById(1));
    }
}

執行結果為:

StudentId:1    StudentName:Jack    StudentAge:20    StudentPhone:20

看一下資料庫中的資料:

資料一致,說明以上的步驟都OK,MyBatis入門完成,後面的章節,將會針對MyBatis的使用細節分別進行研究。

 

相關文章