SSM

mybatis面试知识点总结

2019-03-22  本文已影响0人  落云和枫

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. 

上一篇下一篇

猜你喜欢

热点阅读