• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ORM啥让我讲Mybatis

武飞扬头像
似水流年it
帮助1

ORM?啥让我讲一下Mybatis?

1、啪,来讲一下对Mybatis的理解?

  • Mybatis是一个半ORM(对象关系映射)框架,
  • 它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花精力去加载驱动、创建连接、创建Statement等繁杂的过程。程序员直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高。
  • Mybatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免的几乎所有的JDBC代码和手动设置的参数以及获取结果集。
  • 通过XML文件或者注解的方式将要执行的各种Startement配置起来,并通过Java对象和Statement中SQL的动态参数进行映射生成最终的SQL语句,最后又Mybatis框架执行SQL并将结果映射为Java对象并返回(从执行SQL到返回Result的过程)。

2、看来Mybatis还是有很多的缺点的,来说下优缺点?

优点:

  1. 基于SQL语句编程,相当灵活,不会对应用程序或数据库现有设计造成任何影响,SQL写在XML里,解除SQL和程序代码的耦合,便于统一管理,提供XML标签,支持编写动态SQL语句,并可重用。
  2. 对比JDBC相比减少了代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
  3. 很好的和各种数据库兼容;
  4. 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

缺点:

  1. SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功能有一定要求;
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随便更换数据库

3、Mybatis与Hibernate有哪些不同?

  1. Mybatis不完全是一个ORM框架,因为Mybatis需要程序员自己编写SQL语句;Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求搞得软件,如果用Hibernate开发可以节省很多代码,提高效率;
  2. Mybatis直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一旦需求变化要求迅速输出成功,但是灵活的前提是Mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套SQL映射文件,工作量大

4、Mybatis中#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换

  1. mybatis在处理#{}时,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值;使用#{}可以有效的防止SQL注入,提高系统安全性。
  2. mybatis在处理时,就是把{}替换成变量的值。

5、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection值得就是一对多查询。在Mybatis配置文件中,可以配置是否启动延迟加载lazyLoadingEnable = true|false。

**原理:**使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,如:调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送是先保存好的查询关联B对象的SQL,把B查询上来,然后调用a.setB(b),于是a的对象b的属性就有值了,接着完成a.getB().getName()方法的调用,这就是延迟加载的基本原理。

6、说一下Mybatis的一级缓存和二级缓存?

**一级缓存:**基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存;

**二级缓存:**与一级缓存其机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(Namespace) ,并且可自定义存储源,如Ehcache,默认不打开二级缓存,要开启二级缓存,使用二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可以用来保存对象的状态),可在它的映射文件中配置;

对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了C,U,D操作后,默认该作用域下所有select中的缓存将被clear。

6、Mybatis动态SQL是做什么的?都有哪些动态SQL?能简述一下动态SQL的执行原理?

Mybatis动态SQL可以让我们在XML映射文件内,以标签的形式编写动态SQL,完成逻辑判断和动态SQL的功能;

Mybatis提供了9种动态SQL标签:trim、where、set、for each、if、choose、when、otherwise、bind;

im、where、set、for each、if、choose、when、otherwise、bind;

执行原理:使用OGNL从SQL参数对象中计算表达式的值,根据表达式的值动态拼接SQL,以此来完成动态SQL的功能。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaeifa
系列文章
更多 icon
同类精品
更多 icon
继续加载