【Mybatis從0到1-006】mybatis開發DAO之基於mapper代理

    在上一章中,介紹了mybatis開發dao的原始方法,並總結了,原始開發方式的問題,本章,將介紹基於mapper代理的方式開發dao。

    與傳統開發方式相比,mapper代理開發,程序員需要書寫mapper接口(相當於dao接口),除此外,程序員還需要編寫mapper.xml映射文件,編寫mapper接口需要遵循一些開發規範,mybatis可以自動生成mapper接口實現類代理對象。
開發規範:

1、在mapper.xml中namespace等於mapper接口地址;

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法輸入參數類型和mapper.xml中statement的parameterType指定的類型一致。

4、mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致。

下面開始具體的操作:

【1】創建mapper文件夾,路徑爲:src\main\java\mapper,在文件夾內創建接口文件,名字爲:UserMapper,在文件中寫入如下代碼:(這裏只拿一個來舉例子:通過id查用戶信息)

public interface UserMapper {

    //根據id查詢用戶基本信息
    User findUserById(int id) throws Exception;
}

【2】接口創建完畢後,創建xml文件,名字爲UserMapper.xml,路徑爲:src\main\resources\mapper,代碼copy文件User.xml(路徑:src\main\resources\sqlmap\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">
<!-- namespace命名空間,作用就是對sql進行分類化管理,理解sql隔離
注意:使用mapper代理方法開發,namespace有特殊重要的作用,namespace等於mapper接口地址-->
<mapper namespace="mapper.UserMapper">
    <!-- 在 映射文件中配置很多sql語句 -->
    <!-- 需求:通過id查詢用戶表的記錄 -->
    <!-- 通過 select執行數據庫查詢
    id:標識 映射文件中的sql,將sql語句封裝到mappedStatement對象中,所以將id稱爲statement的id
    parameterType:指定輸入參數的類型,這裏指定int型【此時,與接口中輸入參數類型一致】
    #{}表示一個佔位符號,#{id}:其中的id表示【接收輸入】的參數,參數名稱就是id,如果輸入參數是簡單類型,#{}中的參數名
    可以任意,可以value或其它名稱
    resultType:指定sql輸出結果 的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。-->
    <select id ="findUserById" parameterType="int" resultType="po.User">
        SELECT *FROM user WHERE id=#{id}
    </select>
</mapper>

在修改code過程中,有幾處需要注意:

1.namespace按照開發規範,應爲:namespace="mapper.UserMapper";

2.id按照開發規範,應與接口的方法名一致,應爲:id ="findUserById";

3.parameterType按照開發規範,應與接口中的輸入參數類型一致,應爲:parameterType="int";

4.resultType按開發規範,應與接口中方法返回值類型一致,應爲:resultType="po.User"。

【3】完成以上兩個步驟,還有最重要一步至關重要,那就是要在SqlMapConfig.xml中加載UserMapper.xml文件,否則之前所做努力全都白費。打開SqlMapConfig.xml(路徑爲:src\main\resources\SqlMapConfig.xml),加入如下代碼:將上次的映射文件暫時斃掉, <!--<mapper resource="sqlmap/User.xml"/>-->。

<!-- 加載 映射文件 -->
<mappers>
    <!--<mapper resource="sqlmap/User.xml"/>-->
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

【4】最後開始進行單元測試,生成測試文件的步驟,在【003】中已有詳細介紹,這裏只貼出代碼:

public class UserMapperTest {

    private SqlSessionFactory sqlSessionFactory;
    //此方法在執行findUserById()之前執行
    @Before
    public void setUp() throws Exception {
        //mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //創建會話工廠
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void findUserById() throws Exception {
        // 通過工廠得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創建UserMapper對象,mybatis自動生成mapper代理對象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調用接口中的方法
        User user = userMapper.findUserById(22);
        //關閉sqlsession
        sqlSession.close();
        System.out.println(user);
    }

}
【5】最後展示下,結果,由於測試代碼中,我是以id=22進行查詢的,所以結果顯示id=22的用戶信息。


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