mybatis

一. mybatis的介绍

mybatis 半自动映射框架,在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。

可以编写原生态sql,可以严格执行sql的执行性能,但是过于依赖数据库,数据库移植性差,不能随意更换数据库。

二.#{}和${}的区别是什么

#{}是预编译处理,${}字符串替换

处理#{}的时候会把sql中的#{}替换成?号,调用 PreparedStatement 的set 方法来赋值;

在处理${}时,就是把${}替换成变量的值

使用#{}可以有效的防止 SQL 注入
 
三.Dao 接口的工作原理是什么
Mapper 接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻
找策略。Mapper 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK
动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,转而
执行 MapperStatement 所代表的 sql,然后将 sql 执行结果返回。
 
四.mybatis的批量插入
insert into table (id,name) values
<foreach collection='list' item='item' sperator=','> 
 (#{item.id},#{item.name})
</foreach>
 
 五.mybatis插入返回主键
<insert id=”insertname” usegeneratedkeys=”true” keyproperty=”
id”>
insert into names (name) values (#{name})
</insert>
 
六.Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复;如果没有配
置 namespace,那么 id 不能重复;
 
七.mybatis的一级/二级缓存
一级缓存是针对不同的sqlSession级别的
二级缓存是针对mapper级别的,跨sqlSession,
spring 没有事务 一级缓存会失效 ,是因为是不同的sqlSession
有事务 是同一个sqlSession,一级缓存有效
 
 
 
 
 
原文地址:https://www.cnblogs.com/javatk/p/15506954.html