Mybatis 插入与批量插入以及多参数批量删除
实体类:
import java.io.Serializable; public class AttachmentTable implements Serializable { private static final long serialVersionUID = 8325882509007088323L; private Integer id; // 附件名称 private String name; // 日志 ID private Integer logid; // 附件 URL private String url;<span style="color: rgba(51, 153, 102, 1)">// getter/setter.......</span></span><span style="color: rgba(0, 0, 0, 1)">
}
Mapper 接口:
import java.util.List; import model.AttachmentTable; public interface AttachmentTableMapper {
int insert(AttachmentTable record);
void insertByBatch(List<AttachmentTable> attachmentTables);}
Mapper.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="mapper.AttachmentTableMapper"> <resultMap id="BaseResultMap" type="model.AttachmentTable"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="logID" jdbcType="INTEGER" property="logid" /> </resultMap> <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="model.AttachmentTable"> <result column="url" jdbcType="LONGVARCHAR" property="url" /> </resultMap> <sql id="Base_Column_List"> id, name, logID </sql> <sql id="Blob_Column_List"> url </sql> <insert id="insert" parameterType="model.AttachmentTable"> insert into attachment_table (id, name, logID,url) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{logid,jdbcType=INTEGER},#{url,jdbcType=LONGVARCHAR}) </insert> <insert id="insertByBatch" parameterType="java.util.List"> insert into attachment_table (name, logID,url) values <foreach collection="list" item="item" index="index" separator=","> (#{item.name,jdbcType=VARCHAR}, #{item.logid,jdbcType=INTEGER},#{item.url,jdbcType=LONGVARCHAR}) </foreach> </insert> </mapper>
【注:标红的地方是需要注意的地方, 我第一次做时直接“#{name,jdbcType=VARCHAR}”, 没有加前缀“item”, 导致报错“找不到 name”】
(二)多参数批量删除示例
package com.vrv.linkdood.app.workreport.demomodule.mapper;import org.apache.ibatis.annotations.Param;public interface AttachmentTableMapper { void deleteByLogIdAndNames(@Param("logid") Integer logID, @Param("names") String[] names); }
<delete id="deleteByLogIdAndNames"> delete from attachment_table where logid = #{logid,jdbcType=INTEGER} AND NAME IN <foreach collection="names" item="item" index="index" open="(" close=")" separator=","> #{item} </foreach> </delete>
属性 | 描述 |
item | 循环体中的具体对象。支持属性的点路径访问,如 item.age,item.info.details。 具体说明:在 list 和数组中是其中的对象,在 map 中是 value。 该参数为必选。 |
collection |
要做 foreach 的对象,作为入参时,List<?> 对象默认用 list 代替作为键,数组对象有 array 代替作为键,Map 对象没有默认的键。 |
separator | 元素之间的分隔符,例如在 in()的时候,separator="," 会自动在元素中间用“,“隔开,避免手动输入逗号导致 sql 错误,如 in(1,2,) 这样。该参数可选。 |
open | foreach 代码的开始符号,一般是 (和 close=")" 合用。常用在 in(),values() 时。该参数可选。 |
close | foreach 代码的关闭符号,一般是 )和 open="(" 合用。常用在 in(),values() 时。该参数可选。 |
index | 在 list 和数组中,index 是元素的序号,在 map 中,index 是元素的 key,该参数可选。 |