網頁

2017/12/20

Mybatis 共用resultMap

Mybatis如果有許多的Mapper用到相同的resultMap,例如使用者資料之類的model,則可以把這個被共用的resultMap獨立出來成為一個Mapper,然後將使用到這個resultMap的Mapper的<select >resultMap的值指向其id即可。

例如LoginMemberMapper.xml的查詢結果會使用到UserInfo作為resultMap

<?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="idv.matthung.mapper.LoginMapper">
  
  <select id="getUserByEmail" parameterType="String" 
        resultMap="idv.matthung.mapper.model.UserMapper.userResultMap"><!-- 注意這邊resultMap的設定 -->
    SELECT * FROM USER_PROFILE WHERE EMAIL = #{email}
  </select>
  
</mapper>

idv.matthung.mapper.model.UserMapper.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="idv.matthung.mapper.model.UserMapper">
  <resultMap id="userResultMap" type="idv.matthung.model.User">
    <id property="userId"         column="USER_ID"      javaType="Integer"  jdbcType="INTEGER"/>
    <result property="email"      column="EMAIL"        javaType="String"   jdbcType="VARCHAR"/>
    <result property="password"   column="PASSWORD"     javaType="String"   jdbcType="VARCHAR"/>
    <result property="name"       column="NAME"         javaType="String"   jdbcType="VARCHAR"/>
  </resultMap>
  
</mapper>

如果共用Mapper的package位置不同,要確認Mybatis的設定檔,例如Spring配置檔的<mybatis:scan .../>

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


<mybatis:scan base-package="idv.matthung.mapper, idv.matthung.mapper.model" factory-ref="sqlSessionFactory" />

參考:

沒有留言:

張貼留言