foodie-dev-pojo
1.0-SNAPSHOT
创建foodie-dev-service
模块,依赖mapper
com.wjw
foodie-dev-mapper
1.0-SNAPSHOT
创建foodie-dev-api
模块(控制层),依赖service
com.wjw
foodie-dev-service
1.0-SNAPSHOT
但实际上api不应该调用mapper
所有的创建完毕之后要执行foodie-dev的Maven的安装命令。
这里没有使用外键,原因如下:
-
会有一定的性能影响。
-
如果要进行热更新(不停机维护),如果有外键可能会导致新更新的代码无法运行,因为要去匹配到现有的外键,所以可能要重启服务器。
-
删除物理外键可以降低耦合度。
-
数据库的分库分表有外键的话很难实现。
在父工程foodie-dev的pom文件中修改
1. 引入依赖 parent
org.springframework.boot
spring-boot-starter-parent
2.1.5.RELEASE
之后子模块就可以不用单独制定版本号了。
2. 设置资源属性
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
3. 引入依赖 dependency
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-configuration-processor
true
**创建foodie-dev-api的配置文件application.yml
和启动类:**
package com.wjw;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
-
2 * @Author: 小王同学
-
3 * @Date: 2020/12/20 15:11
-
4
*/
@SpringBootApplication
@MapperScan(basePackages = “com.wjw.mapper”)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
创建controller包下的类HelloController:
使用@RestController
注解使得返回的对象为json格式
package com.wjw.controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
-
2 * @Author: 小王同学
-
3 * @Date: 2020/12/20 16:29
-
4
*/
@RestController
@ApiIgnore
public class HelloController {
@GetMapping(“/hello”)
@Transactional
public Object hello() {
return “Hello World”;
}
}
为什么SpringBoot可以近乎0配置?
- 主要就是基于其自动装配特性。
默认的设置来自于@SpringBootApplication
注解,点进该注解中:
我的启动类是在com.wjw包下,当主函数运行后,会自动扫描包下的所有类
@SpringBootConfiguration
注解是一个接口被@Configuration
修饰,表示它是一个容器:
@EnableAutoConfiguration
是开启自动装配的,@Import
是用于做导入的,并且导入的是一个个的Configuration(即容器)
AutoConfigurationImportSelector
是一个选择器,类比jquery,可以选择自动装配的类
getAutoConfigurationEntry
用于自动装配
configurations
被存在于一个List
,来自getCandidateConfigurations
方法
在spring.factories
文件中存了一些自动装配的类
中可以看到内置的tomcat
中内置的是SpringMVC等等等等
导入数据库文件…(略)
1. 父工程foodie-dev的pom中引入数据源驱动与mybatis依赖
mysql
mysql-connector-java
5.1.41
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.0
2. 在doofie-dev-api项目的yml中配置数据源和mybatis
最大连接数经验上是核数的1.5倍
############################################################
配置数据源信息
############################################################
spring:
datasource: # 数据源的相关配置
type: com.zaxxer.hikari.HikariDataSource # 数据源类型:HikariCP
driver-class-name: com.mysql.jdbc.Driver # mysql驱动
url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect
username: root
password: root
hikari:
connection-timeout: 30000 # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQ
minimum-idle: 5 # 最小连接数
maximum-pool-size: 20 # 最大连接数
auto-commit: true # 自动提交
idle-timeout: 600000 # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
pool-name: DateSourceHikariCP # 连接池名字
max-lifetime: 1800000 # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟
connection-test-query: SELECT 1
############################################################
mybatis 配置
############################################################
mybatis:
type-aliases-package: com.wjw.pojo # 所有POJO类所在包路径
mapper-locations: classpath:mapper/*.xml # mapper映射文件
同时,在foodie-dev-mapper中创建com.wjw.mapper包,resources中创建mapper包
在foodie-dev-pojo中创建com.wjw.pojo包
3. 内置tomcat
############################################################