Mybatis 插入與批量插入以及多參數批量刪除

 

實體類:java

複製代碼
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接口:sql

複製代碼
import java.util.List;
import model.AttachmentTable;
public interface AttachmentTableMapper {
  int insert(AttachmentTable record);
  void insertByBatch(List<AttachmentTable> attachmentTables); }
複製代碼

Mapper.xml:apache

複製代碼
<?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」】數組

 (二)多參數批量刪除示例mybatis

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等於什麼,就看你想對那個元素作循環。
該參數爲必選。app

separator 元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用「,「隔開,避免手動輸入逗號致使sql錯誤,如in(1,2,)這樣。該參數可選。
open foreach代碼的開始符號,通常是(和close=")"合用。經常使用在in(),values()時。該參數可選。
close foreach代碼的關閉符號,通常是)和open="("合用。經常使用在in(),values()時。該參數可選。
index 在list和數組中,index是元素的序號,在map中,index是元素的key,該參數可選。
 
複製代碼
相關文章
相關標籤/搜索