由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解。文档链接 :mybatis官方文档介绍
1 <!-- 根据条件查询用户 --> 2 <select id="queryUserByWhere" parameterType="user" resultType="user"> 3 SELECT id, username, birthday, sex, address FROM `user` 4 WHERE 1=1 5 <if test="sex != null and sex != ''"> 6 AND sex = #{sex} 7 </if> 8 <if test="username != null and username != ''"> 9 AND username LIKE 10 '%${username}%' 11 </if> 12 </select>
注意字符串类型的数据需要要做不等于空字符串校验。
上面的sql还有where 1=1 这样的语句,很麻烦 可以使用mybatis的where标签
5 <!-- 根据条件查询用户 --> 6 <select id="queryUserByWhere" parameterType="user" resultType="user"> 7 SELECT id, username, birthday, sex, address FROM `user` 8 <!-- where标签可以自动添加where,同时处理sql语句中第一个and关键字 --> 9 <where> 10 <if test="sex != null"> 11 AND sex = #{sex} 12 </if> 13 <if test="username != null and username != ''"> 14 AND username LIKE 15 '%${username}%' 16 </if> 17 </where> 18 </select>
效果是一样的
Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的。
然而 然而 然而 引用结果resultMap巨tm诡异resultMap 和其中的参数重复的话会报错 所以关于resultMap一定要慎重填写 必要的时候把属性都填上不要偷懒
1 <!-- 根据条件查询用户 --> 2 <select id="queryUserByWhere" parameterType="user" resultType="user"> 3 <!-- SELECT id, username, birthday, sex, address FROM `user` --> 4 <!-- 使用include标签加载sql片段;refid是sql片段id --> 5 SELECT <include refid="userFields" /> FROM `user` 6 <!-- where标签可以自动添加where关键字,同时处理sql语句中第一个and关键字 --> 7 <where> 8 <if test="sex != null"> 9 AND sex = #{sex} 10 </if> 11 <if test="username != null and username != ''"> 12 AND username LIKE 13 '%${username}%' 14 </if> 15 </where> 16 </select> 17 18 <!-- 声明sql片段 --> 19 <sql id="userFields"> 20 id, username, birthday, sex, address 21 </sql>
再这个xml中你甚至可以使用别的xml中的sql 加上namespace即可:这样
关于foreach 这个也很好用,方便:
这是接口 注意接口方法名和maper.xml的id一致 否则无法自动映射。这是mapper。xml的
需要了解一下foreach里面都是些什么东西 collection:你传给xml参数的类型 也是需要遍历前的对象 item给遍历出来的结果一个名字,可以参照foreach方法
index 就是index的意思 open:开始遍历前加上的字符 在这里是 紧跟着 in 后面的 close:遍历结束后加上的字符 separator 每个遍历结果之间的分隔符 那么总的就是 delete from mall_user where user_id in ( 1,2,3); mybatis会知道最后一个遍历结果不要加,
还一个mybatis放sql注入 总得来说就是别用${} 多用#{}详解:mybatis实现防止sql注入总的来说是依靠其预编译过程和存储过程。存储过程就是mybatis提供一组完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过调用存储过程并给定参数(如果该存储过程带有参数)就可以执行它,也可以避免SQL注入攻击。预编译:我们传给mybatis的参数可以理解为占位符,在预编译过程mybatis检查语句的正确性然后将我i们给的占位符放到它预编译的语句的占位符上
补充说一下关于sqlMapConfig。xml中setting配置 我不怎么用但还是补充介绍一下