mybatis namespace與association心得筆記

工作中有個sku模塊與其他9個業務模塊有關聯,需要查詢時同時查出其餘模塊的信息。


按照以前的笨方法,肯定是把其他9個模塊的resultMap全部copy到sku模塊裏來,再copy所有的查詢語句。拼成一條sql進行查詢。

或者在service層注入其餘9個模塊的dao,在查出sku信息後,再一條一條進行查詢。

這兩個方法都很笨很繁瑣。


然後查了下mybatis的文檔,resultMap中有個association可以處理關聯關係。即我們可以通過resultMap配置其餘9個模塊的映射,省去查詢SQL的處理。

但是,還是要copy其餘模塊的resultMap跟查詢SQL,還是覺得很麻煩!


有沒有更簡單的方法呢?


有的!


我們可以直接在association的select屬性中添加其他模塊的sql語句。只需要在sql語句前加上其namespace,即可直接調用。還copy個屁代碼啊,太方便了!


以下是例子,注意看sku.xml中resultMap直接調用baseControl.xml中的查詢語句:

sku.xml

<mapper namespace="com.geekplus.beetle.dao.base.SkuManageDao">
	<resultMap id="skuMap" type="BaseSku">
		<result column="pk_base_sku_id" property="skuId" jdbcType="VARCHAR" />
		<result column="sku_code" property="skuCode" jdbcType="VARCHAR" />
		<result column="customer_code" property="customerCode" jdbcType="VARCHAR" />
		<result column="batch_property_code" property="batchPropertyCode" jdbcType="VARCHAR" />
		<result column="wares_type_id_1" property="waresTypeId1" jdbcType="VARCHAR" />
		<result column="wares_type_id_2" property="waresTypeId2" jdbcType="VARCHAR" />
		<result column="wares_type_id_3" property="waresTypeId3" jdbcType="VARCHAR" />
		
		<result column="spec_class" property="specClass" jdbcType="VARCHAR" />
		<result column="sku_name" property="skuName" jdbcType="VARCHAR" />
		<result column="sku_brand" property="skuBrand" jdbcType="VARCHAR" />
		<result column="sku_price" property="skuPrice" jdbcType="DECIMAL" />
		<result column="fresh_day" property="freshDay" jdbcType="INTEGER" />
		<result column="length" property="length" jdbcType="INTEGER" />
		<result column="width" property="width" jdbcType="INTEGER" />
		<result column="height" property="height" jdbcType="INTEGER" />
		<result column="volume" property="volume" jdbcType="BIGINT" />
		<result column="gross_weight" property="grossWeight" jdbcType="INTEGER" />
		<result column="net_weight" property="netWeight" jdbcType="INTEGER" />
		<result column="sku_remarks" property="skuRemarks" jdbcType="VARCHAR" />

		<result column="add_person" property="createBy" jdbcType="VARCHAR" />
		<result column="add_time" property="createDate" jdbcType="TIMESTAMP" />
		<result column="edit_person" property="lastUpdateBy" jdbcType="VARCHAR" />
		<result column="edit_time" property="lastUpdateDate" jdbcType="TIMESTAMP" />
		<result column="status" property="status" jdbcType="INTEGER" />
		
		<result column="skuControl.baseTableType" property="skuControl.baseTableType" jdbcType="INTEGER"/>
		<association property="skuControl" column="{vo.baseTablePk=pk_base_sku_id,vo.baseTableType=skuControl.baseTableType}"
			javaType="com.geekplus.beetle.base.entity.BaseControlEntity" select="com.geekplus.beetle.dao.base.BaseControlDao.query"/>
	</resultMap>


baseControl.xml

<mapper namespace="com.geekplus.beetle.dao.base.BaseControlDao" >
	<resultMap id="BaseResultMap" type="com.geekplus.beetle.base.entity.BaseControlEntity" >
	    <id column="pk_base_rule_relationship_id" property="relationshipId" jdbcType="BIGINT" />
	    <result column="base_table_pk" property="baseTablePk" jdbcType="VARCHAR" />
	    <result column="base_table_type" property="baseTableType" jdbcType="INTEGER" />
	    
	    <result column="pack_code" property="packCode" jdbcType="VARCHAR" />
	    <result column="inventory_turn_code" property="inventoryTurnCode" jdbcType="VARCHAR" />
	    <result column="onshelf_code" property="onshelfCode" jdbcType="VARCHAR" />
	    <result column="allocation_code" property="allocationCode" jdbcType="VARCHAR" />
	    <result column="replenishment_code" property="replenishmentCode" jdbcType="VARCHAR" />
	    <result column="quality_control_code" property="qualityControlCode" jdbcType="VARCHAR" />
	    <result column="bin_appoint_type" property="binAppointType" jdbcType="INTEGER" />
	    <result column="batch_property_code" property="batchPropertyCode" jdbcType="VARCHAR" />
	    <result column="over_receive" property="overReceive" jdbcType="TINYINT" />
	    <result column="percent" property="percent" jdbcType="DECIMAL" />
	    
	    <result column="add_person" property="createBy" jdbcType="VARCHAR" />
		<result column="add_time" property="createDate" jdbcType="TIMESTAMP" />
		<result column="edit_person" property="lastUpdateBy" jdbcType="VARCHAR" />
		<result column="edit_time" property="lastUpdateDate" jdbcType="TIMESTAMP" />
		<result column="status" property="status" jdbcType="INTEGER" />
    </resultMap>
<select id="query" resultMap="BaseResultMap"  >
    <include refid="sql_base_rule_relationship_query" />
    <include refid="sql_base_rule_relationship_query_condition" />
  </select>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章