Java-web开发-5
4. MyBatis
4.1 谈谈MyBatis和JPA的区别
参考答案
ORM映射不同:
MyBatis是半自动的ORM框架,提供数据库与结果集的映射;
JPA(默认采用Hibernate实现)是全自动的ORM框架,提供对象与数据库的映射。
可移植性不同:
JPA通过它强大的映射结构和HQL语言,大大降低了对象与数据库的耦合性;
MyBatis由于需要写SQL,因此与数据库的耦合性直接取决于SQL的写法,如果SQL不具备通用性而用了很多数据库的特性SQL的话,移植性就会降低很多,移植时成本很高。
日志系统的完整性不同:
JPA日志系统非常健全、涉及广泛,包括:SQL记录、关系异常、优化警告、缓存提示、脏数据警告等;
MyBatis除了基本的记录功能外,日志功能薄弱很多。
SQL优化上的区别:
由于Mybatis的SQL都是写在XML里,因此优化SQL比Hibernate方便很多。
而Hibernate的SQL很多都是自动生成的,无法直接维护SQL。虽有HQL,但功能还是不及SQL强大,见到报表等复杂需求时HQL就无能为力,也就是说HQL是有局限的Hhibernate虽然也支持原生SQL,但开发模式上却与ORM不同,需要转换思维,因此使用上不是非常方便。总之写SQL的灵活度上Hibernate不及Mybatis。
4.2 MyBatis输入输出支持的类型有哪些?
参考答案
parameterType:
MyBatis支持多种输入输出类型,包括:
- 简单的类型,如整数、小数、字符串等;
- 集合类型,如Map等;
- 自定义的JavaBean。
其中,简单的类型,其数值直接映射到参数上。对于Map或JavaBean则将其属性按照名称映射到参数上。
4.3 MyBatis里如何实现一对多关联查询?
参考答案
一对多映射有两种配置方式,都是使用collection标签实现的。在此之前,为了能够存储一对多的数据,需要在主表对应的实体类中增加集合属性,用于封装子表对应的实体类。
嵌套查询:
- 通过select标签定义查询主表的SQL,返回结果通过reusltMap进行映射。
- 在resultMap中,除了映射主表属性,还要通过collection标签映射子表属性,该标签需包含如下内容:
- 通过property属性指定子表属性名;
- 通过javaType属性指定封装子表属性的集合类型;
- 通过ofType属性指定子表的实体类型;
- 通过select属性指定查询子表所依赖的SQL,这个SQL需单独定义,内部包含查询子表的语句。
嵌套结果:
- 通过select标签定义关联查询主表和子表的SQL,返回结果通过resultMap进行映射。
- 在resultMap中,除了映射主表属性,还要通过collection标签映射子表属性,该标签需包含如下内容:
- 通过
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本面试宝典均来自校招面试题目大数据进行的整理
