首先开篇我们要知道,SpringBoot 和 Spring 和 Spring Cloud 的之间的关系。
我们要知道,SpringBoot 就是对 Spring 的封装,
他们之间的关系可以这样说:
Spring Boot是 Spring的一套快速配置脚手架,可以基于 Spring Boot快速开发单个微服务, SpringCloud是一个基于 Spring Boot实现的云应用开发工具;
Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;
Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,
Spring Cloud很大的一部分是基于 Spring Boot来实现,可以不基于 Spring Boot吗?不可以。
Spring Boot可以离开 Spring Cloud独立使用开发项目,但是 Spring Cloud离不开 Spring Boot,属于依赖的关系
或者我直接画图,这样说会简单点,
SpringCloud ---> SpringBoot ---> Spring
SpringCloud 依赖于 SpringBoot 才能工作
SpringBoot 依赖于 Spring 才能工作
接口开发里,大的来说分 HTTP协议和TCP/IP协议,
dubbo 就是属于基于TCP/IP协议。
普通接口和 restful 这种格式的或者说是风格的接口(URL+动作),和SpringBoot 开发的接口都是基于HTTP协议的接口。
注:restful风格类似于下图@RequestMapping
继续说刚刚的话题说,
在他们这些公司在开发HTTP协议的接口的时候,基本不用或者说用的少,这种普通开发。
为什么说用SpringBoot开发接口?
很简单,开发效率!开发时间更短,开发更简单,开发更方便,效率更高,能创造更高的价值。
但是要注意的是,普通接口和 restful 接口开发没什么区别,就是在风格上的区别。
但是SpringBoot和普通接口与restful有本质的区别。
普通接口与restful都是基于SpringMVC的接口,
里面的配置文件涉及到Web.xml,spring-mvc-controller.xml 因为要对 controller 层进行扫描和开启注解驱动。spring-common.xml(数据源,扫描map的 sqlSessionFactory,事务,扫描Service层,还有持久层各种各样的xml都是配置文件等等等等)。
SpringBoot 开发的http协议的接口,启动的时候,通过main方法启动,说的直白点就是通过打成jar包(可运行的可启动的)进行项目的启动和部署。
然后是创建SpringBoot项目:
在新建SpringBoot项目的时候,需要保证的是你要连接到外网,因为他是需要去下载一些东西的,当然,也有那种连接内网的办法,但是太麻烦。
我用的是IDEA
首先,如下图
然后,如下图
上图的直接过,直接下一步,用默认的不动。
然后如下图
然后下一步如下
没了,直接下一步。如下
不动,下一步。如下
然后就等着下jar包吧,要记得配置阿里私服,或者别的什么的都行。
然后我们看一下pom.xml里都引入了什么。
主要引入的就是这些,其他的可以先忽略不计。
刚刚咱们说了,是打成jar包,这里就有(上图)。
然后,有人纳闷了,为什么这么少,SpringBoot引入的有点少。
SpringBoot好就好在,它不仅对Spring的封装,还对pom.xml 引入的依赖都做了封装。
你像这个
它对SpringMVC 的 jar包的封装
你可以看看这个位置,如下:
这样你就不用考虑版本号会不会冲突啊,等等等等的一些个问题。
然后就看结构,结构也有别变动。如下
注:application.properties 这个文件不要改名字和改动地方,类似于约定优于配置的意思,没必要去改。
这个文件也是唯一的配置文件,缓存,消息队列,数据库连接等等等等。
这是第一个特点:唯一的配置文件。
第二个特点:@SpringBootApplication
之所以会省略很多个配置文件的原因就是这个注解,来解决和配置文件相关的联系的是事情。
什么扫描Service~什么注入乱七八糟的SpringBootApplication都帮你做了。
然后就是说我们刚刚说了,这个SpringBoot是通过打成jar包来运行的,
这些地方都能直接运行,它就是一个java程序,直接运行。
还有就是我们刚刚说的application.properties文件里面怎么写,比方说我们要写数据库连接,那么如下:
注意!里面的黄色字体一概不能动,都是约定好的key!是不能瞎写的,都是关键字,这些网上都能找到,想用什么都可以去网上去找。
然后就是SQL语句,我们可以写到Mapper
还有
咱们继续说,这个select有几个问题。
写select他根据xml里面有这个ParameterType和ResultType,传参的时候才有ParameterType,不传参就先不写 ParameterType,
但是我写的这个是有返回值的需要写ResultType,但是这里不是写ResultType,而是@Results,Results是个结果。
里面是这样写的
colum就是相当于map,作为列和属性的映射。
id指的是@Select里面的列名(或者叫字段名),
然后colum给了prproperty的id属性(打比方说的),prproperty后面的id就是实体类里的 id属性。
实体类如下:
所有map.xml里面的SQL都可以通过注解的方式写到java类。
在之前的时候,我们在spring-common里对map层的接口进行扫描,
那我们现在需要再SpringBootApplication下面多写个@MapperSean
启动,
这条,端口号没问题,HTTP协议没问题,Tomcat ? 不是main启动吗?要知道SpringBoot里面内嵌了Tomcat(当jar包内嵌了)。
看这里
启动,放结果
注:中间做了些操作,就是查询没什么别的,我主要记录的是一些关键的地方。
然后就是事务。
我们刚刚做的查询只是只读事务,事务只有增删改的时候才配,提交的时候是用不到。
那怎么配事务?直接Service层一个@Transactional 下图:
注:这只是对这个接口配了事务,要是有其他接口,那其他的接口还要单独配事务,并不是写一遍就对所有的接口都配了事务。
注解就是写到哪哪生效,配置文件是用了切点表达式,是对所有的Service层里的方法进行事务的控制。
这就是注解和配置文件的区别。
只读事务怎么配?@Transactional(readOnly = true) 如下:
这样,就能控制到只有这一个方法是只读事务,其他的都继承的类上的@Transactional这个注解的事务。
类似于子类和父类有同样的东西,子类覆盖父类的东西。
没有就继承父类。
那如何解决运行时异常?如下:
那打包也顺带说一下。
然后我们就能在项目的目录下找到如下:
然后右击,找到如下一行打开文件夹
就可以了
好了,先这样吧。
如有问题,请指出,在下将感激不尽。