Mybatis入門(二):以接口的方式編程

前面一章,已經搭建好了Intellij idea,mybatis,mysql的環境,並且實現了一個簡單的查詢。請注意,這種方式是用SqlSession實例來直接執行已映射的SQL語句:

User user = session.selectOne("com.nextflower.Study.entity.User.selectUserByID", 1);

其實還有更簡單的方法,而且是更好的方法,使用合理描述參數和SQL語句返回值的接口(比如UserDao.class),這樣現在就可以至此那個更簡單,更安全的代碼,沒有容易發生的字符串文字和轉換的錯誤.下面是詳細過程。


1、在src源碼目錄下建立 com.nextflower.Study.dao 這個包,並建立接口類 UserDao, 內容如下:

package com.nextflower.Study.dao;

import com.nextflower.Study.entity.User;

/**
 * Created by root on 2016/3/6.
 */
public interface UserDao {

    public User selectUserByID(int id);

}

請注意,這裏面有一個方法名 selectUserByID 必須與 User.xml 裏面配置的 select 的id 對應
(select id=”selectUserByID”)


2、這裏我們提供一個新的User映射文件:User2.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.nextflower.Study.dao.UserDao">
    <select id="selectUserByID" parameterType="int" resultType="User">
      select * from `user` where id = #{id}
    </select>
</mapper>

3、測試代碼如下:執行testInterface()方法即可。

package com.nextflower.TestCase.Mybatis;

import com.nextflower.Study.dao.UserDao;
import com.nextflower.Study.entity.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.Reader;

/**
 * 測試使用mybatis的示例代碼
 * Created by root on 2016/3/6.
 * @author nextflower
 */
public class MybatisTest {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    @Before
    public void before() {
        try{
            reader    = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    @Test
    public void test() {

        SqlSession session = sqlSessionFactory.openSession();
        try {
            User user = session.selectOne("com.nextflower.Study.entity.UserDao.selectUserByID", 1);
            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
        } finally {
            session.close();
        }

    }

    @Test
    public void  testInterface() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserDao userDao=session.getMapper(UserDao.class);
            User user = userDao.selectUserByID(1);
            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
        } finally {
            session.close();
        }
    }

    @After
    public void after() {
    }


}

4、測試結果如下:

這裏寫圖片描述


PS:
這種方式,要注意的一個地方就是。在User2.xml 的配置文件中,mapper namespace=”com.nextflower.Study.dao.UserDao” ,命名空間非常重要,不能有錯,必須與我們定義的package 和 接口一致。如果不一致就會出錯。


代碼地址:
本文示例代碼開源中國地址

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