mybatis Configuration Object Includes Objects and How List Makes

  • 2021-09-24 22:14:07
  • OfStack

mybatis Configuration Object Contains Objects and List

The get set method is hidden here


public class BatchManagerViewVo  implements Serializable{
 
	/**
	* @Description: serialVersionUID : TODO
	*/ 
	private static final long serialVersionUID = 1L; 
	private List<ResourcesItemDto> resourceItem;	
	private List<PriceInfoDto> priceInfo;
	
	/**
     * 主键(PM200600001)
     */
    @Id
    @Column(name = "ID")
    private String id; 
    public List<ResourcesItemDto> getResourceItem() {
		return resourceItem;
	}
	public void setResourceItem(List<ResourcesItemDto> resourceItem) {
		this.resourceItem = resourceItem;
	}
	public List<PriceInfoDto> getPriceInfo() {
		return priceInfo;
	}
	public void setPriceInfo(List<PriceInfoDto> priceInfo) {
		this.priceInfo = priceInfo;
	}
 
	/**
     * 场次名称
     */
    @Column(name = "BATCH_NAME")
    private String batchName;
 
    /**
     * 会员名称
     */
    @Column(name = "MEMBER_NAME")
    private String memberName;
 
    /**
     * 发起竞价的会员代码
     */
    @Column(name = "MEMBER_CODE")
    private String memberCode;
 
    /**
     * 委托状态:0-已生成,1-已发布,2.竞价中 3-已撤消,4--已作废,5-已完成
     */
    @Column(name = "BATCH_STATE")
    private String batchState;
 
    /**
     * 委托申请时间
     */
    @Column(name = "BATCH_DATE")
    private Date batchDate;
 
    /**
     * 结束时间
     */
    @Column(name = "END_TIME")
    private Date endTime;
 
    /**
     * 开始时间
     */
    @Column(name = "START_TIME")
    private Date startTime;
 
    /**
     * 履约保证金是否已经支付 1 - 已经支付 0 - 未支付(只有此状态为1才允许开始拍卖)
     */
    @Column(name = "BOND_PAYMENT_STATUS")
    private String bondPaymentStatus;
 
    /**
     * 结算方式:1-场外结算(默认) 2- 场内结算
     */
    @Column(name = "SETTLEMENT_MODE")
    private String settlementMode;
 
    /**
     * 作废时间
     */
    @Column(name = "INVALID_DATE")
    private Date invalidDate;
 
    /**
     * 审核操作员
     */
    @Column(name = "AUDIT_OPERATOR")
    private String auditOperator;
 
    /**
     * 终止操作员
     */
    @Column(name = "STOP_OPERATOR")
    private String stopOperator;
 
    /**
     * 作废操作员
     */
    @Column(name = "INVALID_OPERATOR")
    private String invalidOperator;
 
    /**
     * 申请操作员
     */
    @Column(name = "APPLY_OPERATOR")
    private String applyOperator;
 
    /**
     * 公告日
     */
    @Column(name = "ANNOUNCEMENT_DAY")
    private Date announcementDay;
 
    /**
     * 竞价日
     */
    @Column(name = "BID_DAY")
    private Date bidDay;
 
    /**
     * 买方保证金
     */
    @Column(name = "BUYER_DEPOSIT")
    private BigDecimal buyerDeposit;
 
    /**
     * 卖家保证金
     */
    @Column(name = "SELLER_BOND")
    private BigDecimal sellerBond;
 
    /**
     * 强制终止理由
     */
    @Column(name = "FORCED_TERMINATION_REASON")
    private String forcedTerminationReason;
 
    /**
     * 终止委托审核理由(待定)
     */
    @Column(name = "AUDIT_STOP_REASON")
    private String auditStopReason;
 
    /**
     * 终止委托审核时间(待定)
     */
    @Column(name = "AUDIT_STOP_DATE")
    private Date auditStopDate;
 
    /**
     * 终止委托申请理由(待定)
     */
    @Column(name = "APPLY_STOP_REASON")
    private String applyStopReason;
 
    /**
     * 终止委托申请时间(待定)
     */
    @Column(name = "APPLY_STOP_DATE")
    private Date applyStopDate;
 
