MyBatis面试题及答案【最新版】MyBatis高级面试题大全(2021版),发现网上很多MyBatis面试题及答案整理都没有答案,所以花了很长时间搜集,本套MyBatis面试题大全,MyBatis面试题大汇总,有大量经典的MyBatis面试题以及答案,包含MyBatis语言常见面试题、MyBatis工程师高级面试题及一些大厂MyBatis开发面试宝典,面试经验技巧等,应届生,实习生,企业工作过的,都可参考学习!
1、 有接口绑定,包括注解绑定 sql 和 xml 绑定 Sql
2、 动态 sql 由原来的节点配置变成 OGNL 表达式 3、 在一对一,一对多的时候引进了
association,在一对多的时候引入了 collection 节点,不过都是在 resultMap 里面配置
1、 MyBatis 把 sql 语句从 Java 源程序中独立出来,放在单独的 XML 文件中编写,给程序的
维护带来了很大便利。
2、 MyBatis 封装了底层 JDBC API 的调用细节,并能自动将结果集转换成 Java Bean 对象,
大大简化了 Java 数据库编程的重复工作。
3、 因为 MyBatis 需要程序员自己去编写 sql 语句,程序员可以结合数据库自身的特点灵活
控制 sql 语句,因此能够实现比 Hibernate 等全自动 orm 框架更高的查询效率,能够完成复
杂查询。
1、 类的名字和数据库相同时,可以直接设置 resultType 参数为 Pojo 类
2、 若不同,需要设置 resultMap 将结果名字和 Pojo 名字进行转换
还有很多其他的标签,<resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>
为sql片段标签,通过<include>
标签引入sql片段,<selectKey>
为不支持自增的主键生成策略标签。
1、 Mapper接口方法名和mapper.xml中定义的每个sql的id相同。
2、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。
3、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。
4、 Mapper.xml文件中的namespace即是mapper接口的类路径。
1、 直接在方法中传递参数,xml 文件用#{0} #{1}来获取
2、 使用 @param 注解:这样可以直接在 xml 文件中通过#{name}来获取
1、 Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑
判断和动态拼接 sql 的功能。
2、 Mybatis 提供了 9 种动态 sql 标签:
trim|where|set|foreach|if|choose|when|otherwise|bind。
3、 其执行原理为,使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼
接 sql,以此来完成动态 sql 的功能。
Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象
时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或
关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。
Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。
它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。
当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。
第1种:在Java代码中添加sql通配符。
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
第2种:在sql语句中拼接通配符,会引起sql注入
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。