标题 MyBtatis框架使用
一.MyBatis 简介: 封装 JDBC 操作,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
利用反射打通 java 类与 SQL 语句之间的相互转换。
可以使用单的 XML或注解用于配置和原始映射,将接口和 Java的 POJO(Plain Old Java
Objects,普通的 Java 对象)映射成数据库中的记录。
其是一个半自简动 ORM(Object Relation Mapping 对象关系映射)框架 Hibernant 是
全自动的。
个人总结:MyBatis 是支持定制化 SQL,存储过程以及高级映射的优秀的持久层框架。
二.ORM 介绍:
因为要满足 java 对象得到持久化(即保存)的需求。
ORM:(Object/Relation Mapping):对象,关系映射。
ORM 的实现思想:
将关系数据库中的记录映射成为对象,以对象的形式展现,程序员可以把数据库的
操作转为对象的操作;
三.MyBatis 的优点:
基于 SQL 语句编程,相当灵活。不会对应用程序或者数据库的现有设置造成任何影响。
SQL 语句写在 XML 中,减少 SQL 语句与程序代码的耦合,便于统一管理。
提供 XML 标签,支持编写动态 SQL 语句,并可重用。
与 JDBC 相比减少了 50%的代码量,消除的 JDBC 大量冗余的代码,不需要手动开关连
接。
很好的与各种数据库兼容(因为 MyBatis 是使用 JDBC 连接数据,所以只要 JDBC 支持
的数据库 MyBatis 都支持)。
能够与 Spring 很好的集成。
提供映射标签,支持对象与数据库的 ORM 字段关系映射。
提供对象映射标签,支持对象关系组件维护。
对于开发人员而言,核心 sql 发送需要自己优化。
对于程序来说,sql 和 java 代码分开,功能便捷清洗,一个专注业务,一个专注数据。
四.MyBatis 的缺点:
SQL 语句的编写工作量较大,尤其当字段多,关联表多时,对开发人员编写 SQL 语句
的功底有一定 的要求。
SQL 语句依赖于数据库,导致数据库一致性差,不能随意更换数据库。
五.MyBatis 框架的使用场合:
MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
对性能的要求性很高,或者需求变化较多的项目,如互联网项目,MyBatis 是个不错的
选择。
六.MyBatis 中#{}与${}的区别: #{} :是预编译处理
MyBatis 在处理#{}时会将 SQL 中的#{}替换为?号,调用 PreparedStatemen(预编译
语句对象)t 的 set 方法来赋值。
KaTeX parse error: Unexpected character: '' at position 13: {}: 是字符串替换。 ̲ MyBatis 在处理{}时,就是把${}的值替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性。
七.MyBatis 缓存机制:
作用: 提高应用查询效率。
查找顺序: 二级开启从二级找,二级缓存未开启从一级缓存(Map:返回类型 resuleMap)查
找。
一级缓存特点: 生命周期:MyBatis 的生命周期和 SqlSession 一致。
同一个会话(SqlSession)默认开启,基于内存储存,关闭会话一级缓存数据被清除或
者显示调用清空缓存方法。
使用:
在 MyBatis 配置文件中设置(mytatis-config.xml)
SESSION:默认开启一级缓存。这种情况下会缓存一个会话中执行的所有查询
STATEMENT: 本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将
不会共享数据。
个人理解:①如果在一级缓存开启时,修改了数据库中的值,在执行相同查询,
一级缓存失效,会在次向数据发发送一次查询。
详情博客地址:https://www.cnblogs.com/zhuzhu-you/p/13888596.html
二级缓存特点: 同一个 namespace,进程缓存,基于内存+硬盘,默认不开启,需要手动开启。 使用:
在 MyBatis 配置文件中设置(mytatis-config.xml)
详情博客地址:https://www.cnblogs.com/zhuzhu-you/p/13888596.html
八.MyBatis 延迟加载:
MyBatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association
指的是一对一,collection 指的是一对多查询。在 MyBatis 配置文件中,可以配置是否
请用延迟加载 lazyLoadingEnabled=true|false。
延迟加载:在真正使用数据的时候才发起查询,不用的时候不查询关联的数据,延迟加
载又叫按需查询(懒加载);
立即加载:不管用不用,只要一调用方法,马上发起查询。 使用场景:在对应的四种表关系中,一对多、多对多通常情况下采用延迟加载,多对一、
一对一通常情况下采用立即加载。
详情博客地址:https://www.cnblogs.com/zhuzhu-you/p/13892794.html
九.MyBatis 实行一对一的操作方式
联合查询
几个表联合查询,只查询一次,通过在 resuleMap 里面配置 association 节点配置
一对一的类就可以完成。
嵌套查询
先查一个表,根据这个表里面的外键 id,再去另一个表里面查询数据,也是通过
association 配置,但另一个表的查询通过 select 属性配置。
十.MyBatis 实行一对多的操作方式
有联合查询和嵌套查询
联合查询
联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面配置
collection 标签配置一对多的类就可以完成。
嵌套查询
嵌套查询是先查一个表,根据这个表里面给过的外键 id,再去另一个表里查
询数据,也是通过配置 collection,当另外一个表查询通过 s