我們之前的Users表,有三個(gè)字段:

Users.png
我的實(shí)體類(lèi)有三個(gè)名字相同的屬性:

User
但是在平時(shí)的開(kāi)發(fā)中,我們表中的字段名和表對(duì)應(yīng)實(shí)體類(lèi)的屬性名稱不一定都是完全相同的,當(dāng)名字不相同的時(shí)候就會(huì)引發(fā)一些問(wèn)題。(比如我們的表中字段名都有一個(gè)前綴三個(gè)字段分別為user_id,user_name,user_age)
下面我們以u(píng)serMapper.xml中的getUser為例:
<!-- 根據(jù)id查詢得到一個(gè)User對(duì)象,使用這個(gè)查詢是查詢不到我們想要的結(jié)果的,這主要是因?yàn)閷?shí)體類(lèi)的屬性名和數(shù)據(jù)庫(kù)的字段名對(duì)應(yīng)不上的原因,因此無(wú)法查詢出對(duì)應(yīng)的記錄-->
<select id="getUser" parameterType="int"
resultType="pers.cherish.entity.User">
select * from users where id=#{id}
</select>
這樣我們用之前的測(cè)試類(lèi)TestCRUDByXmlMapper測(cè)試,我們會(huì)發(fā)現(xiàn)返回了一個(gè)null,當(dāng)實(shí)體類(lèi)中的屬性名和表中的字段名不一致時(shí),使用MyBatis進(jìn)行查詢操作時(shí)無(wú)法查詢出相應(yīng)的結(jié)果的問(wèn)題以及針對(duì)問(wèn)題采用的兩種辦法:
解決辦法一:
通過(guò)在查詢的sql語(yǔ)句中定義字段名的別名,讓字段名的別名和實(shí)體類(lèi)的屬性名一致,這樣就可以表的字段名和實(shí)體類(lèi)的屬性名一一對(duì)應(yīng)上了,這種方式是通過(guò)在sql語(yǔ)句中定義別名來(lái)解決字段名和屬性名的映射關(guān)系的。
修改userMapper.xml對(duì)應(yīng)的配置信息
<!--
根據(jù)id查詢得到一個(gè)user對(duì)象,使用這個(gè)查詢是可以正常查詢到我們想要的結(jié)果的,這是因?yàn)槲覀儗⒉樵兊淖侄蚊计鹨粋€(gè)和實(shí)體類(lèi)屬性名相同的別名,這樣實(shí)體類(lèi)的屬性名和查詢結(jié)果中的字段名就可以一一對(duì)應(yīng)上-->
<select id="getUser2" parameterType="int"
resultType="pers.cherish.entity.User">
select user_id id, user_name name, user_age age from users where user_id=#{id}
</select>
解決辦法二:
通過(guò)<resultMap>來(lái)映射字段名和實(shí)體類(lèi)屬性名的一一對(duì)應(yīng)關(guān)系。這種方式是使用MyBatis提供的解決方式來(lái)解決字段名和屬性名的映射關(guān)系的。
<!--
根據(jù)id查詢得到一個(gè)User對(duì)象,使用這個(gè)查詢是可以正常查詢到我們想要的結(jié)果的,這是因?yàn)槲覀兺ㄟ^(guò)<resultMap>映射實(shí)體類(lèi)屬性名和表的字段名一一對(duì)應(yīng)關(guān)系
-->
<select id="getUser3" parameterType="int" resultMap="userResultMap">
select * from users where user_id=#{id}
</select>
<!--通過(guò)<resultMap>映射實(shí)體類(lèi)屬性名和表的字段名對(duì)應(yīng)關(guān)系 -->
<resultMap type="pers.cherish.entity.User" id="userResultMap">
<!-- 用id屬性來(lái)映射主鍵字段 -->
<id property="id" column="user_id"/>
<!-- 用result屬性來(lái)映射非主鍵字段 -->
<result property="name" column="user_name"/>
<result property="age" column="user_age/>
</resultMap>
以上兩種方式都可以解決,實(shí)體類(lèi)屬性和表列名不一致的問(wèn)題