mybatis面试知识点总结
MyBatis 是支持定制化SQL,存储过程以及高级映射的优秀的持久层框架,
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解(实体和数据库的映射可以在XML中间中,也可以使用注解),将接口和Java的POJOs(Plain Old Java Objects,普通的java对象)映射成数据库中的记录。
一 、MyBatis框架的优点;
1. 与JDBC 相比,减少了50%以上的代码量
2. MyBatis 是最简单的持久层框架,小巧并且简单易学。
3. MyBatis 灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
4 提供XML 标签,支持编写动态SQL语句(XML中使用if,else)。
5. 提供映射标签,支持对象与数据库的ORM字段关系映射(在xml中配置映射关系,也可以使用注解)
二、MyBatis框架的缺点:
1. SQL语句的编写工作量较大,尤其是字段多,关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
三 、MyBatis框架适用场合:
MyBatis专注于Sql本身,是一个灵活的Dao层解决方案。
对性能要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
四、#{ } 和 ${ }的区别是什么?
${ }是Properties文件的变量占位符,他可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver
#{ } 是sql的参数占位符,MyBatis会将sql中的#{ }替换为?,在sql执行前会使用PreParedStatementde 的参数设置方法,按序给sql的的?号占位符设置参数值。
五 ResultType和ResultMap的区别
resultMap:主要用于封装已经在其他mybatis的配置文件中已经映射了resultMap的id名称,mybatis会自动根据map中的key去对应映射文件的column属性,直至全部对应完成。
resultType:主要用于封装在JDK中已经存在了的数据类型,例如Map,String,int等,但是注意了。当你需要返回对象的List集合时,需要使用的是ResultMap并将其值设置为你想要存在List中的已经被xml文件映射了的对象。
myBatis在使用select标签查询之后的结果默认是用Map来封装的。其中key是字段名,value是值。所以当你想要直接返回该表的部分字段的时候,你就需要将resultType设置成为HashMap。
六、parameterType 输入参数
resulType:返回参数
resultMap 当涉及配置映射关系是 resultMap的名称
七 映射关系
1. 一对一映射:javaType
<association property="subject"javaType="Subject">
<id column="sub_id"property="subId"/>
<result column="sub_type"property="subType"/>
<result column="sub_time"property="subTime"/>
</association>
2. 一对多映射:ofType
<collection property="classInfoList"ofType="ClassInfo">
<id property="classId"column="class_id"/>
<result property="teaTime"column="tea_time"/>
<result property="classSess"column="class_sess"/>
<result property="classHour"column="class_hour"/>
3.