生活随笔
收集整理的這篇文章主要介紹了
mybatis中,collection配置后查询只显示一条记录
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
描述一下問題: 已知有兩個表,一個是user表,一個是address,一(user)對多(address)的關(guān)系,在user的實體類里面寫屬性:
private List
< Address> addressList
= new ArrayList < Address> ( ) ; public List
< Address> getAddressList ( ) { return addressList
; } public void setAddressList ( List
< Address> addressList
) { this . addressList
= addressList
; }
然后寫了一個測試方法,根據(jù)用戶的編號查詢地址信息,一個用戶對應(yīng)多個地址。 配置如下:
< resultMap type
= "User" id
= "userAddMap" > < id property
= "id" column
= "id" / > < result property
= "userName" column
= "userName" / > < result property
= "userCode" column
= "userCode" / > < result property
= "userPassword" column
= "userPassword" / > < result property
= "gender" column
= "gender" / > < result property
= "birthday" column
= "birthday" / > < result property
= "phone" column
= "phone" / > < result property
= "address" column
= "address" / > < result property
= "userRole" column
= "userRole" / > < result property
= "createdBy" column
= "createdBy" / > < result property
= "creationDate" column
= "creationDate" / > < result property
= "modifyBy" column
= "modifyBy" / > < result property
= "modifyDate" column
= "modifyDate" / > < result property
= "roleName" column
= "roleName" / > < collection property
= "addressList" ofType
= "Address" > < id property
= "aid" column
= "id" / > < result property
= "contact" column
= "contact" / > < result property
= "addressDesc" column
= "addressDesc" / > < result property
= "postCode" column
= "postCode" / > < result property
= "tel" column
= "tel" / > < result property
= "createdBy" column
= "createdBy" / > < result property
= "creationDate" column
= "creationDate" / > < result property
= "modifyBy" column
= "modifyBy" / > < result property
= "modifyDate" column
= "modifyDate" / > < result property
= "userId" column
= "userId" / > < / collection
> < / resultMap
>
sql映射如下:
< select id
= "findUserByidAndAddress" parameterType
= "Integer" resultMap
= "userAddMap" > SELECT u
. *
, a
. id
, a
. contact
, a
. addressdesc
, a
. postCodeFROM smbms_user u
, smbms_address a WHERE u
. id
= a
. userid AND u
. id
= #
{ id
} < / select
>
看起來沒有任何問題吧,寫了個測試方法:
@Test public void findUserByidAndAddress ( ) { SqlSession sqlSession
= utils
. getSqlSession ( ) ; User user
= sqlSession
. getMapper ( IUserDao
. class ) . findUserByidAndAddress ( 1 ) ; List
< Address> addressList
= user
. getAddressList ( ) ; for ( Address address
: addressList
) { System
. out
. println ( address
. getAddressDesc ( ) ) ; } }
運行結(jié)果如圖所示: 可是數(shù)據(jù)庫中卻有三條記錄: 經(jīng)過自己琢磨,不行。 然后上網(wǎng)查了下,原來是數(shù)據(jù)庫中兩個表中的主鍵都是id,如果配置collection一對多關(guān)聯(lián)的話需要改別名,我就試著改了下,發(fā)現(xiàn),可以了。 改過之后的映射文件如下:
< resultMap type
= "User" id
= "userAddMap" > < id property
= "id" column
= "id" / > < result property
= "userName" column
= "userName" / > < result property
= "userCode" column
= "userCode" / > < result property
= "userPassword" column
= "userPassword" / > < result property
= "gender" column
= "gender" / > < result property
= "birthday" column
= "birthday" / > < result property
= "phone" column
= "phone" / > < result property
= "address" column
= "address" / > < result property
= "userRole" column
= "userRole" / > < result property
= "createdBy" column
= "createdBy" / > < result property
= "creationDate" column
= "creationDate" / > < result property
= "modifyBy" column
= "modifyBy" / > < result property
= "modifyDate" column
= "modifyDate" / > < result property
= "roleName" column
= "roleName" / > < collection property
= "addressList" ofType
= "Address" > < id property
= "aid" column
= "aid" / > < result property
= "contact" column
= "contact" / > < result property
= "addressDesc" column
= "addressDesc" / > < result property
= "postCode" column
= "postCode" / > < result property
= "tel" column
= "tel" / > < result property
= "createdBy" column
= "createdBy" / > < result property
= "creationDate" column
= "creationDate" / > < result property
= "modifyBy" column
= "modifyBy" / > < result property
= "modifyDate" column
= "modifyDate" / > < result property
= "userId" column
= "userId" / > < / collection
> < / resultMap
>
sql語句如下:
< select id
= "findUserByidAndAddress" parameterType
= "Integer" resultMap
= "userAddMap" > SELECT u
. *
, a
. id as aid
, a
. contact
, a
. addressdesc
, a
. postCodeFROM smbms_user u
, smbms_address a WHERE u
. id
= a
. userid AND u
. id
= #
{ id
} < / select
>
注意:resultMap中的property對應(yīng)的是實體類里面的屬性,而column嚴格意義上來說對應(yīng)的是結(jié)果集里面的列名,而不是數(shù)據(jù)庫中的列,比如起別名的話就對應(yīng)的是別名,不是原來的列,切記切記!!! 歡迎關(guān)注:雄雄的小課堂
總結(jié)
以上是生活随笔 為你收集整理的mybatis中,collection配置后查询只显示一条记录 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。