实体类
UserInfo.javapackage com.jxc.ibatis.pojo;
import java.util.ArrayList;
import java.util.List;public class UserInfo { private Integer uid;
private String uname;
private String upwd;
private List<Address> addressList=new ArrayList<Address>();
        //----------get and set methodAddress.javapackage com.jxc.ibatis.pojo;public class Address {
private int id;
private String address;
private String code;
private UserInfo userInfo;
        //----------get and set method
xml
UserInfo.xml
不知对不对,看网上的大家好像把有关联的表的xml文件都写在了一起,所以我也将Address部分写在了UserInfo.xml里<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="UserInfo">
<resultMap id="result" class="com.jxc.ibatis.pojo.UserInfo">
   <result property="uid" column="uid"></result>
   <result property="uname" column="uname"></result>
   <result property="upwd" column="upwd"></result>
   <result property="addressList" column="id" select="address.findByUid"></result>
</resultMap>
<resultMap id="address_result" class="com.jxc.ibatis.pojo.Address">
   <result property="id" column="id"></result>
   <result property="address" column="address"></result>
   <result property="code" column="code"></result>
   <result property="userInfo" column="uid" select="findUserByID"></result>
</resultMap>
<!--根据ID查询-->
<select id="findUserByID" parameterClass="int" resultClass="com.jxc.ibatis.pojo.UserInfo">
select * from UserInfo where uid=#uid#
</select><!--    关联查询 -->
    <select id="address.findByUid" resultClass="com.jxc.ibatis.pojo.Address" parameterClass="int">
        select * from address where uid=#uid#
    </select>
    
 <!-- Address部分 -->
    <!--根据ID查询-->
<select id="findAddressByID" parameterClass="int" resultClass="com.jxc.ibatis.pojo.Address">
select * from address where id=#id#
</select>
</sqlMap>Java部分
UserInfoDao.javapublic class UserInfoDAO {

// 根据ID查询一个userinfo对象
public UserInfo findUserByID(int uid){
SqlMapClient sqlMap=SqlMap.getSqlMap();
UserInfo user=null;
try {
sqlMap.startTransaction();
user=(UserInfo)sqlMap.queryForObject("findUserByID",uid);
sqlMap.commitTransaction();
return user;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}

    //查询所有Address
public List<Address> findByUid(int uid){
SqlMapClient sqlMap=SqlMap.getSqlMap();
List<Address> addressList=null;

try {
sqlMap.startTransaction();
addressList=sqlMap.queryForList("address.findByUid", uid);
sqlMap.commitTransaction();
return addressList;
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
}
AddressDao.java// 根据ID查询一个Address对象
public Address findAddressByID(int id){
SqlMapClient sqlMap=SqlMap.getSqlMap();
Address address=null;
try {
sqlMap.startTransaction();
address=(Address)sqlMap.queryForObject("findAddressByID",id);
sqlMap.commitTransaction();
return address;
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
}
测试部分:(注释部分为NullPointerException异常部分) List<Address> list=userDao.findByUid(1);
System.out.println(list.size());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getAddress());
}
    //System.out.println(list.get(1).getUserInfo().getUname());
AddressDao addDao=new AddressDao();
System.out.println("----------");
//System.out.println(addDao.findAddressByID(1).getUserInfo().getUname());
请大虾们看下,从UserInfo中根据ID查其所有的Address可以,但从集合中的Address取不了UserInfo,直接在Address中也获得不了UserInfo

解决方案 »

  1.   

    修改成这样试试 <!--根据ID查询-->
        <select id="findUserByID" parameterClass="int" resultMap="result">
            select * from UserInfo where uid=#uid#
        </select><!--    关联查询 -->
        <select id="address.findByUid" resultMap="address_result" parameterClass="int">
            select * from address where uid=#uid#
        </select>
        
     <!-- Address部分 -->
        <!--根据ID查询-->
        <select id="findAddressByID" parameterClass="int"  resultMap="address_result" >
            select * from address where id=#id#
        </select>
      

  2.   

    定义到的 resultMap  都没有用到
      

  3.   

    <result property="addressList" column="uid" select="address.findByUid"></result>  红色这个写错了 应该是 uid  而不是 id 因为你下面的查询是:select * from address where UID=#uid#LZ  这样写应该 OK
    <resultMap id="result" class="com.jxc.ibatis.pojo.UserInfo">
       <result property="uid" column="uid"></result>
       <result property="uname" column="uname"></result>
       <result property="upwd" column="upwd"></result>
       <result property="addressList" column="uid" select="address.findByUid"></result>
    </resultMap><resultMap id="address_result" class="com.jxc.ibatis.pojo.Address">
       <result property="id" column="id"></result>
       <result property="address" column="address"></result>
       <result property="code" column="code"></result>
       <result property="userInfo" column="uid" select="findUserByID"></result>
    </resultMap>
    <!--根据ID查询-->
        <select id="findUserByID" parameterClass="int" resultMap="result">
            select * from UserInfo   where UID=#uid#  
        </select><!--    关联查询 -->
        <select id="address.findByUid" resultMap="address_result" parameterClass="int">
            select * from address where UID=#uid#
        </select>
        
     <!-- Address部分 -->
        <!--根据ID查询-->
        <select id="findAddressByID" parameterClass="int"  resultMap="address_result" >
            select * from address where id=#id#
        </select>