1. 程式人生 > >MyBatis入門實驗(2)之介面程式設計

MyBatis入門實驗(2)之介面程式設計

實驗內容

在上一章中,實現了直接通過 sqlSession 執行指定的SQL語句,但如果SqlID拼寫出錯,或者是入引數據型別不正確都可能導致執行時異常,並不能在編譯階段檢查出來。
本次實驗將使用 mybatis 的介面類的方式執行SQL語句從資料庫中取出資料,並封裝成Java物件返回
這種方式更加安全、更加簡單,也是現在主流使用的方式

操作步驟

一、安裝

新增Maven依賴(本文使用版本為3.4.6)

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId
>
mybatis</artifactId> <version>x.x.x</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version> </dependency>

二、建立資料庫及表結構

CREATE TABLE `user`
( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵', `username` varchar(32) NOT NULL COMMENT '使用者名稱', `password` varchar(64) NOT NULL COMMENT '密碼', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'admin', '123');

三、建立 Mybatis 配置檔案

src/main/resources 目錄下建立 mybatis-config.xml 檔案,內容如下

與上一章不同的地方:載入 mappers 時,不僅需要載入XML檔案,還需要載入新建立的介面類

<configuration>
    <properties resource="jdbc.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 載入XML,同時載入介面類 -->
    <mappers>
        <mapper class="tutorial.mybatis.mapper.UserMapper"></mapper>
        <mapper resource="mybatis/User.xml"></mapper>
    </mappers>
</configuration>

src/main/resources 目錄下建立 jdbc.properties 檔案,內容如下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tutorial_mybatis?characterEncoding=utf-8&useSSL=true
jdbc.username=root
jdbc.password=

四、建立實體類和對映檔案

建立包 tutorial.mybatis.model,並在該包下建立 User 類,內容如下

public class User {

    private Long id;

    private String username;

    private String password;

    // 省略 get / set 方法
}

src/main/resources 目錄下建立目錄 mybatis,並在該目錄下建立 User.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">
<!-- 名稱空間修改為介面類的路徑,mybatis 會通過介面類自動定址至相應的XML檔案,獲取SQL語句 -->
<mapper namespace="tutorial.mybatis.mapper.UserMapper">

    <select id="getUserByID" parameterType="int" resultType="tutorial.mybatis.model.User">
        select * from `user` where id = #{id}
    </select>

</mapper>

五、建立介面類

建立包 tutorial.mybatis.mapper,並在該包下建立介面 UserMapper,內容如下

public interface UserMapper {

    User getUserByID(Long id);

}

六、構建

準備工作就緒,開始最終章,建立啟動類 MybatisConfig,內容如下:

與上一章不同的地方:使用 session.getMapper(UserMapper.class) 的方式獲取介面類,然後安全地執行介面類中的方法。

public class MybatisConfig {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.getUserByID(1L);
            if (user != null) {
                String userInfo = "名字:" + user.getUsername()+", 密碼:" + user.getPassword();
                System.out.println(userInfo);
            }
        } finally {
            session.close();
        }
    }
}

流程梳理

1、main函式啟動,執行 static 程式碼塊,使用 mybatis-config.xml 檔案構建sqlSessionFactory,這個過程中會載入 xml 檔案及介面類
2、建立 sqlSession 連線,使用 session.getMapper() 方法獲取介面類例項
3、執行介面類方法,mybatis 會根據介面類路徑去匹配 namespace,方法名匹配 sqlId,去XML檔案中查詢相應的SQL語句來執行