springboot实操笔记(二)

    前面分别试了试spring-boot-starter-web,spring-boot-starter-data-jpa

    这里再来试试:mybatis-spring-boot-starter。  从名字来看我会感到有点奇怪,因为之前看到的都是spring-boot-starter-xxxx,但是这个却是xxxxx-spring-boot-starter。  而且使用中也能看到它们的区别: 

    

    加入如上的一些依赖,pom并没有不报错,但是奇怪的是怎么也导不进Jar依赖,查看idea的那个配置文件:

        

    之后加上了版本号,就导入进来了。  我猜想这会不会说明一个问题,原生的或者默认的就用spring-boot-starter-xxxx,并且再spring-boot-starter-parent中或者说  spring-boot-starter-dependencies中指定了版本,而后天集成的就用  xxxx-spring-boot-starter,同时要自己指定版本号。   嗯一定是这样,哈哈。机智如我

    看一下它导入的依赖,相对而言就要少很多了:

    虽然它的内容相对要少一些,但是却必须重点看一下。  为什么呢?   想一想,它可是作为一个备胎上位,将默认的jpa的实现hibernate给干掉的,怎么能够小看!

    所以它们之间是如何解耦,如何实现这种相对友好的交接方式,是值得我们花时间专研的。

    从它的结构看出,它是没有依赖spring-data的,至少表面上没有。 

    

    通过分析,可以发现它的关键点应该就在 mybatis-spring 上面。进去看看:

    发现这个集成中间的类还是挺少的勒,有时间重点去看看。   同时也发现好像没有什么有价值的发现。  但是有个关键点类我给圈起来了。 通过看它的pom包中的依赖,感觉还是得去看看它本身才行:

    可惜对mybatis本身也不熟悉,没办法下手。   既然这也那就只好报大佬大腿了。 去互联网上不难发现这样的贴子,其中有一个我已经关注的博主就写了篇非常不错的文章,这里引用一下它文中的部分内容,结合自己的理解,以期弥补自己知识的漏洞:

        

    这是作为一个Mybatis产品单独使用时,不集成其它的东西,它的一个用法个例。  可以看出这里它所用到的类有: SqlSessionFactory,SqlSession,说白了就  SqlSession。    那么这里我想说一下自己的感受了:   比如tomcat,作为一个著名的开源的,稳定的servlet容器,它本身蕴含了复杂的设计模式,并且具有十分复杂的类结构关系,但是它任然有一个启动类:  bootstrap.java,只是我们不是直接调用它,而是通过startup.sh或者  startup.bat调用,应为要做很多的初始化,环境检查之类的工作。   再比如今天所涉及的内嵌的tomcat,它也可以看作有一个启动类:  Tomcat t  =  new Tomcat() ;  至于容器类各种复杂的调用则是后续的事情。   再比如我们看到一个十分复杂的软件,那我们拿到它的源码也是首先说去看它的主方法,即main方法。   这个地方呢也是如此,我们通常称作Mybatis,但是它具体的用法从哪开始呢?  这就是一个例子。   理解了这个,对集成的理解应该会好一些。 

    看看集成了Spring的例子:

 

    前面说到,单用mybatis的时候,核心甚至说启动类其实就是SqlSession。   上两张图贴的分别是spring集成的配置文件以及spring继承后的测试类。  第一图核心中的核心便是红色框内容的内容:org.mabaits.spring.mapper.MapperFactoryBean。  有几点需要明确:  

        它是一个泛型类;

        它将SqlSession给包装了;  

        它的泛型类的核心方法的返回值应该是本身的泛型类;

        它的泛型类的泛型提供者从内部成员中进行获取。   

  因此它的测试类长成这样也就不奇怪了。   因此  我们springboot开发时用的@Mapper,之后,可以通过接口映射xml,最后实现数据库存储就不奇怪了。   感情用了这么久,原来数据库存储这块一直是ORM框架负责。  妙哉妙哉!

    顺便看看它的源码的外形,过把瘾:

    

    同时看看sqlSessionFactoryBean过把瘾:

    不过这好像偏离了原来的的轨道。 我是想研究它们怎么解耦,然后怎么对接来着。

    但是现在有一些模糊的认识了,并且将之前的知识刷新了一些:谈谈自己的理解把:

        1.不是所有的东西与spring 或者说spring-boot都叫集成,比如  spring-data,spirng-boot-data-jpa,spring-boot-starter-web。有一些是它自带的默认的功能,还是不要叫集成好点。 

           2.若是spring与mybatis集成,那么只是引入jar包应该不配置相关的bean,应该是不会报错的。  hibernate也一样。   但是springboot由于是约定优于配置,因此当我们将mybatis依赖导入,不进行配置的话,会报错。   这给我们解耦提供了一个思路,若要解开spring-boot与某个产品的集成,若是标准的pom依赖,则直接去出它相应的xxxx-spring-boot-starter即可。 

        3.spring-boot与其它产品的集成是基于spring的。 

        4.那么springboot最吸引人的,也是最神奇的应该就是自动配置那段了吧。 (我有这样的一些疑惑:  它怎么知道哪些需要装配,如何知道装配的依赖关系,根据什么标准去装配) 。 

    有些累了,就这样吧!

 

阅读更多

没有更多推荐了,返回首页