日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis中,collection配置后查询只显示一条记录

發(fā)布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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>

看起來沒有任何問題吧,寫了個測試方法:

@Testpublic 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)容還不錯,歡迎將生活随笔推薦給好友。