GitHub上标星2,java项目开发实训教程

HarmonyOS学习 2021-11-25 18:11:25
java 面试 编程语言 后端开发

GitHub上标星2,java项目开发实训教程_Java

GitHub上标星2,java项目开发实训教程_后端开发_02

主要内容

====

本文主要分为两篇:第Ⅰ篇为MyBatis 3源码篇(第1~11章),主要介绍MyBatis框架各个特性的源码实现;第2篇章为MyBatis Spring 源码篇(第12~13章),主要介绍MyBatis框架与Spring框架整合的原理及MyBatis Spring模块的实现细节。下面是本书的内容大纲。

**第1章搭建MyBatis 源码环境,**主要介绍如何搭建MyBatis源码调试环境,包括MyBatis框架源码获取途径、如何导入集成开发工具以及如何运行 MyBatis源码中的测试用例。

GitHub上标星2,java项目开发实训教程_Java_03

**第2章JDBC规范详解,**MyBatis框架是对JDBC轻量级的封装,熟练掌握JDBC规范有助于理解MyBatis框架实现原理。本章将详细介绍JDBC规范相关细节,已经全面掌握JDBC规范的读者可以跳过该章。

GitHub上标星2,java项目开发实训教程_后端开发_04

**第3章MyBatis常用工具类,**介绍 MyBatis框架中常用的工具类,避免读者因对这些工具类的使用不熟悉而导致对框架主流程理解的干扰,这些工具类包括MetaObject、ObjectFactory、ProxyFactory等。

GitHub上标星2,java项目开发实训教程_后端开发_05

**第4章MyBatis核心组件介绍,**介绍MyBatis的核心组件,包括Configuration、SqlSession、Executor、MappedStatement等,包括这些组件的作用及 MyBatis执行SQL语句的核心流程。

GitHub上标星2,java项目开发实训教程_Java_06

**第5章SqlSession的创建过程,**本章首先介绍了XPath解析XML文件的步骤(MyBatis 的XPathParser工具类封装了JDK中XPath相关API,能够简化XML文件解析过程),以及XPathParser工具类的使用。接下来介绍了MyBatis核心组件SqlSession实例的创建过程。SqlSession实例创建之前,会使用XPathParser工具类解析MyBatis主配置文件,将配置信息转换为Configuration对象。由于SqISession 采用工厂模式创建,因此在创建SqlSession对象之前,需要先创建SqlSessionFactory对象。SqlSessionFactory对象中持有Configuration对象的引用。有了SqISessionFactory对象后,调用SqlSessionFactory对象的openSession)方法即可创建SqlSession对象。

GitHub上标星2,java项目开发实训教程_面试_07

**第6章SqlSession执行Mapper过程,**MyBatis中 Mapper的配置分为两部分,分别为Mapper接口和Mapper SQL配置。MyBatis通过动态代理的方式创建Mapper接口的代理对象,MapperProxy类中定义了Mapper方法执行时的拦截逻辑,通过MapperProxyFactory创建代理实例,MyBatis启动时,会将MapperProxyFactory注册到Configuration对象中。另外,MyBatis通过MappedStatement类描述Mapper SQL 配置信息,框架启动时,会解析Mapper SQL配置,将所有的MappedStatement对象注册到Configuration对象中。

通过Mapper代理对象调用Mapper 接口中定义的方法时,会执行MapperProxy类中的拦截逻辑,将Mapper方法的调用转换为调用SqIlSession提供的API方法。在SqlSession的API方法中通过Mapper的ld找到对应的MappedStatement对象,获取对应的SQL信息,通过StatementHandler操作JDBC的Statement对象完成与数据库的交互,然后通过ResultSetHandler处理结果集,将结果返回给调用者。

GitHub上标星2,java项目开发实训教程_后端开发_08

**第7章MyBatis缓存,**本章首先介绍 MyBatis一级缓存和二级缓存的使用细节,接着介绍一级缓存和二级缓存的实现原理,最后介绍 MyBatis如何整合Redis作为二级缓存。

GitHub上标星2,java项目开发实训教程_面试_09

**第8章MyBatis日志实现,**日志是Java应用中不可缺少的部分,Java语言开源的日志框架较多,比较有名的有Log4j、Logback、SLF4J等,如果搞不清这些日志框架之间的关系,就可能会造成项目中日志框架之间出现冲突,而且使用第三方框架或者工具包间接引入的日志框架会造成项目中日志输出很混乱,因此搞清楚这些日志框架之间的关系非常有必要。

本章首先介绍了Java语言中的日志体系,以及各个日志框架的发展史及它们之间的关系。接着介绍了MyBatis框架的日志实现。通过本章的学习我们了解到,MyBatis框架在未指定日志实现的情况下能够自动从 Classpath中发现日志框架,查找日志框架的顺序为SLF4J→JCL→Log4j 2→Log4j→JUL→No Logging,如果在Classpath中找到日志框架相应的JAR包,则使用该日志框架输出日志。

GitHub上标星2,java项目开发实训教程_Java_10

**第9章动态SQL实现原理,**本章首先介绍了MyBatis中动态SQL 的使用,接着介绍了动态SQL 中几个相关的概念,其中SqlSource用于描述MyBatis中的SQL资源信息,LanguageDriver用于解析SQL配置,将SQL配置信息转换为 SqlSource对象,SqINode用于描述动态SQL中<if、<where>等标签信息,LanguageDriver解析SQL配置时,会把<if>、<where>等动态SQL标签转换为SqINode对象,封装在SqlSource中。而解析后的 SqlSource对象会作为MappedStatement对象的属性保存在MappedStatement对象中。执行 Mapper时,会根据传入的参数信息调用SqlSource对象的getBoundSql)方法获取BoundSql对象,这个过程就完成了将SqINode对象转换为SQL语句的过程。

本章的最后一节还介绍了MyBatis 中#{和S}参数占位符的区别,这里简单描述一下,#{占位符会被替换为“?”,然后调用JDBC中 PreparedStatement对象的setXXX()方法为参数占位符设置值,而${}占位符则会直接替换为传入的参数文本内容。

GitHub上标星2,java项目开发实训教程_Java_11

**第10章MyBatis插件原理及应用,**MyBatis提供了扩展机制,能够在执行Mapper时改变SQL的执行行为。这种扩展机制是通过拦截器来实现的,用户自定义的拦截器也被称为MyBatis插件。MyBatis框架支持对 Executor.ParameterHandler、ResultSetHandler、StatementHandler四种组件的方法进行拦截。本章介绍了MyBatis插件的实现原理,然后通过案例介绍了如何实现一个分页查询插件和慢SQL 统计插件,当读者需要的功能MyBatis框架无法满足时,可以考虑通过自定义插件来实现。

GitHub上标星2,java项目开发实训教程_面试_12

**第11章MyBatis级联映射与懒加载,**关系型数据库可以通过外键维护一对一或一对多的关系,MyBatis通过级联映射完成一对一或-对多级联查询。本章介绍了MyBatis级联映射的使用。通过本章的学习我们了解到,MyBatisMapper配置中通过<association>标签建立一对一映射,通过<collection>标签建立一对多映射。

<association>和<collection>标签有两种映射方式,一种方式是为Java实体属性关联一个外部的查询Mapper;另一种方式是为实体属性的每个字段配置映射,然后通过JOIN语句进行关联查询。接着本章还介绍了MyBatis的级联映射的源码实现。最后本章介绍了MyBatis懒加载机制的实现原理。

MyBatis懒加载是通过动态代理实现的,当开启懒加载配置时,调用Mapper查询的结果是通过Cglib或Javassist创建的代理对象,当调用代理对象的Getter方法获取属性值时,会执行动态代理相关的拦截逻辑,在拦截逻辑中判断实体属性是否配置了懒加载,如果是,则执行一次额外的查询来填充属性值。

GitHub上标星2,java项目开发实训教程_后端开发_13

**第12章MyBatis与Spring 整合案例,**在很多情况下,我们并不是单独使用MyBatis框架,而是与目前主流的loC框架Spring框架进行整合。MyBatis框架与Spring框架整合需要用到MyBatis Spring模块。本章介绍了MyBatis框架与Spring框架的整合步骤,并以一个用户注册案例介绍了MyBatis与Spring框架整合的最佳实践。学习MyBatis源码时,我们了解到,MyBatis的Mapper实例是通过动态代理创建的。

与Spring框架整合后,MyBatis 中的Mapper动态代理对象会作为Spring框架中的Bean注册到Spring容器中。第13章开始介绍MyBatis框架与Spring框架的整合原理。

GitHub上标星2,java项目开发实训教程_面试_14

**第13章MyBatis Spring 的实现原理,**MyBatis框架在大部分情况下会和目前主流的loC框架Spring 整合使用,而MyBatis框架与Spring框架的整合需要借助于MyBatis Spring模块。为了便于

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

读者理解MyBatis与Spring框架整合的原理,本章首先介绍了Spring框架中的一些概念及Spring框架的启动过程。接着介绍了MyBatis中的 Mapper动态代理对象是如何整合到Spring容器中的。

通过本章的学习我们了解到,MyBatis与Spring框架整合后,Spring框架启动时,会扫描指定路径下的Mapper接口,将Mapper接口转换为Spring 中的 BeanDefinition对象,然后将 BeanDefinition对象的beanClass属性修改为MapperFactoryBean,这样Spring框架在所有的Bean配置转换为BeanDefinition对象后,就会根据BeanDefinition对象的beanClass属性创建Bean的实例。所以Spring框架启动后,就会为每个Mapper接口创建一个MapperFactoryBean对象,当我们通过Mapper 接口获取 Bean时,获取到的是MapperFactoryBean对象的getObject()方法返回的对象。MapperFactoryBean对象的getObject()方法中会调用SqlSession对象的getMapper()方法创建一个Mapper代理对象。

最后,本章介绍了MyBatis整合Spring事务管理的实现原理, Spring框架通过Java中的ThreadLocal机制保证同一个线程中获取到的始终是同一个Connection对象。

GitHub上标星2,java项目开发实训教程_后端开发_15

这份【MyBatis3源码深度解析】共有265页,因为内容实在是太多了,咱们在这里就不做过多的介绍啦,需要完整版的朋友,可以转发此文关注小编,扫码来获取!!

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

GitHub上标星2,java项目开发实训教程_面试_16

(2)刷的算法题(还有左神的算法笔记)

GitHub上标星2,java项目开发实训教程_Java_17

(3)面经+真题解析+对应的相关笔记(很全面)

GitHub上标星2,java项目开发实训教程_Java_18

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!

本文已被 CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

版权声明
本文为[HarmonyOS学习]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15438507/4690413

  1. 6年老猿带你掌握Spring Boot实现定时任务的动态增删启停
  2. disruptor笔记之六:常见场景,java教程从入门到精通pdf百度云
  3. Pourquoi InnoDB n'utilise - t - il pas un cache LRU naïf?
  4. Java Reflection (2): quelques opérations de base de reflection
  5. 6年老猿帶你掌握Spring Boot實現定時任務的動態增删啟停
  6. Les singes âgés vous permettent de maîtriser le démarrage et l'arrêt dynamiques des tâches programmées par Spring boot
  7. Docker From Beginning to Practice Series IV - docker Container chorégraphe Clean docker Composition
  8. 编写 java 程序,为家用电脑 ipv6 自动更新 goddy dns 记录(ddns)
  9. java jvm-old gc耗时几十s,导致系统告警
  10. Disruptor note 6: scénario commun, tutoriel Java de l'introduction à la maîtrise du PDF Baidu Cloud
  11. 编写Java程序启动脚本最佳实践
  12. How to get the correct Linux user's documents, music videos and other directories?
  13. Java JVM Old GC prend des dizaines de s, ce qui provoque une alarme système
  14. Écrivez un programme Java pour mettre à jour automatiquement les enregistrements DNS goddy (ddns) pour l'ordinateur domestique IPv6
  15. 編寫Java程序啟動脚本最佳實踐
  16. Meilleures pratiques pour écrire des scripts de démarrage de programmes Java
  17. Notes sur springcloud Eureka
  18. Ajout, suppression et modification simples de mybatis
  19. MySQL Learning - Logging System Redo log and Bin log
  20. Springboot Common comments | @ configuration
  21. Mécanisme d'expiration du cache redis et d'élimination de la mémoire
  22. Analyse concise du code source redis 01 - configuration de l'environnement
  23. Java - carte mémoire de l'objet
  24. Redis source Concise Analysis 02 - SDS String
  25. Why did docker lose to kubernetes? Docker employee readme!
  26. Spring cloud gateway practice 2: more routing configuration methods
  27. Principe de mise en œuvre ultime du mécanisme de concurrence Java sous - jacent
  28. [démarrer avec Java 100 exemples] 13. Modifier l’extension de fichier - remplacement de chaîne
  29. Java期末作业——王者荣耀的洛克王国版游戏
  30. Elasticsearch聚合学习之五:排序结果不准的问题分析,阿里巴巴java性能调优实战
  31. Java期末作業——王者榮耀的洛克王國版遊戲
  32. Java final work - King's Glory Rock Kingdom Game
  33. 【网络编程】TCP 网络应用程序开发
  34. 【网络编程入门】什么是 IP、端口、TCP、Socket?
  35. 【網絡編程入門】什麼是 IP、端口、TCP、Socket?
  36. [Introduction à la programmation réseau] qu'est - ce que IP, port, TCP et socket?
  37. [programmation réseau] développement d'applications réseau TCP
  38. [Java Basics] comprendre les génériques
  39. Dix outils open source que les architectes de logiciels Java devraient maîtriser!!
  40. Java经典面试题详解,突围金九银十面试季(附详细答案,mysql集群架构部署方案
  41. java架构之路(多线程)synchronized详解以及锁的膨胀升级过程,mysql数据库实用教程pdf
  42. java整理,java高级特性编程及实战第一章
  43. java教程——反射,mongodb下载教程
  44. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day12,zookeeper原理作用
  45. Java后端互联网500道中高级面试题(含答案),linux钩子技术
  46. java8 Stream API及常用方法,java初级程序员面试
  47. java-集合-Map(双列)——迪迦重制版,2021Java开发社招面试解答之性能优化
  48. Flink处理函数实战之二:ProcessFunction类,java线程面试题目
  49. flex 布局详解,【Java面试题
  50. Linux basic command learning
  51. Why did docker lose to kubernetes? Docker employee readme!
  52. MySQL安装
  53. Elastic Search Aggregate Learning five: Problem Analysis of Uncertainty of sequencing results, Alibaba Java Performance Tuning Practical
  54. Installing, configuring, starting and accessing rabbitmq under Linux
  55. Oracle SQL injection summary
  56. Installation MySQL
  57. L'exposition à la photo d'essai sur la route i7 du nouveau vaisseau amiral de BMW Pure Electric a également été comparée à celle de Xiaopeng p7.
  58. spring JTA 关于异常处理的时机问题
  59. Le problème du temps de traitement des exceptions dans la JTA printanière
  60. Do you really know MySQL order by