Mybatis12:通过级联属性赋值解决多对一的映射关系
Way01:级联属性赋值
//查询商品以及商品对应的供应商 public SmbmsBill getBillAndProvider(@Param("bid") String bid);
<!-- public SmbmsBill getBillAndProvider(@Param("bid") String bid);--> <resultMap id="BillAndProviderMapOne" type="SmbmsBill"> <id property="id" column="id"/> <!-- property里面写的是对象的属性字段,column里面写的是数据库中的列名--> <result property="productName" column="productName"/> <result property="billCode" column="billCode"/> <result property="totalPrice" column="totalPrice"/> <result property="isPayment" column="isPayment"/> <result property="provider.id" column="providerId"/> <result property="provider.proCode" column="proCode"/> <result property="provider.proName" column="proName"/> <result property="provider.proContact" column="proContact"/> <result property="provider.proPhone" column="proPhone"/> </resultMap> <select id="getBillAndProvider" resultMap="BillAndProviderMapOne"> select * from smbms_bill left join smbms_provider on smbms_bill.providerId=smbms_provider.id where smbms_bill.id=#{bid} </select>
Way02:association
association:处理多对一的映射关系
property:需要处理多对一的映射关系的属性名
javaType:该属性的类型(对象)
<!-- public SmbmsBill getBillAndProvider(@Param("bid") String bid);--> <resultMap id="BillAndProviderMapOne" type="SmbmsBill"> <id property="id" column="id"/> <!-- property里面写的是对象的属性字段,column里面写的是数据库中的列名--> <!-- 处理的是属性和字段的映射关系 --> <result property="productName" column="productName"/> <result property="billCode" column="billCode"/> <result property="totalPrice" column="totalPrice"/> <result property="isPayment" column="isPayment"/> <association property="provider" javaType="SmbmsProvider"> <id property="id" column="id"/> <result property="proCode" column="proCode"/> <result property="proName" column="proName"/> <result property="proContact" column="proContact"/> <result property="proPhone" column="proPhone"/> </association> </resultMap> <select id="getBillAndProvider" resultMap="BillAndProviderMapOne"> select * from smbms_bill left join smbms_provider on smbms_bill.providerId=smbms_provider.id where smbms_bill.id=#{bid} </select>
Way03:分步查询
【interface】orderMapper.java
/** * 分布查询:查询商品和对应的供应商信息 * 分步查询第一步:查询商品信息 * */ public SmbmsBill getBillAndProviderStepOne(@Param("bid") String bid);
【interface】providerMapper.java
/** * 分布查询:查询商品和对应的供应商信息 * 分步查询第一步:查询商品信息 *分步查询第二步:查询供应商信息 */ public SmbmsBill getBillAndProviderStepTwo(@Param("pid") String pid);
orderMapper.xml
<!-- 【多表联结】分步查询--> <resultMap id="BillAndProviderMapOne" type="SmbmsBill"> <result property="productName" column="productName"/> <result property="billCode" column="billCode"/> <result property="totalPrice" column="totalPrice"/> <result property="isPayment" column="isPayment"/> <!--下方的select设置的是分布查询的sql的唯一标识(namespace.SQLId或napper接口的 全类名/方法名)--> <association property="provider" select="cc.mllt.jdbc.utils.providerMapper.getBillAndProviderStepTwo" column="providerId"/> <!--上面的colum设置的分步查询的条件,也就是第二步查询的语句要查哪一句--> </resultMap> <!-- public SmbmsBill getBillAndProviderStepOne(@Param("bid") String bid);--> <select id="getBillAndProviderStepOne" resultMap="BillAndProviderMapOne"> <!-- select productName '商品名称',totalPrice '订单金额',isPayment '是否付款' from smbms_bill where id=#{bid}--> select * from smbms_bill where id=#{bid} </select>
providerMapper.xml
<!-- public SmbmsBill getBillAndProviderStepTwo(@Param("pid") String pid);--> <select id="getBillAndProviderStepTwo" resultType="SmbmsProvider"> <!--select proCode '供应商编码',proName '供应商名称',proContact '供应商联系人',proPhone '供应商联系电话' from smbms_provider where id=#{pid}--> select * from smbms_provider where id=#{pid} </select>
<association property="provider" select="cc.mllt.jdbc.utils.providerMapper.getBillAndProviderStepTwo" column="providerId"/>
中,select快速获取的方式