Mybatis面试题自集

本文写了一些有关Mybatis的面试题,有兴趣的可以看看,若有错误欢迎指责
1. JDBC编程有哪些不足之处,Mybatis是如何解决这些问题的?

① JDBC数据库的链接创建和释放频繁会造成系统资源浪费从而影响性能。
解决: Mybatis可在SQLMapConfig.xml中配置数据库连接池,使用连接池管理数据库链接,就不再需要频繁的创建和释放,用完后可以继续在连接池。

② JDBC的Sql语句写在代码中不容易维护, 而在实际应用中sql变化可能较大,sql变动需要改变java代码。
解决: Mybatis将sql语句配置在XXXmapper.xml文件中与java代码分离,sql需要更改的时候只需更改xml文件。

③ JDBC因为sql语句中的where条件不一定导致传参较为麻烦,而且占位符和参数也需要一一对应。
解决: Mybatis可以将java对象自动映射到sql语句中,也可将参数映射到sql语句中。

④ JDBC对结果集解析麻烦,sql变化会导致解析代码变化,且解析时需要遍历。
解决: Mybatis中可将结果集自动映射到java对象,可以配置好resultMap进行映射

2. Mybatis编程的步骤大概是怎么样的?

① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过SqlSession执行数据库的 select insert update 操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话

3. 说说Mybatis的优点。

Mybatis可以通过xml或注解方式灵活配置要运行的sql语句,并将java对象映射到sql语句中形成最终执行的sql语句,最后将执行结果映射到java对象中。本身就很小且简单。没有任何第三方依赖,易学易使用;mybatis不会对应用程序或者数据库的现有设计强加任何影响。

4. 使用Mybatis的mapper接口调用时有哪些要求?

① mapper.xml文件中的namespace要是对应的mapper接口类的全路径名
② mapper接口方法名要和mapper.xml中sql的id相同
③ mapper接口方法的输入参数类型要和mapper.xml中的parameterType类型相同
④ mapper接口方法中的输出参数要类型和mapper.xml中的resultType类型相同

5. SqlMapConfig.xml(mybatis-config.xml)中配置哪些内容?

SqlMapConfig.xml中的配置内容和顺序如下:

6. 简单的说下Mybatis的一级缓存和二级缓存。

Mybatis首先去缓存中查询结果集,如果没有再去查询数据库,如果有就从缓存中取出返回结果集就不走数据库。Mybatis内部储存缓存使用一个HashMap,key为hashCode+sqlId+Sql语句,value为从数据库查询出来映射生成的Java对象。二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询的sql可以从缓存中获取数据,二级缓存可以跨sqlsession的。可在映射文件中配置cache

7. mapper编写有哪几种方式?

① 使用MapperFactoryBean

  • 在sqlMapConfig.xml中配置mapper.xml的位置
  • 定义mapper接口

② 使用mapper扫描器

  • mapper.xml文件编写
    mapper.xml中的namespace为mapper接口的全路径名
    mapper.xml接口中的方法名和mapper.xml中定义的statement的id保持一致
  • 定义mapper接口
  • 配置mapper扫描器
8. 什么是Mybatis的接口绑定,有什么好处,有哪些方式,怎么实现?

接口绑定就是帮mapper接口里的方法和sql语句绑定起来,比起原来的sqlsession提供的方法可以有更加灵活的选择和设置。
接口绑定有两种实现方式:

  • 注解绑定
    在mapper接口的方法上加上@select@update@delete@insert里面包含sql语句等注解来绑定;一般在sql语句比较简单的时候使用
  • xml绑定
    通过xml里面写sql绑定namespace要是mapper接口的全路径名,sql语句所在statement的id要和mapper接口里的方法名相同;一般在sql语句比较复杂的时候使用
9. Mybatis的核心处理类是什么?

sqlsession

10. Mybatis里面的动态sql是怎么设定的?用什么语法?

Mybatis里面的动态sql一般是通过if节点,OGNL语法实现的。但要写的完整须配合where,trim节点,where节点是判断包含节点有内容就插入where否则不插入,trim节点是用来判断如果动态语句是以and或or开始,name会自动把这个and或者or去掉

11. Mybatis中的#{}和${}的区别

#{}:是以预编译的形式,将参数设置到sql语句中;PreparedStatement;防止sql注入
$ {}:取出的值直接拼装在sql语句中;会有安全问题;
原生jdbc不支持占位符的地方我们就可以使用${}进行取值,比如列名、分表、排序。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值