Mybatis接口註解

在上一章中,我們已經搭建了 myeclipse,mybatis,mysql 的開發環境,並且實現了 mybatis 的一個簡單的查詢。要注意的是,這種方式是用 SqlSession 實例來直接執行在User.xml文件中映射的 SQL 語句:
session.selectOne("com.yiibai.mybatis.models.UserMapper.getUserByID", 1),但是還有比這更簡單的方法,使用合理描述參數和SQL語句返回值的接口(比如:IUser.class),這樣現在就可以不使用類似User.xml配置文件,至此更簡單,代碼更安全,不容易發生的字符串文字和轉換的錯誤,下面是項目創建的詳細過程:

1、創建一個接口:IUser,並在其中聲明對應的操作方法

src 源碼目錄下創建一個包:com.yiibai.mybatis.dao,並建立接口類 IUser 及一個方法, 在方法上面,我們使用了一個SQL註釋,內容如下:

package com.yiibai.mybatis.dao;

import org.apache.ibatis.annotations.Select;

import com.yiibai.mybatis.models.User;
/**
 * @author yiibai.com
 */
public interface IUser {
     @Select("select * from user where id= #{id}")
     public User getUserByID(int id);
}

請注意,這裏面代碼有一個方法名 getUserByID 必須與 User.xml 裏面配置的 selectid 對應(<select id="getUserByID">)同名,雖使用註解映射不需要User.xml

2、創建對應映射接口 SQL 語句

首先配置 MyBatis 所需的數據連接文件,這裏創建一個文件: src/config/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>
    <typeAliases>
        <typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
    </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://127.0.0.1:3306/testdb" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- // power by http://www.yiibai.com 註釋掉咯...
        <mapper resource="com/yiibai/mybatis/models/User.xml" />-->
    </mappers>
</configuration>

在包:com.yiibai.mybatis.models 下創建一個User.java 類文件,與上一節中 User 類代碼相同,這裏只是拷貝過來,User.java具體的代碼內容如下:

package com.yiibai.mybatis.models;

public class User {
    private int id;
    private String name;
    private String dept;
    private String phone;
    private String website;

    public String getWebsite() {
        return website;
    }
    public void setWebsite(String website) {
        this.website = website;
    }
    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 String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

}

User.java 對應的 XML 配置文件:User.xml 可以少省略,不用創建,本節講解的就是如何消滅類似於User.xml的配置文件。

3、測試接口映射

我們在 src 這個目錄下創建一個類:Main.java,用來測試整個配置和程序運行結果,有關 Main.java 的代碼詳細內容如下:

import java.io.Reader;
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 com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;

public class Main {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static {
        try {
            reader = Resources.getResourceAsReader("config/Configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            sqlSessionFactory.getConfiguration().addMapper(IUser.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }

    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUser iuser = session.getMapper(IUser.class);
            User user = iuser.getUserByID(1);
            System.out.println("名字:"+user.getName());
            System.out.println("所屬部門:"+user.getDept());
            System.out.println("主頁:"+user.getWebsite());
        } finally {
            session.close();
        }
    }
}

運行上面示例代碼,得到以下結果 -

名字:New name, 所屬部門:Tech, 主頁:http://www.yiibai.com

最後補充,整個項目 mybatis-interface-02 的結構如下圖所示:

Mybatis接口註解