先贴一段代码:
<?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="com.Dao.task.Excel_InDao"> //这个地方还是用强大的cv大法吧,,,要是写错了就GG了
<!-- 批量插入 -->
<insert id="insertDatasFromExcel" parameterType="java.util.List" >
insert into schedule(teacher,course_name,exper_name,week,number,class_name,weekday,section)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.teacher,jdbcType=VARCHAR},
#{item.course_name,jdbcType=VARCHAR},
#{item.exper_name,jdbcType=VARCHAR},
#{item.week,jdbcType=VARCHAR},
#{item.number,jdbcType=INTEGER},
#{item.class_name,jdbcType=VARCHAR},
#{item.weekday,jdbcType=VARCHAR},
#{item.section,jdbcType=VARCHAR})
</foreach>
</insert>
</mapper>
需要配置的属性:
- id="xxxx" >>> 表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
- parameterType="" >>>表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】
- resultMap=“ ”>>> 定义出参,调用已定义的<resultMap>映射管理器的id值【可选】
- resultType=“ ”>>>定义出参,匹配普通Java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如<insert>语句返回值为int,(增删改都是默认返回一个int类型的数据,表示影响的行数)】
- index:为数组的下标。
- item:为数组每个元素的名称,名称随意定义
- open:开始符号
- separator:中间以什么分隔输出
- close:结束符号
#{}和${}的区别:
使用占位符#{}可以有效防止sql注入,在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}和#{}不同,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。使用${}不能防止sql注入,但是有时用${}会非常方便,如下的例子:
<!-- 根据名称模糊查询用户信息 -->
<select id="selectUserByName" parameterType="string" resultType="user">
select * from user where username like '%${value}%'
</select>