전제 조건
지난 며칠 동안 비즈니스 요구 사항에서 데이터베이스에 목록 데이터를 삽입하거나 목록에있는 데이터를 쿼리하는 일이 발생했습니다. 쿼리의 경우 첫 번째 아이디어는 간단한 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 方法
*/
}
매퍼
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 문에 해당합니다.
요약
쿼리와 삽입은 거의 동일합니다. 문장을보고 다시 쓰세요.