一、xml映射文件
1、 xml文件中如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id就不能重复
原因:
a、namespace+id是作为Map<String,MapperStatement>的key使用,如果没有namespace,那么剩下id,如果id重复就会导致数据互相覆盖。有了namespace,id就不会重复
MyBatis分页插件实现
使用RowBounds对象进行分页,它针对ResultSet结果集执行的内存分页,而非物理分页,可以直接在sql内直接书写,带有物理参数来完成分页,也可以使用分页插件来完成物理分页
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数
MyBatis原理
原理图如下
Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
第一种是使用 标签,逐一定义列名和对象属性名之间的映射关系。
第二种是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写,但是列名不区分大小写,Mybatis会忽略列名大小写,智能找到与之对应对象属性名,你甚至可以写成T_NAME AS NaMe,Mybatis一样可以正常工作。
#{}和${}的区别
#{}是占位符,预编译处理;KaTeX parse error: Expected 'EOF', got '#' at position 32: …编译处理。Mybatis在处理#̲{}时,#{}传入参数是以字符…{} 不能防止SQL 注入
#{} 的变量替换是在DBMS 中;${} 的变量替换是在 DBMS 外