荐 13、mybatis框架学习
应用架构
MyBatis 是一个持久层框架,实现了对JDBC操作的封装,主要用于简化JDBC操作中的一些相对繁琐的步骤,例如参数的映射,结果集的映射等
为何使用mybatis实现数据持久层应用?
- 稳定,灵活(动态SQL),功能强大(池,日志,缓存)
- 学习以及使用成本低
- 解耦,SQL的可维护性,可复用性比较高。
产品架构
参考文档及图片来源:https://blog.csdn.net/luanlouis/article/details/40422941
技术架构
1、构成分析
1、首先获取两个主要的依赖jar包,mybatis框架包
和数据库连接包
2、mybatis主配置文件,通常是mybatis-config.xml
3、在mybatis主配置文件中会引入需要执行SQL语句的sqlMapper.xml
文件
4、准备工作完成以后,后续直接在Java文件中创建工厂对象SqlSessionFactory
生成SqlSession
对象,可生成Dao中Mapper接口对象
调用方法执行sql操作,或直接调用方法
执行sql操作
5、获取返回结果并处理
注意:这种IO读取配置文件调用接口创建对象的操作方式,在一定程度上会影响性能,mybatis官网还提供一种直接配置生成对象的方式。其中的接口类其实就是配置文件中的节点
2、工作过程
参考文档及图片来源:https://www.jianshu.com/p/15781ec742f2
1、读取解析mybatis-config.xml
,将信息解析封装到Configuration类
2、将sqlMapper.xml
或Dao中的Mapper抽象类中的注解信息
加载形成多个MappedStatement对象
(包括了传入参数映射配置、执行的SQL语句、结果映射配置)
3、当API接口层收到请求时,传入id
和参数对象
(实例对象或Map集合),mybatis根据id找到对应的MappedStatement对象
,将参数对象传入并解析,得到待执行的sql和参数
4、执行sql语句,获得结果
5、将结果按照映射的配置进行转换,获得结果集(HashMap、实例对象或基本数据类型)
3、具体对象工作过程
从框架中学习面向接口编程的思想,可以很好的降低模块之间的耦合性
Java代码中创建和获得的对象基本都是接口对象
1、获取相关配置文件流对象
2、构建模式new SqlSessionFactoryBuilder().build(in)
生成工厂对象SqlSessionFactory
3、工厂模式工厂实例.openSession()
生成SqlSession
会话对象
4、会话对象获取执行器Executor
并传入MappedStatement对象id
和参数对象
,Executor调用MappedStatement
执行sql语句,并根据配置维护缓存
5、MappedStatement
负责整合参数,以及对结果集的处理转换
会话对象操作执行器时才会获得Connection对象
参考文档:https://blog.csdn.net/baidu_38558076/article/details/88801227
构建者模式
构建者模式,又称建造者模式,
将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。
构建者模式一般用在构建流程或者组成部件固定的场合,
将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,
然后将这些部件组装在一起就形成了一台完整的电脑。
参考文档
1、https://www.cnblogs.com/V1haoge/p/6553374.html
工厂模式
属于创建型模式,又叫做静态工厂方法模式。
是由一个工厂对象决定创建出哪一种产品类的实例。
实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类
(这些产品类继承自一个父类或接口)的实例。
参考文档
1、https://www.jianshu.com/p/d951ac56136e
2、https://blog.csdn.net/lemon_tree12138/article/details/46225213
会话工厂创建过程
根据解析出的配置信息,传入工厂构建方法,生成工厂接口对象
会话对象应用分析
也可以说是mybatis对jdbc的分装过程
参考文档:
1、https://blog.csdn.net/luanlouis/article/details/40422941
2、https://blog.csdn.net/aacm1992/article/details/80848994
基于Mapper接口会话
缓存
Mybatis 中提供缓存的目的主要是为了提高查询性能,但可能会有一定的脏读问题.并且会分为一级缓存和二级缓存,默认开启都是开启的,一级缓存可以直接使用,二级缓存需要在Mapper.xml中配置才能使用.
Mybatis 一级缓存(SqlSession),SqlSession关闭时一级缓存失效。在同一个事务内部多次执行同一个查询,后续查询会从此缓存取数据。
MyBatis二级缓存:(SqlSessionFactory),跨session共享数据时,可以对二级缓存在mapper文件中进行配置。
mybatis-config.xml中配置
<settings>
<!-- 开启二级缓存(默认是开的,这里写出来是为了方便代码维护) -->
<setting name="cacheEnabled" value="true" />
</settings>
sqlMapper.xml中配置
<cache eviction="LRU" readOnly="true" flushInterval="100000" size="1024"></cache>
参考文档:
1、https://www.cnblogs.com/jian0110/p/9387941.html
2、https://blog.csdn.net/sinat_32133675/article/details/76691009
3、https://funyan.cn/p/281.html
日志
输出日志配置,要查看的包路径,打印级别
本文地址:https://blog.csdn.net/caomushi/article/details/107211177
推荐阅读
-
SSM框架学习:使用MyBatis Generator自动创建代码
-
深入学习Mybatis框架(一)- 入门
-
一起学习框架SSM之MyBatis(二)
-
荐 BAT高频面试系列:设计模式+Spring源码+MyBatis+SpringMVC多线程+MySQL+Redis+框架使用+数据结构算法答案和总结
-
荐 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---10. MVC 结果渲染器的编写
-
荐 每天学习一个Android中的常用框架——11.Fresco
-
Mybatis框架学习之增删改查
-
JAVA框架学习之mybatis(一个文章吃透mybatis)
-
学习mybatis框架有关时区报错的解决方法
-
荐 13、mybatis框架学习