美文网首页
Mybatis常见使用总结

Mybatis常见使用总结

作者: 佩佩691 | 来源:发表于2017-08-28 15:20 被阅读4次

    • Mapper中#{}和${}的区别
    1. #{}采用的是占位符进行拼接sql语句,${}直接显式的显式字符串
    2. #{}会尽可能的防止sql注入的问题,${}会发生sql注入

    相比来说最好是使用#{}不要使用${},但是Order By时一般使用$
    所谓安全性的sql注入问题,例如:

    select * from ${tableName} where name = #{name}   
    

    假如${tableName}="user; delete user; -- "

    select * from user; delete user; -- where name = ?;
    

    完,用户表没了...


    • Mapper中批量添加和删除

    批量操作使用的是foreach标签
    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"
    item:循环的变量别名
    separator:集合中每个对象之间的分隔符
    open:以。。。开始
    close:以。。。结束
    index:集合序号
    批量添加

    <insert id="batchSaveUser">
        insert into t_user (user_name,sex) values
        <foreach collection="users" item="u" separator=",">
            (#{u.userName},#{u.sex})
        </foreach>
    </insert>
    

    批量删除

    <delete id="batchDeleteUser">
        delete from t_user where id in (
        <foreach collection="ids" item="id" separator=",">
            #{id}
        </foreach>
        )  
    </delete>
    

    添加用户并返回新添加的用户

    <insert id="insertUser" parameterType="cn.xinxinkaikai.pojo.User">
        <!-- 
            keyProperty:执行sql语句后保存的位置
            resultType:返回类型
            order:该sql语句执行时期,相对于insert语句执行的时间
         -->
        <selectKey keyProperty="uId" resultType="Integer" order="AFTER">
            select LAST_INSERT_ID()
        </selectKey>
        insert into users(uName,uPasswd) values (#{uName},#{uPasswd})
    </insert>

    相关文章

      网友评论

          本文标题:Mybatis常见使用总结

          本文链接:https://www.haomeiwen.com/subject/ylfgdxtx.html