Mybatis中ResultMap的作用

這種情況主要用於解決實體類屬性名與數據庫表中字段名不一致的情況下,解決將查詢結果映射成實體對象。

1、準備實體類

public class Emp2 {
    private Integer eid;
    private String ename;
    private Integer eage;
    }

2、修改映射文件–添加代碼

<resultMap type="org.xsx.entity.Emp2" id="empMap">
    <result property="eid" column="id" jdbcType="INTEGER" javaType="int" />
    <result property="ename" column="name" jdbcType="VARCHAR" javaType="string" />
    <result property="eage" column="age" jdbcType="INTEGER" javaType="int" />
</resultMap>

<select id="findAll1" resultMap="empMap">
    select id,name,age from emp
</select>

column 從數據庫中查詢到的結果集的列名或列別名
property 將 column屬性指定的列結果映射到對象的哪個屬性

resultMap與resultType、parameterMap與 parameterType的區別
Map:映射;Type:Java類型
resultMap 與 resultType、parameterMap 與 parameterType的區別在面試的時候被問到的機率非常高

resultMap & resultType
兩者都是表示查詢結果集與java對象之間的一種關係,處理查詢結果集,映射到java對象。

resultMap表示將查詢結果集中的列一一映射到bean對象的各個屬性。映射的查詢結果集中的列標籤可以根據需要靈活變化,並且,在映射關係中,還可以通過typeHandler設置實現查詢結果值的類型轉換,比如布爾型與0/1的類型轉換。

例如:

<resultMaptype="hdu.terence.bean.Message"id="MessageResult"> 
    <!--存放Dao值--><!--type是和數據庫對應的bean類名Message-->
    <idcolumn="id"jdbcType="INTEGER"property="id"/><!--主鍵標籤-->    <resultcolumn="COMMAND"jdbcType="VARCHAR"property="command"/>
   <resultcolumn="DESCRIPTION"jdbcType="VARCHAR"property="description"/>

    <resultcolumn="CONTENT"jdbcType="VARCHAR"property="content"/>
</resultMap>
<selectid="queryMessageList" parameterType="hdu.terence.bean.Message"resultMap="MessageResult">
    SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <iftest="command!=null and !"".equals(command.trim())">

    andCOMMAND=#{command}
    </if>
    <iftest="description!=null and!"".equals(description.trim())">
    andDESCRIPTION like '%' #{description} '%'
    </if> 
  </select>

resultType 表示的是bean中的對象類,此時可以省略掉resultMap標籤的映射,但是必須保證查詢結果集中的屬性 和 bean對象類中的屬性是一一對應的,此時大小寫不敏感,但是有限制。

以下是resultType的寫法,將其值設置成對應的java類上即可。不需要上述resultMap的映射關係。

">
    SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <iftest="command!=null and!"".equals(command.trim())">
    andCOMMAND=#{command}
    </if>

    <iftest="description!=null and!"".equals(description.trim())">
    andDESCRIPTION like '%' #{description} '%'
    </if> 
  </select>

ParameterMap(不推薦) & parameterType

ParameterMap和resultMap類似,表示將查詢結果集中列值的類型一一映射到java對象屬性的類型上,在開發過程中不推薦這種方式。

一般使用parameterType直接將查詢結果列值類型自動對應到java對象屬性類型上,不再配置映射關係一一對應,例如上述代碼中下劃線部分表示將查詢結果類型自動對應到hdu.terence.bean.Message的Bean對象屬性類型。

#{}和${}的使用

resultMap和ParameterMap書寫拼寫要使用#{},resultType 和parameterType類型使用${},使用例子如下:

Select ID,COMMAND from Message where COMMAND=#{command}

Select ID,COMMAND from Message where COMMAND=‘${command}’

前者解析爲:
Select ID,COMMAND from Message where COMMAND=?具有預編譯效果

後者解析爲:
Select ID,COMMAND from Message where COMMAND=段子   不具有預編譯效果

但是,例如當頁面向後臺傳遞一個列名(屬性名)的時候,是不希望被預編譯出一個?的,此時要用到$格式;

如:加上 order by${param} ,此時param是一個列名。

轉自博客:https://blog.csdn.net/csdn_terence/article/details/60779889

發佈了333 篇原創文章 · 獲贊 84 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章