四时宝库

程序员的知识宝库

Java面试题之MyBatis(java面试题之线程池)

MyBatis 中 #{}和${}的区别是什么

  • #{}是预编译处理, ${}是字符串替换;
  • Mybatis 在处理#{}时, 会将 sql 中的#{}替换为?号, 调用 PreparedStatement 的 set 方法来赋值;
  • Mybatis 在处理${}时, 就是把${}替换成变量的值;
  • 使用#{}可以有效的防止 SQL 注入, 提高系统安全性 。

Mybatis 中一级缓存与二级缓存

(1) MyBatis 的缓存分为一级缓存和 二级缓存 。

一级缓存是 SqlSession 级别的缓存, 默认开启 。

二级缓存是 NameSpace 级别(Mapper)的缓存, 多个 SqlSession 可以共享, 使用时需 要进行配置开启 。

(2) 缓存的查找顺序: 二级缓存 => 一级缓存 => 数据库

MyBatis 如何获取自动生成的(主)键值

在<insert>标签中使用 useGeneratedKeys 和 keyProperty 两个属性来获取自动生成的 主键值 。

示例:

<insert id=”insertname”usegeneratedkeys=”true”keyproperty=”id”>

insert into names (name) values (#{name})

</insert>

简述 Mybatis 的动态 SQL, 列出常用的 6 个标签及作用

动态 SQL 是 MyBatis 的强大特性之一 基于功能强大的 OGNL 表达式 。

动态 SQL 主要是来解决查询条件不确定的情况, 在程序运行期间, 根据提交的条件动态的完成查询

常用的标签:

  • <if> : 进行条件的判断
  • <where>: 在<if>判断后的 SQL 语句前面添加 WHERE 关键字, 并处理 SQL 语句开 始位置的 AND 或者 OR 的问题
  • <trim>: 可以在 SQL 语句前后进行添加指定字符 或者去掉指定字符.
  • <set>: 主要用于修改操作时出现的逗号问题
  • <choose> <when> <otherwise>: 类似于 java 中的 switch 语句.在所有的条件中选 择其一
  • <foreach>: 迭代操作

Mybatis 如何完成 MySQL 的批量操作

MyBatis 完成 MySQL 的批量操作主要是通过<foreach>标签来拼装相应的 SQL 语句 例如:

<insert** id="insertBatch" >

insert into tbl_employee(last_name,email,gender,d_id) values <foreach** collection="emps" item="curr_emp" separator=","**>

(#{curr_emp.lastName},#{curr_emp.email},#{curr_emp.gender},#{curr_emp.dept.id} )

</foreach>

</insert>

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接