1.mybatis中,${} 和 #{} 的区别

{} 是占位符,预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理面试题笔记第十二天 - 图1{}替换成变量的值。

使用#{}可以有效的防止SQL注入,提高系统安全性。

2 mybatis中,resultType和ResultMap的区别

如果数据库结果集中的列名和要封装实体的属性名完全一致的话用 resultType 属性

如果数据库结果集中的列名和要封装实体的属性名有不一致的情况用 resultMap 属性,通过resultMap手动建立对象关系映射,resultMap要配置一下表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来

3 Mybatis中动态SQL的标签和作用

  1. if是为了判断传入的值是否符合某种规则,比如是否不为空.
  2. where标签可以用来做动态拼接查询条件,当和if标签配合的时候,不用显示的声明类型where 1 = 1这种无用的条件
  3. foreach标签可以把传入的集合对象进行遍历,然后把每一项的内容作为参数传到sql语句中.
  4. include可以把大量的重复代码整理起来,当使用的时候直接include即可,减少重复代码的编写;
  5. 适用于更新中,当匹配某个条件后,才会对该字段进行跟新操作

4 获取自动生成的(主)键值

insert 方法 总是 返回 一个 int 值 ,这 个值 代表 的是 插入 的行 数。 如果 采用 自增 长策 略,自动 生成 的键 值在 insert 方法 执行 完后 可以 被设 置到 传入的参 数对 象中 。 示例 :

insert标签内添加:usegeneratedkey=”true” keyproperty = “id” keyColumn=”id”