Mybatis知识点

1、什么是Mybatis?

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建Statement等繁杂的过程。

2、什么是 ORM?

ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。

3、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。

而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

4、ORM的优缺点?

「优点」
1.提高了开发效率。由于 ORM 可以自动对 Entity 对象与数据库中的 Table 进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM 提供了对数据库的映射,不用 sql 直接编码,能够像操作对象一样从数据库获取数据。

「缺点」牺牲程序的执行效率和会固定思维模式,降低了开发的灵活性

5、Mybaits 的优缺点?

「优点」
1.基于SQL 语句编程,灵活,不会对应用程序或者数据库的现有设计造成任何影响;
2.与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接;

「缺点」
1.对开发人员编写 SQL 语句的功底有一定要求。
2. SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

6、Mybatis 动态 sql 有什么用?

Mybatis 提供了 9 种动态 sql 标签:

if

满足条件再执行标签内容

where

where标签可以避免出现多个and的情况。会自动把第一个查询条件的and改成where。多用于查询条件当中

choose/when/otherwise

组合使用,选择多个条件中的一个

foreach

类似于一次java集合的遍历

bind

将一个传递进来的值绑定到新的值上面。比如模糊查询

set

set标签多用于修改操作 在表名后加上set 并且去掉多余的, 比如age = #{age}, 这里的,

trim

mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。

7、Mybatis的Xml 映射文件中有哪些标签?有什么用?

除了常见的 select|insert|updae|delete 标签之外,代表查增改删,还有:
<resultMap><parameterMap><sql><include><selectKey>,加上动态 sql 的 9 个标签,其中为 sql 片段标签,通过标签引入 sql 片段,为不支持自增的主键生成策略标签。

id 唯一的名称,对应dao中mapper的接口名称
paramterType 定义传入的参数类型
resultType 返回数据类型对应实体类
resultMap 外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。使用 resultMap 或 resultType,但不能同时使用
flushCache 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false
useCache 将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:true

8、MyBatis编程步骤是什么样的?

1、 创建SqlSessionFactory

2、 通过SqlSessionFactory创建SqlSession

3、 通过sqlsession执行数据库操作

4、 调用session.commit()提交事务

5、 调用session.close()关闭会话

9、Mybatis 是否支持延迟加载?

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

10、mapper.xml 文件对应的 Dao 接口原理是?

简单说:使用了 JDK 动态代理和反射,把接口和 xml 绑定在一起而搞定的。

11、Mybatis 全局配置文件中有哪些标签?

configuration 配置

properties 属性:可以加载

properties 配置文件的信息

settings 设置:可以设置 mybatis 的全局属性

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

mappers 映射器

12、@Mapper注解

@Mapper注解是mybatis的注解,是用来说明这个是一个Mapper

作用:

1.使用@Mapper将NewsDAO接口交给Spring进行管理

2.不用写Mapper映射文件(XML)

13、#{}和${}的区别?

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理${}时,就是把${}替换成变量的值。

使用#{}可以有效的防止SQL注入,提高系统安全性。

14、Mybatis的一级、二级缓存?

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PerCheung

觉得有帮助的话就打赏支持一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值