当前位置:编程学习 > JAVA >>

ibatis关联查询的问题

<resultMap class="com.shenzhen.ibatis.litlov.model.TUser" id="abatorgenerated_TUserResult">
    <!--
      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
      This element was generated on Thu Aug 15 00:03:30 CST 2013.
-->
    <result column="user_id" jdbcType="INTEGER" property="userId" />
    <result column="user_name" jdbcType="VARCHAR" property="userName" />
    <result column="user_email" jdbcType="VARCHAR" property="userEmail" />
    <result column="user_mobile" jdbcType="VARCHAR" property="userMobile" />
    <result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
    <result column="user_id" property="orders" select="t_user.getOrderByUserId"/>
</resultMap>

<select id="getOrderByUserId" parameterClass="int" resultClass="TOrder">
<![CDATA[
select order_id, order_status, order_amounts, order_date, user_id from t_order where user_id = #value#
]]>   
</select>

TUser实体类:
private List<TOrder> orders;

/**
 * This method was generated by Abator for iBATIS. This method returns the value of the database column t_user.user_id
 * @return  the value of t_user.user_id
 * @abatorgenerated  Thu Aug 15 00:03:30 CST 2013
 */
public Integer getUserId() {
return userId;
}
......
public List<TOrder> getOrders()
{
return orders;
}

public void setOrders(List<TOrder> orders)
{
this.orders = orders;
}


测试类:
......
TUser user = userDao.selectByPrimaryKey(115824735);
        List<TOrder> orders = user.getOrders();
        log.info("orders.size = " + orders.size());
        for (Iterator<TOrder> iterator = orders.iterator(); iterator.hasNext(); )
        {
         TOrder order = iterator.next();
         int orderId = order.getOrderId();
         int orderStatus = order.getOrderStatus();
         double orderAmount = order.getOrderAmounts().doubleValue();
         Date orderDate = order.getOrderDate();
         int userId = order.getUserId();
        
         log.info("\nOrders:\n" + "orderId:" + orderId + "\norderStatus:" + orderStatus + "\norderAmount:" + orderAmount + "\norderDate:" + orderDate + "\nuserId:" + userId);
        }

打印出orders.size = 2
数据库数据信息为:
mysql> select order_id, order_status, order_amounts, order_date, user_id from t_
order where user_id = 115824735
    -> ;
+-----------+--------------+---------------+---------------------+-----------+
| order_id  | order_status | order_amounts | order_date          | user_id   |
+-----------+--------------+---------------+---------------------+-----------+
| 139824535 |            3 |      88888.88 | 2013-08-15 00:05:58 | 115824735 |
| 139824537 |            1 |   66666666.66 | 2013-08-15 13:46:13 | 115824735 |
+-----------+--------------+---------------+---------------------+-----------+
2 rows in set (0.00 sec)


LOG4J的日志信息为:

2013-08-15 16:26:50 281 DEBUG PreparedStatement:22 - {pstm-100001} PreparedStatement:           select user_id, user_name, user_email, user_mobile, create_date     from t_user     where user_id = ?   
2013-08-15 16:26:50 281 DEBUG PreparedStatement:22 - {pstm-100001} Parameters: [115824735]
2013-08-15 16:26:50 281 DEBUG PreparedStatement:22 - {pstm-100001} Types: [java.lang.Integer]
2013-08-15 16:26:50 281 DEBUG ResultSet:22 - {rset-100002} ResultSet
2013-08-15 16:26:50 296 DEBUG ResultSet:22 - {rset-100002} Header: [user_id, user_name, user_email, user_mobile, create_date, user_id]
2013-08-15 16:26:50 296 DEBUG ResultSet:22 - {rset-100002} Result: [115824735, 奥特曼, aoteman@163.com, 13600000000, 2013-08-15 00:05:58.0, 115824735]
2013-08-15 16:26:50 312 DEBUG SimpleDataSource:22 - Returned connection 7804298 to pool.
2013-08-15 16:26:50 312 DEBUG SimpleDataSource:22 - Checked out connection 7804298 from pool.
2013-08-15 16:26:50 312 DEBUG Connection:22 - {conn-100003} Connection
2013-08-15 16:26:50 312 DEBUG PreparedStatement:22 - {pstm-100004} PreparedStatement:       select order_id, order_status, order_amounts, order_date, user_id from t_order where user_id = ?       
2013-08-15 16:26:50 312 DEBUG PreparedStatement:22 - {pstm-100004} Parameters: [115824735]
2013-08-15 16:26:50 312 DEBUG PreparedStatement:22 - {pstm-100004} Types: [java.lang.Integer]
2013-08-15 16:26:50 312 DEBUG ResultSet:22 - {rset-100005} ResultSet
2013-08-15 16:26:50 312 DEBUG SimpleDataSource:22 - Returned connection 7804298 to pool.
2013-08-15 16:26:50 312  INFO Runner:178 - orders.size = 2
Exception in thread "main" java.lang.NullPointerException
at com.shenzhen.ibatis.litlov.Runner.execute(Runner.java:182)
at com.shenzhen.ibatis.litlov.Runner.main(Runner.java:44)




求解。。 ibatis
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,