1. mybatis 获取返回自增长(auto_increment)ID
<insert id="insert" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
<selectKey resultType ="java.lang.Integer" keyProperty= "id" order= "AFTER">
SELECT LAST_INSERT_ID()
</selectKey >
INSERT INTO table_name(column1,column2,gmt_create)
VALUES
(
#{value1},
#{value2},
CURRENT_TIMESTAMP
)
</insert>
注意:
1. insert 返回的是影响的记录的行数
2. 自增长Id在插入的实体类对象中的Id
2. mybatis 动态传递表名和批量插入
<insert id="insert" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="id" statementType="STATEMENT">
<selectKey resultType ="java.lang.Integer" keyProperty= "id" order= "AFTER">
SELECT LAST_INSERT_ID()
</selectKey >
INSERT INTO
<if test="table_index>=10">tableName_${table_index}</if><if test="table_index < 10">tableName__0${table_index}</if>
(column1,column2,column3,column4,gmt_create)
VALUES
<foreach collection ="ListName" item="item" index= "index" separator =",">
(
${item.value1},
${item.value2},
${item.value3},
${item.value4},
CURRENT_TIMESTAMP
)
</foreach>
</insert>
注意要点:
1. parameterType 类型填java.util.Map,因为既要动态表名,又要批量插入,所以使用map,网上批量插入的例子参数都是list
2. 显式地生命statementType=”STATEMENT”。
3. 所有之前#{xxx}的东西都换成 $ {}符号。同时字符串类型的数据(插入数据库的字段)要自己加单引号,要不然语法会报错,这里注意#和$的区别:
- #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
- ${}将传入的数据直接显示生成在sql中
- $方式一般用于传入数据库对象,例如传入表名.
- #方式能够很大程度防止sql注入。$方式无法防止Sql注入。
- 一般能用#的就别用$.
参考链接:http://blog.csdn.net/tracymkgld/article/details/50905743