Spring Boot 项目创建流程
一、概述
1.1、什么是Spring Boot
随着Spring体系的壮大,Java开发环境的搭建及使用显得尤为繁琐。在这种情况下, SpringBoot应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个 习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框 架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
1.2、核心功能
- 自动配置(autoconfiguration):针对很多Spring应用程序常见的应用功能,Spring Boot能自 动提供相关配置
- 起步依赖(starters):告诉Spring Boot需要什么功能,它就能引入需要的库。
- 命令行界面(cli):这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程 序,无需传统项目构建。
- 自省和监控(actuator):提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相 关功能统计等,可以让你深入运行中的Spring Boot应用程序,一探究竟。
1.3、三个核心注解
1、@ SpringBoot Configuration
配置文件,用来代替 applicationContext.xml 配置文件,
2、@ComponentScan
开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中
3、@EnableAutoConfiguration
提供自动配置
二、第一个Spring Boot程序
1、创建流程
1.1、jdk
1.2、组名、项目名
1.3、模板及spring boot 版本
1.4、修改Maven仓库
1.5、改编码
1.6、编写controller、pojo、service、mappe
2、lombok自动生成实体类
2.1、idea链接数据库
2.2、安装Lombok插件
2.3、配置Generate POJOs.groovy
import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
packageName = "com.pojo;" // 此处指定包路径,也就对应实体类中的package com.topex.admin.entity;
typeMapping = [ // 此处指定对应的类型映射,如下:数据库中bigint对应生成java的Long,int|tinyint生成Integer...
(~/(?i)int|bit|integer|number/) : "Integer",
(~/(?i)float|double|decimal|real/): "Double",
(~/(?i)datetime|timestamp/) : "java.time.LocalDateTime",
(~/(?i)date/) : "java.time.LocalDate",
(~/(?i)time/) : "java.time.LocalTime",
(~/(?i)/) : "String"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }
}
def generate(table, dir) {
def className = javaName(table.getName(), true)
def fields = calcFields(table)
new PrintWriter(new OutputStreamWriter(new FileOutputStream( new File(dir, className + ".java")), "utf-8")).withPrintWriter { out -> generate(out, className, fields) }
}
def generate(out, className, fields) { // 从这里开始,拼实体类的具体逻辑代码
out.println "package $packageName"
out.println ""
out.println ""
out.println "import lombok.Data;" // 因为我使用了lombok插件,使用到了Data注解,所以在引包时加了这一行
out.println "import io.swagger.annotations.ApiModelProperty;" // 同上,使用了swagger文档,所以引入到需要的注解
out.println "import javax.persistence.Id;" // tk.mybatis插件需用时需要@id注解,所以引入,不需要就去掉
out.println ""
out.println "@Data"
out.println "public class $className {"
out.println ""
int i = 0
fields.each() { // 遍历字段,按下面的规则生成
// 输出注释,这里唯一的是id特殊判断了一下,如果判断it.name == id, 则多添加一行@Id
if (it.name == "id") {
if (!isNotEmpty(it.commoent)) {
out.println "\t/**"
out.println "\t * 主键id"
out.println "\t */"
// out.println "\t@ApiModelProperty(value = \"主键id\", position = ${i})"
}
// out.println "\t@Id"
}
if (isNotEmpty(it.commoent)) {
out.println "\t/**"
out.println "\t * ${it.commoent}"
out.println "\t */"
// out.println "\t@ApiModelProperty(value = \"${it.commoent}\", position = ${i})"
}
if (it.annos != "") out.println " ${it.annos}"
out.println "\tprivate ${it.type} ${it.name};"
out.println ""
i++
}
out.println ""
out.println "}"
}
def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
type : typeStr,
commoent: col.getComment(),
annos: ""]]
}
}
def isNotEmpty(content) {
return content != null && content.toString().trim().length() > 0
}
def javaName(str, capitalize) {
def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
.collect { Case.LOWER.apply(it).capitalize() }
.join("")
.replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}
2.4、生成实体类
2.5、配置application.yml
# 对应项后面加空格,不是tab
server:
port: 8080
servlet:
context-path: /
#数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/smbms
username: root
password: root
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
resources:
static-locations: /**
mybatis:
configuration:
map-underscore-to-camel-case: true #下划线转驼峰命名标识
auto-mapping-behavior: full #全自动映射
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
type-aliases-package: com.zy.demossm_01.pojo #给包下类取别名
mapper-locations: classpath:mapper/*Mapper.xml #找到sql映射的xml文件
#日志
logging:
level:
root: info
com.zy.demossm_01: debug
3、导入依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.trace</groupId>
<artifactId>smbms01</artifactId>