准备面试需要看的一些面试题(三)

一、关于Mybatis

1. #{}与${}有什么区别
#{}解析传递进来的参数数据,是预编译处理可以有效的防止sql注入,提高系统安全性
${}对传递进来的参数原样拼接在sql中,是字符串替换
2. 当实体类中的属性名和表中的字段名不一致,怎么办
通过在查询的sql语句中定义字段的别名,让字段的别名和实体类的属性名一致
通过映射字段和实体类属性名一一对应的关系
3. 如何获取自动生成的主键值
keyProperty设置值为id,可以使用数据库定义的主键规则,也可以在mapper中定义主键规则
4. 在mapper中如何传递多个参数
一、使用占位符思想
在映射文件中使用#{0},#{1}代表传递进来的第几个参数
使用@param注解来命名参数,可以在xml中直接使用
二、使用Map集合作为参数来装载(比较常用)
5. Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理么
Mybatis动态sql可以让我们在xml文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能
Mybatis提供了9中动态sql标签:trim,where,set,foreach,if,choose,when,otherwise,bind
其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能
6. Mybatis的xml映射文件中不通的xml映射文件,id是否可以重复
看是否定义了namespace,如果定义了,则可以重复,如果没有,则不可以重复
7. 为什么说Mybatis是半自动ORM映射工具,它与全自动的区别在哪里
Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据关系模型直接获取,所以它是全自动的
而Mybatis在查询关联对象或者关联集合时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具
8. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个dao接口的工作原理是什么,dao接口里的方法,参数不同时,方法能重载么?
Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数就是传递给sql的参数
Mapper接口是没有实现类的,当调用接口方法是,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement。
Dao接口里的方法是不能重载的,应为是全限名+方法的保存和寻找策略
9. 接口绑定有几种实现方式,分别是怎么实现的
两种,一种是通过注解绑定,就是在接口的方法上面加@Select@Update等注解李敏啊包含sql的语句来绑定
一种是通过xml李敏啊写sql来绑定,在这种情况下,要制定xml映射文件里面的namespace必须为接口的全路径名
10. Mybatis是如何进行分页的,分页插件的原理是什么
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页
分页插件的原理是使用Mybatis提供的插件接口,实现自定义插件,在插件拦截方法内拦截待执行的sql然后重写sql根据dialect方言,添加对应物理分页语句和物理分页参数
11. 简述Mybatis的插件运行原理,以及如何编写一个插件
Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4中接口的插件,使用动态单利,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这四个接口对象的方法时,就会进入拦截方法,给插件编写注解,指定要拦截那一个接口的哪些方法即可,需要在配置文件中配置编写的插件
12. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么
仅支持一对一,一对多的延迟加载,可以通过配置lazyLoadingEnabled设置,原理是使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,如果发现值为空,则单独发送事先保存号的查询关联B对象的sql然后set
13. Mybatis都有哪些Executor执行器?他们之间的区别是什么
Mybatis有三种基本的Executor执行器,
SimpleExecutor每执行一次Update或select,就开启一个Statement对象,用完立即关闭
ReuseExecutor执行Update或者select以sql为key查找Statement对象,存在就使用,不存在就创建,用完后不关闭,放到map中
BatchExecutor执行update(不支持select)将所有sql都添加到批处理中,等待系统统一执行,它缓存了多个对象。
14. Mybatis与Hibernate有哪些不同
Mybatis是半自动ORM框架,Hibernate是全自动,M学习门槛低,可以直接编写sql,灵活性高适用于需求变化频繁的一些项目。H适用于一些固化的定制型软件,需要较好的模型设计,门槛更高

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值