Mybatis面经

MyBatis

1、什么是MyBatis?

答:mybatis是一个半ORM框架,内部封装了jdbc,加载驱动,创建连接等繁琐过程,提供了xml或注解和映射原生信息。通过xml文件或许注解的方式将要执行的各种Statement配置起来的,并通过java对象和statement中sql的动态参数进行映射结果生成最终执行的sql语句,最后又mybatis框架执行SQL语句并将结果映射为java对象并返回

2、mybatis的优缺点:

答:优点
	1、基于sql编程,相当灵活
	2、与jdbc相比,减少了50%以上的代码量,消除了jdbc的冗余操作
	3、很好的与各种数据库兼容
	4、能够与Spring很好的集成
	5、提供映射标签
   缺点:
	1、sql语句的编程工作量大
	2、SQL语句依赖于数据库
	

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

答:${}是字符串替代,#{}是预处理
	mybatis在处理${}时,就是把${}直接替换成变量的值,
	mybatis在处理#{}时,会将sql中的#{}替换成?(占位符)号,
	调用PreparedStatement的set方法来赋值
	使用#{}可以有效的防止sql注入,提高系统安全性
	注:order by 好像必须使用${}

4、通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

答:Mapper接口的工作原理是jdk动态代理,mybatis运行时会使用JDK动态代理为Mapper生成代理对象
	代理对象会拦截接口方法,根据类的全限定名+方法名,唯一定位到一个MapperStatement并调用执行器所代表的的sql,然后将sql执行结果返回
	Mapper接口里的方法是不能重载的,因为时使用全限定名+方法名的保存和寻找策略

5、mybatis有分页功能吗?是如何分页的,分页插件的原理是什么?

答:Mybatis使用RowBounds对象进行分页,他是针对ResultSet结果集执行的内
存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页
的功能,也可以使用分页插件来完成物理分页。
	分页插件的基本原理是使用mybatis提供的插件接口实现自定义插件,在插件
	的拦截方法内拦截待执行的sql,然后重写sql,根据根据dialect方言,添加
	对应的物理分页语句和物理分页参数
(注:内存分页就是将所有数据查询,然后在分页。物理分页是,使用limit语句进行分页)

6、MyBatis是否支持延迟加载?

答:mybatis仅支持association关联对象和collection关联对象的延迟加载,association指的是一对一,collection指的是一对多查询。

7、mybatis怎样获取自动生成的主键

答:可以通过selectKey标签来获取,如:  select last_insert_id()  
	其中,order可以表示在执行sql之前还是之后

8、mybatis中Mapper怎样传递多个参数?

答:使用#{数字}表示参数的位置、使用@Param注解、封装成map,并传递map

待续…

你可能感兴趣的:(mybatis,java,数据库,面试)