mybatis将list数据插入到数据库中

前提需求

在最近几天的业务需求中,遇到了将list数据插入到数据库中,或者是将list中的数据查询出来,查询的话,我第一个想法就是写个简单的sql语句,在循环中执行sql语句,但是这样会消耗很大,不能这样使用,那么就只能将循环写到sql语句中。自然就想到用mybatis中动态sql,foreach。

具体的代码讲解

InventoryDetail

@Table(name = "t_inventory_detail")
public class InventoryDetail {
    
    
    /**
     * 主键ID
     */
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 盘点头表ID
     */
    @Column(name = "inventory_header_id")
    private Integer inventoryHeaderId;

    /**
     * 盘点履历表ID
     */
    @Column(name = "inventory_resume_id")
    private Integer inventoryResumeId;

    /**
     * 商品ID
     */
    @Column(name = "product_id")
    private Integer productId;

    /**
     * 在库数量
     */
    @Column(name = "stock_quantity")
    private Integer stockQuantity;

    /**
     * 在库单价
     */
    @Column(name = "stock_price")
    private Long stockPrice;

    /**
     * 创建时间
     */
    @Column(name = "create_date")
    private Date createDate;

    /**
     * 创建人ID
     */
    @Column(name = "create_user_id")
    private Integer createUserId;

    /**
     * getter 和 setter 方法
     */
}

mapper

public interface InventoryDetailMapper {
    
    
    /**
     * 插人数据到盘点详情表
     *
     */
    @Insert("<script> " +
            "insert into t_inventory_detail (inventory_header_id, product_id, stock_quantity, stock_price, create_date, create_user_id)" +
            " values " +
            " <foreach collection='list' item='inventoryDetail' separator=','>" +
            " (#{inventoryDetail.inventoryHeaderId}," +
            "  #{inventoryDetail.productId}," +
            "  #{inventoryDetail.stockQuantity}," +
            "  #{inventoryDetail.stockPrice}," +
            "  #{inventoryDetail.createDate}," +
            "  #{inventoryDetail.createUserId})" +
            "</foreach> " +
            "</script>")
    Integer insertInventoryDetail(@Param("list") List<InventoryDetail>  list);
}

这是用注释写的sql,你也可以改成用xml文件写的。语句都差不多。如下:

<insert id="insertInventoryDetail" parameterType="java.util.List" useGeneratedKeys="false">
    			insert into t_inventory_detail
    			( inventory_header_id, product_id, stock_quantity, stock_price, create_date, create_user_id)
    			values
    			<foreach collection="list" item="inventoryDetail" separator=",">
    				(
    					#{
    
    inventoryDetail.inventoryHeaderId},
    					#{
    
    inventoryDetail.productId},
    					#{
    
    inventoryDetail.stockQuantity},
    					#{
    
    inventoryDetail.stockPrice},
    					#{
    
    inventoryDetail.createDate},
    					#{
    
    inventoryDetail.createUserId}}
    				)
    		     </foreach>		
    </insert>    
</mapper>

注意:foreach中的条件与你的sql语句相对应。

小结

查询跟插入是差不多的。看着语句进行改写即可。

猜你喜欢

转载自blog.csdn.net/hello_cmy/article/details/108074097