mybatis总结

来源:互联网 发布:百万公众网络 编辑:程序博客网 时间:2024/06/05 07:48

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 &lt; 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}的东西都换成 $ {}符号。同时字符串类型的数据(插入数据库的字段)要自己加单引号,要不然语法会报错,这里注意#和$的区别:

  1. #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
  2. ${}将传入的数据直接显示生成在sql中
  3. $方式一般用于传入数据库对象,例如传入表名.
  4. #方式能够很大程度防止sql注入。$方式无法防止Sql注入。
  5. 一般能用#的就别用$.

参考链接:http://blog.csdn.net/tracymkgld/article/details/50905743

原创粉丝点击