在代码中编写for语句和xml中写foreach有什么区别?
- 在代码中编写for循环语句,编写相对简单,而且容易理解,但是他有一个很大的缺点那就是for语句每一循环都会创建一次连接,对数据库的消耗相当的大,如果使用foreach他会将所有的sql值拼接成为一条SQL语句。
- foreach也有一些问题,比如批量操作的时候,它对传入的数据包的大小是有限制的,默认大小值为4M,如果操作4M则会出现报错。(解决方案:定义一个批量执行器Batch Executor)
resultMap和resultType的区别?
Statement和PreparedStatement的区别?
什么时候会出现关联查询?
MyBatis关联查询的方式有哪些?
- 嵌套结果
<!-- 根据文章查询作者,一对一查询的结果,嵌套结果 -->
<resultMap id="BlogWithAuthorResultMap" type="com.gupaoedu.domain.associate.BlogAndAuthor">
<id column="bid" property="bid" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<!-- 联合查询,将author的属性映射到ResultMap -->
<association property="author" javaType="com.gupaoedu.domain.Author">
<id column="author_id" property="authorId"/>
<result column="author_name" property="authorName"/>
</association>
</resultMap>
- 嵌套查询
<!-- 另一种联合查询(一对一)的实现,但是这种方式有“N+1”的问题 -->
<resultMap id="BlogWithAuthorQueryMap" type="com.gupaoedu.domain.associate.BlogAndAuthor">
<id column="bid" property="bid" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<association property="author" javaType="com.gupaoedu.domain.Author"
column="author_id" select="selectAuthor"/> <!-- selectAuthor 定义在下面-->
</resultMap>
<!-- 嵌套查询 -->
<select id="selectAuthor" parameterType="int" resultType="com.gupaoedu.domain.Author">
select author_id authorId, author_name authorName
from author where author_id = #{authorId}
</select>
逻辑翻页和物理翻页?
MyBatis如果新增了字段,我们原来的Mapper.xml文件不想改动怎么办?
- 集成Mapper文件
- 编写通用Mapper
- 通用Mapper对应的框架 Tk MyBatis和MyBatis plus
association和collection的区别?
一级缓存的作用域 session级别,会话级别。一个会话内能够共享,如果多个会话不能共享
二级缓存的作用域 namespace级别,相当于同一个接口内,共享数据
二级缓存是在一级缓存之前还是之后工作?
先二级然后在一级缓存
一级缓存和二级缓存的关系?