Mybatis常见错误

来源:互联网 发布:啊哈c语言 pdf微盘 编辑:程序博客网 时间:2024/06/05 19:24

一对多映射配置

<resultMap type="com.pingan.toa.asset.model.response.creditcard.CreditBillRespModel" id="BillAndBillDetailModel">      <id column="id" property="id" />    <result column="cardId" property="cardId" />    <result column="clientNo" property="clientNo" />        <collection property="billDetails" ofType="com.pingan.toa.asset.model.response.creditcard.CreditDetailRespModel" >    <id column="detailId" property="detailId" />    <result column="billId" property="billId" />    <result column="clientNoDetail" property="clientNoDetail" />      </collection>    </resultMap>

/** * 邮箱爬取数据,bill * */public class CreditBillRespModel {private String id;private String cardId;private String clientNo;/**账单详情列表*/private  List<CreditDetailRespModel> billDetails;}

public class CreditDetailRespModel {private String detailId;private String clientNoDetail;private String billId;}

SQL:

<!-- 查询信用卡账单2 -->   <select id="selectCreditCardBillModelList" resultMap="BillAndBillDetailModel"    parameterType="com.pingan.toa.asset.model.response.creditcard.AssetBankBillQuery">select<include refid="billAndDetailColumn" />from ASSET_BANK_BILL bill left join ASSET_BANK_CARD card on bill.card_id=card.idleft join ASSET_BANK_CREDIT_DETAIL detail on bill.id=detail.bill_id<where><if test="cardId != null">bill.CARD_ID = #{cardId}</if><if test="clientNo != null">and bill.CLIENT_NO = #{clientNo}</if><if test="cardNo != null">AND (card.CLIENT_NO = bill.CLIENT_NOAND card.medium_no = bill.card_noAND ((SUBSTRING (bill.CARD_NO FROM 1 FOR 4) = SUBSTRING (#{ cardNo } FROM 1 FOR 4)AND CHAR_LENGTH (bill.CARD_NO) = CHAR_LENGTH (#{ cardNo })AND SUBSTRING (bill.CARD_NO FROM '....$') = SUBSTRING (#{ cardNo } FROM '....$'))OR card.COMPLETE_MEDIUM_NO = #{ cardNo }))</if><if test="billMonth != null">and bill.BILL_MONTH = #{billMonth}</if><foreach collection="channelSources" item="item" index="index" separator=", " open="and bill.CHANNEL_SOURCE in ( " close=" )">#{item}</foreach>order by bill.BILL_MONTH desc limit 12</where>  </select>

 <sql id="billAndDetailColumn">  bill. ID AS id,bill.CARD_ID AS cardId,bill.CLIENT_NO AS clientNo,detail. ID AS detailId,detail.BILL_ID AS billId,detail.CLIENT_NO AS clientNoDetail,  </sql>

注意的地方就是
①配置一对多关系时,这个column指的是你查询结果的列名或别名
②一方和多方很可能字段重名,这时候建议列起别名(用AS),这样配置配置的column和property的值就可以一样了
③多的一方的 <id column="detailId" property="detailId" />中假如写成column="id" ,那么mybatis就是去取列为这个的值,这个值恰好就是bill的id,你又把它作为了detail的id,那么查出来的detail只会有一条。避免这个现象和字段混乱的的最好方式就是给查询出来的列起别名,然后和java类中的属性一一对应。









0 0
原创粉丝点击