1. 程式人生 > >Mybatis 插入與批量插入以及多引數批量刪除

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;

    // getter/setter.......
}

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物件沒有預設的鍵。 當然在作為入參時可以使用@Param("keyName")來設定鍵,設定keyName後,list,array將會失效。 除了入參這種情況外,還有一種作為引數物件的某個欄位的時候。舉個例子: 如果User有屬性List ids。入參是User物件,那麼這個collection = "ids" 如果User有屬性Ids ids;其中Ids是個物件,Ids有個屬性List id;入參是User物件,那麼collection = "ids.id" 上面只是舉例,具體collection等於什麼,就看你想對那個元素做迴圈。 該引數為必選。

separator 元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該引數可選。
open foreach程式碼的開始符號,一般是(和close=")"合用。常用在in(),values()時。該引數可選。
close foreach程式碼的關閉符號,一般是)和open="("合用。常用在in(),values()時。該引數可選。
index 在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。