使用resultMap實現ibatis複合資料結構查詢(1.多重屬性查詢;2.屬性中含有列表查詢),resultmapibatis

來源:互聯網
上載者:User

使用resultMap實現ibatis複合資料結構查詢(1.多重屬性查詢;2.屬性中含有列表查詢),resultmapibatis


以訂單為例(訂單詳情包含了訂單的基本資料,配送物流資訊,商品資訊),直接上代碼:


1.多重屬性查詢


java實體

public class OrderDetail {    @XmlElement(required = true)    protected String orderSn;    @XmlElement(required = true)    protected String orderAmount;    @XmlElement(required = true)    protected String orderStatus;    @XmlElement(required = true)    protected String orderAddTime;    @XmlElement(required = true)    protected Logistics logistics;    @XmlElement(required = true)    protected OrderGoods orderGoods;    @XmlElement(required = true)    protected List<OrderDetail> listData;<pre name="code" class="java">      ... getter and setter...
}

class="orderDetail" 即為上面的類,有個屬性logistics的類型是複合類型Logistics

下面是訂單詳情的resultMap:

<resultMap id="OrderInfoMap" class="orderDetail"><result property="orderSn" column="orderSn"/><result property="orderAmount" column="orderAmount"/><result property="orderStatus" column="orderStatus"/><result property="orderStatus" column="orderAddTime"/><result property="logistics.consignee" column="consignee"/><!--  <result property="logistics.receiver" column="receiver"/> --><result property="logistics.country" column="country"/><result property="logistics.province" column="province"/><result property="logistics.city" column="city"/><result property="logistics.district" column="district"/><result property="logistics.address" column="address"/><result property="logistics.mobile" column="mobile"/><result property="logistics.shippingName" column="shippingName"/><result property="orderGoods.listData" select="wxShopOrder.getOrderGoodsList"         column="orderSn"/></resultMap>

其中"<result property="logistics.consignee" column="consignee"/> ",logistics.consignee就可以用對象訪問的寫法來查詢,consignee是logistics的屬性,logistics是orderDetail的屬性.注意:column的名稱應該與sql語句查詢的列名一致.


sql查詢語句如下:

   <select id="getOrderDetail" parameterClass="string" resultMap="OrderInfoMap" >       select                    order_sn as orderSn,                  order_amount as orderAmount,                  order_status as orderStatus,                  add_time as orderAddTime,                  consignee,                  country,                                           b.region_name province,                  c.region_name city,                  d.region_name district,                  address,                  mobile,                  shipping_name as shippingName                  from  ecs_order_info  o  left join ecs_region b on o.province=b.region_id          left join ecs_region c on o.city=c.region_id          left join ecs_region d on o.district=d.region_id   where  order_sn=#orderSn#        </select>



2.屬性中含有列表查詢


orderDetail有個屬性orderGoods的類型是List複合類型,應在resultMap的屬性定義中添加屬性select="getOrderGoodsList",getOrderGoodsList也是一個sql查詢

<result property="orderGoods.listData" select="wxShopOrder.getOrderGoodsList" column="orderSn"/>

注意:上面column="orderSn"指的是orderSn作為sql的查詢參數. 看下這個  getOrderGoodsList查詢

 <!-- 通過訂單號擷取訂單商品列表 -->        <select id="getOrderGoodsList" parameterClass="string" resultMap="orderGoodsMap">            select goods_name as goodsName,                   goods_number as goodsNumber            from ecs_order_goods where order_id=       (select order_id from ecs_order_info where order_sn=#orderSn#)        </select>




急解答ibatis之resultMap之多表聯查與DTO該怎處理

剛進公司,學校期間沒用過ibatis。今天領到任務,想著是挺簡單的一個業務。但涉及到多表聯查,用的架構是ibatis+struts1+ejb。這裡需要寫DTO 來與資料庫表中欄位一一對應。視頻資訊表:vedioID vedioInfo ipAndGallery(視頻ID,視頻資訊,ip 與連接埠號碼)人員分組表:personGroupID personID personGroup(分組ID,人員ID,分組資訊)許可權控製表(中間表):IMpower vedioID personGroupID 許可權ID、視頻ID、分組ID)需要在jsp 頁面展示:【分組資訊,視頻資訊、ip 與連接埠號碼 】這三個欄位。select a.personGroup,b.vedioInfo,b.ipAndGalleryfrom jk_persongroup a,jk_vedio b,jk_impower cwhere a.personGroupID=c.personGroupID AND b.vedioID=c.vedioID疑惑:------解決方案--------------------------------------------------------疑惑:像這種多表聯集查詢的最好是在建一個 domain 專門用來查詢這樣你 sql 就可以返回這個domain.------解決方案--------------------------------------------------------你把返回的欄位對應到一個javabean 裡面,或者直接返回一個map,都可以。------解決方案--------------------------------------------------------以一張表為主表 別的表的欄位 as 主表的屬性。 這樣就可以用 主表.屬性取值。主表屬性要與從表欄位類型一致
 
ibatis設定檔設定資料庫表多表串連查詢配置resultMap各表中有同名列名,怎區分?解

as 一下弄個不同的列名就行了
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.