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" />
參考:
沒有留言:
張貼留言