    /**
     * 拒绝审核委托理由(待定)
     */
    @Column(name = "REFUSE_AUDIT_REASON")
    private String refuseAuditReason;
 
    /**
     * 委托审核时间(待定)
     */
    @Column(name = "AUDIT_TIME")
    private Date auditTime;
 
    /**
     * 定向竞价0否1是1
     */
    @Column(name = "IS_DIRECTIONAL_BID")
    private String isDirectionalBid;
 
    /**
     * 定向的原因,当场次定向时必须输入
     */
    @Column(name = "DIRECTIONAL_REASON")
    private String directionalReason;
 
    /**
     * 是否需要发送短信0不发送1发送
     */
    @Column(name = "IS_SEND_MESSAGE")
    private String isSendMessage;
 
    /**
     * 是否显示中标价格
     */
    @Column(name = "IS_SHOW_DEAL_PRICE")
    private String isShowDealPrice;
 
    /**
     * 是否显示定价
     */
    @Column(name = "IS_SHOW_ORDER_PRICE")
    private String isShowOrderPrice;
 
    /**
     * 是否显示中标会员
     */
    @Column(name = "IS_SHOW_DEAL_MEMBER")
    private String isShowDealMember;
 
    /**
     * 最少响应人数
     */
    @Column(name = "MINIMUM_RESPONSE")
    private String minimumResponse;
 
    /**
     * 是否显示成交结果
     */
    @Column(name = "ISSHOWDEALRESULT")
    private String isshowdealresult;
 
    /**
     * 竞价模式:1-公开增价,2自由报价,3-荷式竞价
     */
    @Column(name = "BIDDING_TYPE")
    private String biddingType;
 
    /**
     * 报盘方式:1-单价,2-总价
     */
    @Column(name = "OFFER_TYPE")
    private String offerType;
 
    /**
     * 是否显示起拍价 1显示(默认) 2不显示 
     */
    @Column(name = "IS_SHOW_STARTING_PIRCE")
    private String isShowStartingPirce;
 
    /**
     * 域名
     */
    @Column(name = "DOAMIN")
    private String doamin;
 
    /**
     * 协议
     */
    @Column(name = "EDITMENT")
    private String editment;
} 

 <select id="findSellerBatchInfo" parameterType="com.ouyeel.chem.bdt.search.BatchManagerSerachModel" resultMap="batchInfoMap">
  	select 
	  	batch.ID,
	  	batch.BATCH_NAME,
	  	batch.BATCH_STATE batch_state,
	  	batch.START_TIME batch_start_time,
	  	batch.END_TIME batch_end_time,
	  	batch.IS_DIRECTIONAL_BID batch_is_direc,
	  	batch.BUYER_DEPOSIT batch_buyer_deposit,
	  	batch.BIDDING_TYPE batch_bidding_type,
	  	batch.OFFER_TYPE batch_offer_type,
	  	batch.BATCH_DATE batch_date,
	  	batch.ANNOUNCEMENT_DAY batch_announ,
	  	batch.BID_DAY batch_bid_day,
	  	price.id price_id, 
	  	price.STARTING_PIRCE price_starting_price,
	  	price.BIDDING_GRADIENT price_bidding_gradient,
	  	price.TAX_RATE price_tax_rate,
	  	price.TAX_FREE_PRICE price_tax_free_price,
	  	price.RESERVE_PRICE price_reserve_price,
	  	item.PRODUCT_NAME item_product_name,
	  	item.PRODUCT_NO item_product_no,
	  	item.PACKAGES item_packages,
	  	item.ORIGIN_PLACE item_origin_place,
	  	item.WAREHOUSE_NAME item_warehouse,
	  	item.PIECE_UNIT item_piece_unit,
	  	item.TRADING_WEIGHT item_trading_weight
  	from bdt_batch batch
  	left join bdt_resources_item item on item.batch_id = batch.id 
	left join bdt_price_info price on price.batch_id = batch.id and item.id = price.item_id  
	where batch.member_code = #{memberCode,jdbcType=VARCHAR}<!--  and batch.id = 'P170508005' -->
	  	<if test="id != null and id != '' ">
	  	and batch.id like '%${id}%'
	  	</if>
	  	<if test="startTime != null and startTime != '' ">
	  	and batch.batch_date >= #{startTime,jdbcType=TIMESTAMP}
	  	</if>
	  	<if test="endTime != null and endTime != '' ">
	  	and batch.batch_date <= #{endTime,jdbcType=TIMESTAMP}
	  	</if>
	  	<if test="batchState != null and batchState != '' ">
	  	and batch.batch_state = #{batchState,jdbcType=VARCHAR}
	  	</if>
		<if test="sidx != null and sidx != '' ">
	  	order by batch.${sidx} ${sord}
	  	</if>
	  	<if test="sidx == null or sidx ==''">
	  	order by batch.id desc
	  	</if>
  </select>

