Mybatis框架

#{}和${}的区别是什么?

${}是properties文件中的变量的占位符,他可以用于标签属性值和sqi内部,属于静态文本替换

#{}是sql参数的占位符

xml映射文件中,除常见的select、insert、update、delete标签之外还有哪些标签?

还有很多比如:<resultMap><parameterMap><sql><include><selectKey>等等

在实践中,通常一个xml映射文件,都会写一个Dao接口与之对应,这个Dao接口的原理是什么?Dao接口里面 的方法参数不同时,方法可以重载吗?

Dao接口就是我们常说的Mapper接口,接口的全限名就是xml文件中namespace的值,接口 的方法名就是映射文件中MappedStatement的id值,接口方法内的参数就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口时的方法时,接口全限名+方法名拼接字符串作为key值,可以唯一定位一个MappedStatement,因此是不能重载的

MyBatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用RowBounds对象进行分页,他是针对resultSet结果集执行的内存分页,而不是物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页

分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数

Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,assocation指一对一,collection指的就是一对多查询,在Mybatis配置问价中可以配置是否启用延迟加载lazyLoadingEnable=treu/false

原文地址:https://www.cnblogs.com/juddy/p/14071397.html