mybatis中collection的column传入多个参数值:


标签属性:

  • property: resultMap返回实体类中字段和result标签中的property一样
  • column: 数据库的列名或者列标签别名,是关联查询往下一个语句传送值。注意:在处理组合键时,您可以使用column=“{prop1=col1,prop2=col2}”这样的语法,设置多个列名传入到嵌套查询语句。这就会把prop1和prop2设置到目标嵌套选择语句的参数对象中。
  • javaType: 一般为ArrayList或是java.util.List
  • ofType: java的实体类,对应数据库表的列名称,即关联查询select对应返回的类
  • select: 执行一个其他映射的sql语句返回一个java实体类型

代码:

public class Order{
 	private Integer id;
    private String orderNo; //订单编号   
    private BigDecimal amout; //总金额
    private List<Food> foodList; //问题选项集合
    //Getter和Setter省略
}
public class Food{
    private String foodName; //食品名称   
    private Integer foodNum; //数量
    private BigDecimal price; //单价   
    //Getter和Setter省略
}
//mapper.xml
<resultMap id="OrderMap" type="com.buchirourou.entity.Order">
        <result property="id" column="id"></result>
        <result property="order_no" column="orderNo"></result> 
        <result property="amout" column="amout"></result>      
        <collection property="foodList" 	//对应Order类中的集合属性名称
        			ofType="com.buchirourou.entity.Food"	//对应关联查询的类
                    column="{orderId=id,orderNo=order_no}" 	 //关联查询的sql传递参数
                    javaType="arraylist"
                    select="com.buchirourou.mapper.FoodMapper.findFood">  //对应查询的sql,我这是通过mapper类指向的mapper.xml
        </collection>
</resultMap>

<resultMap id="FoodMap" type="com.buchirourou.entity.Food">
        <result property="food_name" column="foodName"></result>
        <result property="food_num" column="foodNum"></result>  
        <result property="price" column="price"></result>      
</resultMap>
//主查询语句
<select id="findOrder" resultMap="OrderMap">
        SELECT
	        id,
     		orderNo as order_no,   
	    	amout
        FROM t_order
</select>
//关联查询语句
<select id="findFood" resultMap="FoodMap">
        SELECT
           food_name,
           food_num,
           price
        FROM t_food
        WHERE
          order_id = #{orderId}
          AND order_no = #{orderNo}
</select>

column="{orderId=id,orderNo=order_no}"orderId对应findFood中#{orderId}的参数名称,id对应findOrder中select的id,若在查询时给字段加别名正如orderNo对应findFood中#{orderNo}的参数名称,order_no对应findOrder中orderNo的别名order_no
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