<resultMap type="com.ouyeel.chem.bdt.entity.vo.BatchManagerViewVo" id="batchInfoMap">
        <!-- association Literally, it is only done here 1 Right 1 Association;  property Means yes com.mybatis.bean.StudentTemp The name of the attribute in;  
            javaType Indicates what type of object the attribute is  -->
        <!-- property  Denote com.mybatis.bean.Class Attributes in;  column  Represents the column name in the table  -->
        <id property="id" column="id"/>
	    <result property="batchName" column="batch_name"/>
	    <result property="startTime" column="batch_start_time"/>
	    <result property="endTime" column="batch_end_time"/>
	    <result property="isDirectionalBid" column="batch_is_direc"/>
	    <result property="batchState" column="batch_state"/>
	    <result property="buyerDeposit" column="batch_buyer_deposit"/>
	    <result property="biddingType" column="batch_bidding_type"/>
	    <result property="offerType" column="batch_offer_type"/>
	    <result property="batchDate" column="batch_date"/>
	    <result property="announcementDay" column="batch_announ"/>
	    <result property="bidDay" column="batch_bid_day"/>
        <!-- property Represents the collection type property name, ofType Indicates what type of object is in the collection  -->
        <collection property="priceInfo" ofType="com.ouyeel.chem.bdt.entity.PriceInfoDto">
            <id property="id" column="price_id"/>
       		<result property="startingPirce" column="price_starting_price"/>
       		<result property="biddingGradient" column="price_bidding_gradient"/>
       		<result property="taxRate" column="price_tax_rate"/>
       		<result property="taxFreePrice" column="price_tax_free_price"/>
       		<result property="reservePrice" column="price_reserve_price"/>
        </collection>
       <!--  property Represents the collection type property name, ofType Indicates what type of object is in the collection  -->
        <collection property="resourceItem" ofType="com.ouyeel.chem.bdt.entity.ResourcesItemDto">
       		<result property="productName" column="item_product_name"/>
       		<result property="productNo" column="item_product_no"/>
       		<result property="packages" column="item_packages"/>
       		<result property="originPlace" column="item_origin_place"/>
       		<result property="warehouseName" column="item_warehouse"/>
       		<result property="pieceUnit" column="item_piece_unit"/>
       		<result property="tradingWeight" column="item_trading_weight"/>
        </collection>
  </resultMap>

The mybatis parameter handles the case that the object contains list

mybatis is a very easy-to-use and flexible persistence layer framework, but it is precisely because it is too flexible that sometimes parameters are difficult to organize. I listed a special case I encountered in the project, and I hope to have an impression when I encounter it again next time.

Entity classes are as follows:


package com.kxlive.erp.sc.stock.vo; 
import java.util.Date;
import java.util.List; 
import org.springframework.format.annotation.DateTimeFormat; 
import com.kxlive.erp.sc.stock.po.PurchaseDeliver; 

public class QueryPurchaseDeliverVo extends PurchaseDeliver{ 
	private Long merchantId;	
	private Long stockId;
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date startTime;// Shipment start time 
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date endTime;// Delivery end time  
	private Integer page;// Current page 	
	private Integer rows;// Number of records per page 	
	private String stockName;// Warehouse name 	
	private String supplierName;// Name of Supplier 	
	private List<Long> condSupplierIds;// Supplier IDs	
	private List<Integer> condStatuss;// Status s
	public Date getStartTime() {
		return startTime;
	}
	
	public void setStartTime(Date startTime) {
		this.startTime = startTime;
	}
 
