背景
- 记录应该理解Mybatis核心问题是哪些
过程
- 如何在项目中引入Mybatis Mybatis的groupId是什么?artifactId又是什么?目前最新版本是多少?
- 如何从xml中构建 SqlSessionFactory?SqlSessionFactory的作用是什么?
- xml配置了哪些信息?用什么方式解析xml的?
- xml里的标签都是什么意思:configuratio、environments、transactionManager、dataSource、mappers。这些标签的属性分别是什么意思?
- DataSourceFactory、DataSource、TransactionFactory、Environment、Configuration这些类的作用是什么?
- Mapper接口的作用是什么?
- 如何从 SqlSessionFactory 中获取 SqlSession?SqlSession的作用是什么,提供了哪些功能?
- selectOne和getMapper的执行方式有什么区别?
- Mapper.xml的配置是什么?命名空间的作用是什么?id的作用是什么?
- Mapper.xml是如何和Mapper.java进行binding的?匹配规则是什么?
- SqlSessionFactoryBuilder应该在哪个作用域使用?为什么?
- SqlSessionFactory应该在哪个作用域使用?为什么?
- SqlSession应该在哪个作用域使用?为什么?
- Mapper实例应该在哪个作用域使用?为什么?
- 插件工作过程是什么样的?分页插件是怎么工作的?
- 一级缓存和二级缓存的工作过程是怎样的?
- 用到了哪些设计模式?
- 架构设计,分离的功能模块有什么启发吗?
- 有哪些部分可以做的优化?
- 如果自己去封装jdbc操作数据库的功能,会设计哪些大的模块?
- 会做到像源码那样的解耦吗?会考虑到基础层,数据处理层,屏蔽底层复杂度提供抽象api给开发使用
- 是否会考虑到通过责任链的方式扩展功?
- 是否能够面向接口编程,这样能够获取到其他更好的实现,比如能够把事务交给spring进行管理是因为mybatis在事务处是面向接口编程的。
- 是否有足够自信去做设计呢?
小结
-
有一个观点是对的那就是:读代码,读大量的代码。因为这样可以学到别人写作方式。
-
但是,比如研究spring源码,mybatis源码,前提是自己熟练使用,知道很多基础概念,在这个基础之上去阅读代码。而不是一开始就去读。去读一定是建立在自己熟练掌握了框架的基本使用。
-
而且去读的时候,一定是带着疑问去探寻,一点一点找疑问的答案。找到了答案,也就是大致慢慢理解了源码的工作。理解了工作过程,只是会加快解决问题的效率,并不是说,可以让自己能够写框架了,这个还早的很,还得练。
-
贪多嚼不烂的。一个还没有深入理解,又急急忙忙搞下一个,又累,又没有效果。搞完一个,就挨着把自己理解的整个业务逻辑过程总结写出来。只有自己写出来,理解了,才算自己的,否则,一切又有什么意义呢?
-
能够做到,用自己的话,自己的理解把上面的疑问直接表述出来。
-
套路
- 还是要先读官方技术文档。
- 写一些小demo
- 运用到实践项目中,体会细节,体会犯错
- 然后循环即可
- 直到有一天,自己去探险源码。
- 探寻源码好处
- 大量读代码,能够提高读代码能力
- 能够学到别人写作方式
- 能够辅助自己加深对设计模式理解,java基础知识理解
- 能够知道别人考虑的点。异常处理。日志处理。安全处理。兼容处理。扩展处理。配置处理。池化和非池化处理。缓存处理。解耦处理。架构处理。