MyBatis select標籤的用法

From《MyBatis從入門到精通》java

 

第一步,在接口中添加方法:sql

public interface UserMapper {
    SysUser selectById(Long id);
}

 

第二步,完成映射文件:數據庫

<?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="tk.mybatis.simple.mapper.UserMapper">
    <!--
        對接口和接口方法映射的講解:
            XML與接口是經過namespace的值設置爲接口的全限定名稱進行關聯
            XML與接口中的方法是經過select標籤的id屬性值和定義的接口方法名一致進行關聯

            若是接口方法中沒有和XML中的id屬性值相對應,啓動程序就會報錯。

        映射XML和接口的命名須要符合以下規則:
            1.當只只用XML而不使用接口的時候,namespace的值能夠設置爲任意不重複的名稱
            2.標籤的id屬性值在任什麼時候候都不能出現英文句號「.」,而且同一個命名空間下不能出現重複的id
            3.由於接口中的方法是能夠重載的,因此接口中全部的同名方法會對應XML中的同一個id的方法。
            最多見的用法是,同名方法中其中一個增長衣蛾RowBound類型的參數用於實現分頁查詢。
    -->

    <!--
        resultMap是一種很重要的配置結果映射的方法,resultMap的屬性:
            id:必填,而且惟一。
            type:用於配置查詢列所映射到的Java對象類型
            extends:選填,能夠配置當前的resultMap繼承自其餘的resultMap,屬性值爲繼承resultMap的id
            autoMapping:選填,用於配置是否啓用非映射字段(沒有在resultMap中配置的字段)的自動映射功能
                該配置能夠覆蓋全局的autoMappingBehavior配置(!!!針對沒有在resultMap中配置的字段)

        resultMap包含的標籤:
            <constructor>:配置用構造方法注入結果,包含兩個字標籤
                <idArg>:id參數,標記結果做爲id(惟一值),能夠幫助提升總體性能
                <arg>:注入到構造方法的一個普通結果
            <id>:id參數,標記結果做爲id(惟一值),能夠幫助提升總體性能
            <result>:主導到Java對象屬性的普通結果

            ====================================================
                                後面會詳細講解的部分
            ====================================================
            <association>:一個複雜的類型關聯,許多結果將包裝成這種類型
            <collection>:複雜類型的集合
            <discriminator>:根據結果值來決定使用哪一個結果映射
            <case>:基於某些值的結果映射
            ====================================================
            ====================================================

            id和result標籤包含的屬性:
                column:從數據庫獲得的列名(來源於數據庫的數據)
                property:映射到列結果的屬性(來源與resultMap標籤type屬性指明的對象的屬性)
                ===================================================================
                                       這部分我尚未遇到過,還不是很熟悉
                ===================================================================
                javaType:若是映射到一個JavaBean,Mybatis一般能夠自動的判斷屬性的類型
                    若是映射到HashMap,則須要明確的指明javaType。
                jdbcType:列對應的數據庫類型。JDBC類型僅僅須要對插入、更新、刪除操做可能爲空
                    的列進行處理。這是JDBC jdbcType的須要,而不是MyBatis的須要。
                typeHandler:使用這個屬性能夠覆蓋默認的類型處理器。這個屬性值是類的徹底限定
                    名或者類型別名。
                ===================================================================
                ===================================================================
    -->
    <resultMap id="userMap" type="tk.mybatis.simple.model.SysUser">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
        <result property="userEmail" column="user_email"/>
        <result property="userInfo" column="user_info"/>
        <result property="headImg" column="head_img" jdbcType="BLOB"/>
        <result property="createTime" column="user_password" jdbcType="TIMESTAMP"/>
    </resultMap>

    <!--
        <select>:映射查詢語句使用的標籤
        id:命名空間惟一標識符,可用來表明這句話
        resultMap:用來設置返回值的類型和映射關係
        #{id}:MyBatis SQL中使用預編譯參數的一種方式,這個id須要與形式參數如出一轍麼
    -->
    <select id="selectById" resultMap="userMap">
        SELECT * FROM sys_user WHERE id = #{id}
    </select>
</mapper>

 

第三步,如何在程序中使用mybatis

        @Test
        public void testSelectById(){
            SqlSession sqlSession=getSqlSession();

            try{
                /*
                    這個地方和之前的代碼比,已經發生了變化:
                         List<Country> countryList = sqlSession.
                            selectList("tk.mybatis.simple.mapper.CountryMapper.selectAll");
                    
                    之前這個地方,使用的是從sqlSession中經過xml文件的命名空間集selectId找到一個方法,
                    而如今直接經過接口的方式,相對而言十分的方便。
                 */
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                SysUser user = userMapper.selectById(1L);
                Assert.assertNotNull(user);
                Assert.assertEquals("admin",user.getUserName());
            }finally {
                sqlSession.close();
            }
        }
相關文章
相關標籤/搜索