ibatis从一的一端查多的一端

阿米尔 2010-11-26 09:39:03
User.java

public class User {
private int uid;
private String uname;
private String upwd;
private List<Address> addressList=new ArrayList<Address>();
//..........get and set method

Address.java

public class Address {
private int id;
private String address;
private String code;
private User user;
//----------------


User.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="User">
<resultMap id="result" class="com.tq365.vo.User">
<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.tq365.vo.Address">
<result property="id" column="id"></result>
<result property="address" column="address"></result>
<result property="code" column="code"></result>
<result property="user" column="uid" select="findUserByID"></result>
</resultMap>
<!--根据ID查询-->
<select id="findUserByID" parameterClass="int" resultClass="com.tq365.vo.User">
select * from t_user where uid=#uid#
</select>

<!-- 关联查询 -->
<select id="address.findByUid" resultMap="address_result" parameterClass="int">
select * from t_address where uid=#uid#
</select>
<!-- Address部分 -->
<!--根据ID查询-->
<select id="findAddressByID" parameterClass="int" resultMap="address_result">
select * from t_address where id=#id#
</select>
</sqlMap>


SqlMapUtil.java

public class SqlMapUtil {
private SqlMapUtil(){}
private static SqlMapClient sqlMapClient=null;

public static SqlMapClient getSqlMapClient(){
//ibatis配置文件的路径
String resource="sqlMap/sql-map-config.xml";
try {
//读取配置文件
Reader reader=Resources.getResourceAsReader(resource);
//创建SqlMapClient对象
sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
e.printStackTrace();
}
return sqlMapClient;
}
}



测试类
OneToManyTest.java

public class OneToManyTest {

public static void main(String[] args) {
UserDao dao=new UserDao();

User user=dao.getUserByUid(3);
//从User对象中获得不了List列表???
//System.out.println(user.getAddressList().size());
//从地址中可以查出User对象
List<Address> addressList=dao.getAddresssByUid(3);
for(int i=0;i<addressList.size();i++){
System.out.println("地址:"+addressList.get(i).getAddress());
System.out.println("姓名:"+addressList.get(i).getUser().getUname());
}
}
}

从地址中可以获得用户信息,而从用户中获得不了地址列表,求前辈们看看下,是哪错了

...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj594594520 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 archie2010 的回复:]
<!--根据ID查询-->
<select id="findUserByID" parameterClass="int" resultClass="com.tq365.vo.User">
select * from t_user where uid=#uid#
</select>
[/Quote]
这里的resultClass="com.tq365.vo.User" 改为 resultMap="result"
不过这样可能会导致死循环查询,建议再单独写个查询
fokker 2010-11-26
  • 打赏
  • 举报
回复
看看是不是因为你的select的id命名的原因“address.findByUid”一般来说xxx.yyy这种格式里面xxx是namespace的名字
把.去掉试试
meteor1015 2010-11-26
  • 打赏
  • 举报
回复
这个上次不是已经给你调通了吗,怎么又不行了 ?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