MyBatis面试题(一)

  1. 说说什么是Mybatis?
    答:
    Mybatis为开发者封装了JDBC的加载驱动,建立连接,创建statement对象,关闭连接等复杂操作,开发者只需编写与业务相关的sql语句,而且sql由自己编写,灵活性高,开发者对sql的掌控度也更强(不喜欢用JPA)。
    Mybatis可以使用注解或者是xml文件来配置和映射原生信息,能够把Java对象映射成数据库记录,相比起JDBC的手动设置参数以及还得手动处理结果集等,方便太多了,即拿即用。
    Mybatis可以使用注解或者是xml文件将要执行的各种statement对象配置起来,并通过Java对象和statement对象中sql的动态参数进行映射生成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映射为Java对象并返回。

  2. 说说Mybatis的优点?
    答:
    Mybatis的使用比JDBC简单了许多,消除了JDBC 大量冗余的代码,同时无需手动开启关闭连接。
    开发者可以自由的编写sql,灵活性可控性强,同时sql编写在xml文件中,提供了 xml标签,支持编写动态的SQL语句,这样做对代码的侵入少,做到了sql和代码的解耦,便于统一管理。
    可以很好的集成spring,同时因为使用的是JDBC来连接数据库,所以只要是JDBC支持的数据库,Mybatis都支持。
    提供映射标签,支持对象与数据库的字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

  3. 说说MyBatis框架的缺点?
    答:
    由于sql是由开发自由编写的,所以由会有一定量的编写工作,要是业务复杂,开发编写sql,也需要一定的功底,但是我相信,业务要是复杂,使用JPA会更烦,比如做报表开发的时候,所以这里推荐可以使用MyBatis-Plus,这是MyBatis的加强版,为我们封装了一些基本的增删改查操作,避免了简单业务的代码工作。
    由于sql语句依赖于数据库,每个数据库都有自己的函数和方法等,所以不能随意更换数据库,不然会导致sql无法使用。这里建议如果以后有迁库的需求,把有使用到sql函数方法的逻辑用代码来实现,这样迁库时候压力就不会那么大了。

  4. 说说MyBatis框架适用场合?
    答:MyBatis专注于sql,使用灵活,同时由于是具体的sql语句,开发优化起来也好定位问题,适用于sql复杂且对性能要求高的业务系统。

  5. #{}和$ {}的区别是什么?
    答:#{}是预编译处理,而$ {}是字符串替换。使用#{},MyBatis会把sql中的#{}替换成?号,然后调用PreparedStatement的set方法做赋值操作。而使用$ {},MyBatis则是直接把$ {}替换成传进来的变量的值,这样就会出现sql注入的问题,所以建议使用#{}。

  6. 简述一下Mybatis的编程步骤?
    答:
    先创建SqlSessionFactory,顾名思义这就是创建SqlSession的工厂
    使用SqlSessionFactory来创建出SqlSession
    通过SqlSession对象来执行数据库的操作
    调用SqlSession.commit()方法来提交事务
    调用SqlSession.close()关闭会话

  7. Mybatis的xml映射文件中,不同的xml映射文件,里面的id是否可以重复?
    答:首先要了解,Mybatis是通过xml文件中的namespace属性加上id作为全限定名来唯一确定到底要执行哪条sql,所以如果xml文件的namespace相同,则id不能有相同的,如果xml文件的namespace不同,则id允许相同。

  8. xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
    答:if,sql,selectkey,resulMap,parameterMap,include,choose,when,otherwise,where

  9. 模糊查询like语句该怎么写?
    答:

CONCAT('%',#{name},'%')  //字符串拼接
like '%'|| #{name} || '%' //字符串拼接
  1. 模糊查询不用like怎么写?
    答:
instr(name,'hh')>0//包含的意思,如果name里面有包含hh字符串就会大于0
发布了289 篇原创文章 · 获赞 302 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104735244