1 创建一个聚合项目
创建foodie-dev项目
在pom文件中设置聚合工程的顶级项目
<packaging>pom</packaging>
选中项目,右键新建Module,foodie-dev-common
子工程的pom文件,
<!-- 默认的打包方式是jar包-->
<packaging>jar</packaging>
新建module,foodie-dev-pojo,并且依赖common模块,在pojo的pom文件中,
<dependencies>
<dependency>
<groupId>com.zte</groupId>
<artifactId>foodie-dev-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
添加其他模块
<modules>
<module>foodie-dev-common</module>
<module>foodie-dev-pojo</module>
<module>foodie-dev-mapper</module>
<module>foodie-dev-service</module>
<module>foodie-dev-api</module>
</modules>
依赖关系api-->service-->mapper-->pojo-->common
完成这些之后,去maven里双击顶级项目的install,装配起来。
继续在父pom中添加各个配置项。
在api模块中创建工程
运行工程之前,还是要执行一边安装install操作;
2 SpringBoot的自动装配
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
查看run方法的源码
一个静态助手,可以来运行一个来自特定source的SpringApplication,这个source就是参数中的primarySource,这个Class泛型。第二个参数通常是java main方法的参数,也就是args。返回的是正在运行的ApplicationContext。
具体看下@SpringBootApplication注解。
@ComponetScan是包扫描,会扫描启动类Application所在包下面所有的class和子包下的class。
@SpringBootConfiguration
这个注解里面是一个接口,上面有@Configuration,表明这是一个容器,类似Spring里面的Beans,里面有很多Bean,然后用xml文件进行配置。
@EnableAutoConfiguration
这个注解点击进去之后,
查看@Import
注释上说,用来导入一个或多个Configuration(容器)
来查看导入的这个 AutoConfigurationImportSelector.class。
查看spring.factories
当满足一些要求的时候,会加载tomcat(springboot内嵌的tomcat)
点进去看一看到tomcat的默认配置。
帮忙自动装配了Spring MVC
给web server运行自动装配。
自动装配,启动tomcat
3 整合HikariCP
在父pom文件中添加mysql驱动和mybatis依赖
在api模块的yml文件中加入配置
运行之前,要重新install一下。
1-4 MyBatis数据库逆向生成
运行前同样需要install
4 结合通用Mapper,编写Restful风格Api
作为service,需要被容器扫描到,所以加了@Service注解
control+i,引入所有接口方法。
编写StuFooContorller,到StuServiceImpl,里面的getStuInfo方法,需要事务的支持,因为是查询,只选择SUPPOTS
1-10 事务传播详解
事务的声明是在serviceImpl层添加的
- [REQUIRED]没有添加REQUIRED事务注解的时候,
第一个会被执行,把数据写到数据库中,因为中断,第二方法没有把数据写到数据库中,但是第一个方法在因为错误中断没有回滚;
- [REQUIRED]给父级方法添加事务声明,子级方法不填加,事务会传递到子级,报错后操作回滚,数据库中没有数据。
- [REQUIRED]父级事务不填加事务声明,子级方法添加;被添加的子方法会回滚;
- [SUPPORTS]父方法不声明,子方法声明,不会加事务,报错数据库也不会回滚;因为查询的时候不需要事务回滚,所以使用SUPPORTS
- 父方法声明[REQUIRED],子方法声明[SUPPORTS]