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(); } }