MyBatis的常用知识

什么是MyBatis?

在简单了解几个概念:ORM,JPA
ORM (Object-Relationship-Mapping): 是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。
JPA (Java-Persistence-API) :是 Java 持久化接口的意思,它是 JavaEE 关于ORM 思想的一套标准接口,仅仅是一套接口,不是具体的实现。
MyBatis 是一个实现了JPA 规范的用来连接数据库并对其进行增删改查操作的开源框架(就和传统的JDBC一样,就是个连接数据库的东西),其实,它底层就是一个JDBC封装的组件。MyBatis的前身是lbatis,lbatis 创建与2002年最初为Apache下面的一个开源项目,2010迁移到google code 下面并改名为 MyBatis。
MyBatis 虽然实现了JPA但是它并不是一个完完全全的ORM组件,而是一个基于 SQL开发的半ORM组件。

MyBatis的优缺点?

优点:

基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,
SQL 写在 XML 里,解除 sql 与程序代码的合,便于统一管理;提供 XML 标,支持编写动态 SQL语句,并可重用。与JDBC相比,减少了50%以上的代码量,消除了JDBC大量余的代码,不需要手动开关连接;很好的与各种数据库兼容(因为 MyBatis 使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis 都支持)。能够与 Spring 很好的集成:提供映射标签,支持对象与数据库的 ORM 字段关系映射提供对象关系映射标签,支持对象关系组件维护。

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

简述Mybatis 的插件运行原理,以及如何编写一个插件?

1)Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。2)实现 Mybatis的interceptor 接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

Mybatis 是否支持延迟加载?它的实现原理是什么?

1)Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association指的就是一对一,collection 指的就是一对多查询。在 Mybatis 配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=truelfalse。

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

什么是MyBatis的接口绑定有什么好处?

接口定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SOL 语句定,我直接调用接口方法就可改,这样比起原来了 sqlsesion 提供的方法我们可以有更加灵活的择和设置

接口绑定有几种实现方式,分别是怎么实现?

接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上 @Select@Update 等注解,里面包含Sql 语来绑定;另外一种就是通过 xml里面写 SQL来绑定这种情况下,要指定xml 映射文件里面的namespace 必须为接口的全路径名。当Sql 语句比较简单时候,用注解绑定,当SQL 语句比较复杂时候,用xml 绑定,一般用m绑定的比多

什么情况下用注解绑定什么情况下用xml绑定

sql语句比较简单时候,用注解绑定;当SQL 语比较复杂时候,用xml 绑定,一般用 xml绑定的比较多。

MyBatis实现一对一有几种方式?具体怎么操作?

有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成;套查询是先查一个表,根据这个表里面的结果的外键 id,去再另外一个表里面查询数据,也是通过 association 配置,但另外一个表的查询通过 select 属性配置。关联对象查询,有两种实现方式,一种是单独发送一个 sl 去查询关联对象,赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用 join查询,一部分列是A对象的属性值,另外一部分列是关联对象B的属性值,好处是只发一个sql 查询,就可以把主对象和其关联对象查出来。

MyBatis的常用节点(标签)有哪些?

在mapper 文件中,以 mapper 作为根节点,其下面可以配置的不同的元素节点(标签)执行语句:select,insert,update,delete功能节点:resultMap 映射结果,selectKey 定义主键生成

如何获取自动生成的键值?

1、在 <insert/> 标签中添加 useGeneratedKeys="true"等属性

2、在 <insert/> 标签内添加<selectKey />标签

#{}与${}的区别?

#0是预编译处理,50是字符串替换。MyBatis 在处理#时,会将 sql 中的#O替换为?号,调用 PreparedStatement 的set 方法来赋值;MyBatis 在处理S0时,就是把S0替换成变量的值。使用#0可以有效的防止SQL 注入,提高系统安全性

MyBatis 与 Hibernate 有哪些不同?

1、MyBatis 和 Hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要程序员自
己编写 Sql 语句。

2、MyBatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是 MyBatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套 sql 映射文件,工作量大。

3、Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用Hibernate 开发可以节省很多代码,提高效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值