MyBatis八股文

16 篇文章 1 订阅
11 篇文章 1 订阅

MyBatis八股文

1、MyBatis

MyBatis是半自动化ORM框架,它内部封装了JDBC,加载驱动,创建连接,创建statement等繁杂的操作,开发时,只需要关注如何编写SQL语句即可。
MyBatis使用XML和注解来配置和映射原生信息,将POJO映射成数据库中的记录。

2、MyBatis的优缺点

基于SQL语句的编程,相当灵活,不会对应用程序和数据库的现有设计造成任何影响;
与JDBC相比,减少了一半的代码量,消除JDBC大量冗余的代码,不需要手动开关连接;
能够很好的与各种数据库兼容;
能够与Spring很好的集成;
提供映射标签,支持对象和数据库的ORM字段关系映射。
缺点:
SQL语句的编写工作量较大,在字段多,关联表多时,对开发人员编写SQL功底有一定的要求;
SQL语句依赖于数据库,可移植性差。

3、为什么说MyBatis是半自动ORM映射工具,和全自动的区别在哪?

MyBatis是半自动ORM框架,在查询关联对象或者关联集合对象时,需要手动编写SQL来完成;
Hibernate是全自动ORM框架,在查询关联对象或者关联集合对象时,根据对象关系模型直接获取。

4、MyBatis、Hibernate的区别

MyBatis是半自动ORM框架,Hibernate是全自动ORM框架;
Hibernate对SQL语句封装,提供了日志、缓存、级联等特性,提供HQL操作数据库,支持数据库无关性,SQL语句优化比较困难;MyBatis需要手动编写SQL,支持动态SQL,不支持数据库无关性,SQL语句优化比较容易。
MyBatis是轻量级框架,学习门槛低,Hibernate是重量级框架,学习门槛高。

5、JDBC编程有哪些不足,MyBatis是如何解决这些问题的?

1、数据库连接的创建、释放频繁造成系统资源浪费从而影响系统性能;
配置数据库连接池,使用数据库连接池管理数据库连接;
2、SQL语句写在代码中造成代码不易于维护;
将SQL语句配置在mapper.xml文件与java代码分离;
3、向SQL语句传参麻烦;
MyBatis自动将java对象映射到SQL语句;
4、对象结果解析麻烦;
MyBatis自动将java对象映射到SQL语句;

6、MyBatis编程步骤

创建SqlSessionFactory;
通过SqlSessionFactory创建SqlSession;
通过SqlSession执行数据库操作;
调用Session.commit()提交事务;
调用Session.close()关闭会话。

7、#{} 和 ${}的区别?

1、#{}是占位符,预编译处理;
${}是拼接符,字符串替换;
2、#{}传入参数以字符串传入,会将SQL中#{}替换为?;
${}是原值传入;
3、#{}可以防止SQL注入,提高系统安全性;
${}不能防止SQL注入;
4、#{}的变量替换是在DBMS中;
${}的变量替换是在DBMS外。

8、通常一个XML映射文件,都会写一个DAO接口与之对应,那么这个DAO接口的工作原理是什么?DAO接口里的方法、参数不同时,方法能重载吗?

DAO接口即Mapper接口,接口的全类名是XML映射文件的namespace;接口的方法名是xml映射文件的Statement的id值;接口方法中的参数是传递给SQL的参数;当调用接口方法时,接口全类名+方法名拼接字符串作为key,可以唯一定位一个MapperStatement。

9、在Mapper中如何传递多个参数?

1、DAO层函数有多个参数,其对应的xml中,#{0}代表DAO层中的第一个参数,以此类推;
2、在DAO层的参数中加@Param注解,注解内的参数名即为Mapper中的参数名;
3、多个参数封装成Map,以HashMap的形式传递到Mapper中。

10、MyBatis的动态SQL有什么用,执行原理是什么,有哪些动态SQL?

MyBatis动态SQL可以在xml映射文件内,以标签的形式编写SQL,执行原理是根据表达式的值完成逻辑判断,并动态拼接SQL的功能。

11、xml映射文件中,不同的xml映射文件id是否可以重复?

不同的xml映射文件id可以重复;同一的xml映射文件id不可以重复。当调用接口方法时,接口全类名+方法名拼接字符串作为key,可以唯一定位一个MapperStatement。

12、MyBatis实现一对一的方式

联合查询,嵌套查询。

13、MyBatis的一级缓存、二级缓存

一级缓存,默认开启,基于HashMap的本地缓存,存储作用域为Session;
二级缓存:默认关闭,HashMap存储,存储作用域为Mapper,通过序列化接口开启二级缓存。

14、使用MyBatis的Mapper接口调用时有哪些要求?

1、Mapper接口方法名和mapper.xml中定义的每个sql的id相同;
2、Mapper接口的输入参数和mapper.xml中定义的每个sql的parameterType相同;
3、Mapper接口的输入参数和mapper.xml中定义的每个sql的resultType相同;
4、Mapper的类路径和mapper.xml中的namespace相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值