http://blog.csdn.net/qq_33824312/article/details/73771008

1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离

③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。

④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。

2.MyBatis编程步骤是什么样的?

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

3.MyBatis与Hibernate有哪些不同?

    Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。 
  
    Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 
  
    Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。 
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

参考博文:https://www.cnblogs.com/wang-meng/p/5701990.html

3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

注:这道题是京东面试官面试我时问的。

答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。

Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。

Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

参考博文:http://blog.csdn.net/edenxuting/article/details/53589312

mybatis那些事~相关推荐

  1. mybatis 一二事(1) - 简单介绍

    mybatis呢是一个orm数据库框架,非常适合新人学,门槛相对较低 本人呢曾经是先做的hibernate,后接触的mybatis,接触mabatis前我比较抵触,为啥呢, 当时喜欢hibernate ...

  2. mybatis字符串模糊匹配

    1.  参数中直接加入%%,注意不需要加两个单引号,加了就会出错,因为系统会自动为字符串类型加上两个单引号 <select id="selectPersons" result ...

  3. Mybatis中,SQLSessionFactoryBuilder使用build方法时做了哪些事?

    目录 探究Configuration 探究parse方法 启动断点调试 过程 总结 当我们上手mybatis时,对于mybatis如何读取xml配置文件,获取SQLSessionFactory的底层源 ...

  4. Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 目录 一 ...

  5. MyBatis和SpringMVC集成事务在Junit测试下有效但是在实际项目无效的问题

    一.问题说明 项目框架采用SSM,集成了事务回滚(方式见下),在单元测试的时候,测试事务是有效的,但是在实际项目上线的时候,却没有效果. 二.集成方式 application-mybatis.xml( ...

  6. 理解什么是MyBatis?

    2019独角兽企业重金招聘Python工程师标准>>> 理解什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache s ...

  7. 从源码角度分析 Mybatis 工作原理

    作者:vivo互联网服务器团队-Zhang Peng 一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示 ...

  8. Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?

    来源:jianshu.com/p/3927c2b6acc0 概述 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于"repositorie ...

  9. 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    来自:Java建设者 初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.M ...

最新文章

  1. Nginx笔记总结八:ngx_http_core_module模块中的变量
  2. mysql snowflake_一篇文章彻底搞懂snowflake算法及百度美团的最佳实践
  3. 类库,随机数,属性,值类型和引用类型
  4. 前端学习(83):按显示进行分类
  5. java后台获取流_java后台发送请求获取数据,并解析json数据
  6. 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
  7. 关于 Mac OS系统中编程时出现的segment error 和bus error原因描述
  8. android 悬浮窗口透明,基于popupWindow实现悬浮半透明效果
  9. 利用python构建马科维茨_利用马科维茨投资组合理论构建自己的投资组合
  10. python必背的英语单词怎么写_背英语单词的最好方法
  11. 百度信息流推广oCPC调研
  12. 提取IP地址和端口的正则表达式
  13. 任正非谈成功秘诀:28年只对准一个城墙口冲锋
  14. 2019/5/第二周
  15. 使用openocd调试Linux内核,OpenOCD-JTAG调试(示例代码)
  16. 采用SAMKeychain钥匙串存储设备唯一标示与何种情况下同一个手机它存储的值会变化
  17. 谈谈水印实现的几种方式
  18. TiDB数据库schema设计之表结构设计
  19. Ti3C2MXene(纳米片)|碳酸钙纳米颗粒,具有介孔,可以吸附药物,具有响应性
  20. cocos2dx3.16+lua 音乐音效

热门文章

  1. Java SecurityManager checkAwtEventQueueAccess()方法与示例
  2. 认真聊一下MySQL索引的底层实现!
  3. C#阻止计算机关闭显示器和待机
  4. 2021最新Python量化A股投资必赚策略
  5. 基于Kubernetes的Spark部署完全指南
  6. Undefined control sequence. \makecover
  7. HTML<div>标签、<img>标签
  8. 春晓JAVA的横排和竖排输出
  9. 小米手机硬改技术_小米11手机爆料:首发骁龙875 或采用屏下摄像头技术
  10. gnss单频软件接收机应用与编程_GNSS/GPS RTK定位 (手机,无人车定位,无人驾驶,因子图优化)...