Requisito previo
En las necesidades comerciales de los últimos días, encontré la inserción de datos de la lista en la base de datos o la consulta de los datos en la lista. Para las consultas, mi primera idea fue escribir una declaración SQL simple y ejecutar SQL en una declaración de bucle, pero esto consumirá mucho dinero y no se puede usar de esta manera, por lo que solo puede escribir el bucle en la declaración sql. Naturalmente, pensé en usar sql dinámico y foreach en mybatis.
Explicación del código específico
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 方法
*/
}
mapeador
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);
}
Esto está escrito en sql en los comentarios, también puede cambiarlo para escribir en archivos xml. Las oraciones son similares. como sigue:
<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>
Nota: Las condiciones en foreach corresponden a su declaración SQL.
resumen
La consulta y la inserción son casi lo mismo. Solo mire la oración y vuelva a escribirla.