	public Date getEndTime() {
		return endTime;
	}
 
	public void setEndTime(Date endTime) {
		this.endTime = endTime;
	}
 
	public Integer getPage() {
		return page;
	}
 
	public void setPage(Integer page) {
		this.page = page;
	}
 
	public Integer getRows() {
		return rows;
	}
 
	public void setRows(Integer rows) {
		this.rows = rows;
	}
 
	public String getStockName() {
		return stockName;
	}
 
	public void setStockName(String stockName) {
		this.stockName = stockName;
	}
 
	public String getSupplierName() {
		return supplierName;
	}
 
	public void setSupplierName(String supplierName) {
		this.supplierName = supplierName;
	}
 
	public List<Long> getCondSupplierIds() {
		return condSupplierIds;
	}
 
	public void setCondSupplierIds(List<Long> condSupplierIds) {
		this.condSupplierIds = condSupplierIds;
	}
 
	public List<Integer> getCondStatuss() {
		return condStatuss;
	}
 
	public void setCondStatuss(List<Integer> condStatuss) {
		this.condStatuss = condStatuss;
	}
 
	public Long getMerchantId() {
		return merchantId;
	}
 
	public void setMerchantId(Long merchantId) {
		this.merchantId = merchantId;
	}
 
	public Long getStockId() {
		return stockId;
	}
 
	public void setStockId(Long stockId) {
		this.stockId = stockId;
	}
 
}

Here in the entity class, contains an List object, so when writing xml file, it is somewhat difficult for me to be a rookie.


  <select id="selectPurchaseDeliverByPrimaryKeySelective" resultMap="purchaseResultMap">
    select
	t2. name stock_name,
	t3. supplier_name, t1.*
		from
			T_SC_PURCHASE_DELIVER t1
		left join T_SC_STOCK t2 on t1.purchase_stock_id = t2.id
		left join T_SC_SUPPLIER t3 on t1.supplier_id = t3.id
    <where>
    	<if test="queryCondition.ifDel != null">
    		and t1.if_del=#{queryCondition.ifDel,jdbcType=INTEGER}
    	</if>
 
    	<if test="queryCondition.condSupplierIds != null">
    	and t1.supplier_id in
    	<foreach collection="queryCondition.condSupplierIds" item="supplierId" index="index" separator="," open="(" close=")">
    		#{queryCondition.condSupplierIds[${index}],jdbcType=BIGINT}
    	</foreach>
    	</if>
    	<if test="queryCondition.condStatuss != null">
    	and t1.status in
    	<span style="color:#ff0000;"><foreach collection="queryCondition.condStatuss" item="status"  separator=","  index="index" open="(" close=")">
    		#{queryCondition.condStatuss[${index}],jdbcType=INTEGER}
    	</foreach></span>
    	</if>
    	<if test="queryCondition.merchantId != null">
    		and t1.merchant_id=#{queryCondition.merchantId,jdbcType=BIGINT}
    	</if>
    	    	<if test="queryCondition.stockId != null">
    		and t1.purchase_stock_id=#{queryCondition.stockId,jdbcType=BIGINT}
    	</if>
    	<if test="queryCondition.startTime != null">
    		 <![CDATA[ and DATE_FORMAT(t1.create_time, '%Y-%m-%d') >=  DATE_FORMAT(#{queryCondition.startTime}, '%Y-%m-%d')]]> 
    	</if>
    	<if test="queryCondition.endTime != null">
    		 <![CDATA[ and DATE_FORMAT(t1.create_time, '%Y-%m-%d') <=  DATE_FORMAT(#{queryCondition.endTime}, '%Y-%m-%d')]]> 
    	</if>
    	<if test="queryCondition.name != null and queryCondition.name != '' ">
    		and t1.name like CONCAT('%', #{queryCondition.name, jdbcType=VARCHAR}, '%') 
    	</if>
    	<if test="queryCondition.deliverNo != null">
    		and t1.deliver_no like CONCAT('%', #{queryCondition.deliverNo, jdbcType=VARCHAR}, '%') 
    	</if>
    </where>
    order by t1.create_time desc
  </select>

The place marked red is the application. In the foreach loop, reference index as the subscript of list, so that all the data in the object can be fetched.


Related articles: