本文分五部分讲解SpringBoot基础部分,仅供入门者参考,如有纰漏,欢迎指正

备注:java环境:jdk 1.8+,开发环境:windows 10系统下使用idea

一、如何创建Spring Boot项目

1、首先打开idea,点击创建新项目,如下图







2、填写项目基本信息,点击Next,如下图:





3、进入项目依赖选择界面,这里我使用最新的SpringBoot2.1.0版本,添加的依赖如下图右侧:  

Web:代表为一个web应用程序

Templents → Thymeleaf : SpringBoot官方推荐的模板引擎,下文页面同样采用thymeleaf模板演示

SQL → JPA:Spring Data 的实现,对数据进行持久化操作




4、点击Next 选择项目储存目录,点击Finish即可创建完成第一个SpringBoot项目,因为采用Maven构建,第一次初始化比较慢,请耐心等待。

二、Spring Boot 目录结构及Dependices分析

1、Spring Boot 目录结构如下图:




相对于传统maven项目,SpringBoot项目多了下面打勾的三个目录,如下表格:




/src/main

项目根目录

 


/java

java源代码目录

 


/resources

资源目录

 


/resources/static

静态资源目录      【√】

图片、css等静态文件存放目录


/resources/templates

表示层页面目录   【√】

Jsp、freemarker等页面文件存放目录


/resources/application.properties

Spring配置文件   【√】

配置文件


/test

测试文件目录

 

2、打开项目目录下的pom.xml

1) <parent>节点解析


 可以看到文件中的parent节点,这里面的spring-boot-starter-parent 会默认提供一些合理的配置,具体如 下:
<parent> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version> </parent>
*  默认使用Java 8
* 使用UTF-8编码
* 一个引用管理的功能,在dependencies里的部分配置可以不用填写version信息,这些version信息会从   
 spring-boot-dependencies里得到继承。
*  识别过来资源过滤(Sensible resource filtering.)
* 识别插件的配置(Sensible plugin configuration (exec plugin, surefire, Git commit
ID, shade).)
*
能够识别application.properties和application.yml类型的文件,同时也能支持profile-specific类型的文件(如:
application-       foo.properties and
application-foo.yml,这个功能可以更好的配置不同生产环境下的配置文件)。
* maven把默认的占位符${…​}改为了@..@(这点大家还是看下原文自己理解下吧,我个人用的也比较少 since the default
config files accept Spring style placeholders (${…​}) the Maven filtering is
changed to use @..@ placeholders (you can override that with a Maven property
resource.delimiter).)
2) dependencies 节点,依赖文件配置



*  spring-boot-satrter-web 提供web支持、
*  spring-boot-starter-thymeleaf使用thymeleaf模板引擎<dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-satrter-web</artifactId> </dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
</dependencies>3) plugins节点,提供插件支持

* spring-boot-maven-pluginspring-boot-maven-plugins能够将Spring
Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。
<plugins> <plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>





三、Spring Boot 常用配置文件

1、application文件的两种配置方式


打开项目的resources目录,会看到application.properties文件,该文件时SpringBoot的主配置文件,可以对项目各项参数进行详细配置,具体配置项如下图所示:


#服务器端口号 server.port=80 #应用上下文[进行合理的项目url划分,解决项目冲突]
#一般情况下小项目通常在tomcat下部署多个webapp,通过上下文区分
#在集群或大型项目中,通常一个tomcat对应一个webapp,然后不同端口进行区分 server.servlet.context-path=/
#UTF-8只包含了二万+ 个中文字符,对于生僻字显示不了 spring.http.encoding.charset=utf-8
#是否开启thymeleaf缓存,关闭缓存可以实现页面热部署,但是必须打开File→settings→build→complier→build project
auto项 spring.thymeleaf.cache=false #解决传日期参数报400转换错误问题
spring.mvc.date-format=yyyy-MM-dd #设置json日期序列化输出格式相对北京时间与格林尼治时间有八个小时的时差,设置偏移量
spring.jackson.time-zone=GMT+8 #格式化json输出的时间问题,将格林尼治时间进行转换
spring.jackson.date-format=yyy-MM-dd HH:mm:ss SSS
#日志输出地址,springBoot默认并没有进行日志文件输出,只在控制台打印,想输出日志则进行下面配置:
logging.file=C/logs/msg.log #日志级别 debug → info → warn → error 默认情况Spring
Boot日志级别为info #如果设置debug为true时,则日志级别降低到debug debug=false #Root代表默认全局设置
logging.level.ROOT=INFO #设置指定包的输出级别 logging.level.org.springframework=ERROR
logging.level.org.apache=ERROR

四、Spring Boot 基础数据操作

【情景】 实现学生系统的增删改查

1、这里以SpringBoot官方推荐得SpringData JPA 为例,演示数据的增删改查,然后以MySQL数据库为例,这里我们先看一下

基础的依赖,打开上面项目的pom.xml我们可以看到:



* spring-boot-starter-data-jpa  这是Spring提供的一套较为简洁的ORM框架,实现CRUD操作<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>


* mysql-connector-java
  MySql数据库连接驱动
<dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>
</dependency>
2、接下来我们新建一个名为sc_member 的数据库, 然后数据库中新建人员表 t_member,表结构如下:




3、到项目中配置application.yml/application.properties文件,配置端口、数据库信息等,配置信息如下图:
spring: application: name: member datasource: driver-class-name:
com.mysql.jdbc.Driver url:
jdbc:mysql://localhost:3306/sc_member?useUnicode=true&characterEncoding=UTF-8
password: root username: root server: port: 8003
4、配置好应用信息后在entity包下开始新建实体类 Member.java

这里需要说一下,实体类上面要加@Entity注解,然后添加@Table(name='表明')注解,将实体类与数据信息绑定,

这里的mid为主键,所以添加注解@Id 
然后@GenerateValue(strategy='')注解来指定主键的生成策略(因为我的实体类与数据库字段名相对应,所以不需要指定,如果实体名与字段名不匹配,这需要用
@Column(name="")进行指定字段名)
import javax.persistence.*; import java.util.Date; @Entity
@Table(name="t_member") public class Member { @Id @GeneratedValue(strategy =
GenerationType.IDENTITY) private Long mid; //学生id private String name; //学生名字
private String idno; //学生身份证号码 private String mobile; //学生手机号码 private Date
regdate; //入学日期 private Date expdate; //毕业日期 注:篇幅问题这里省略Getter and Setter
5、新建接口MemberRepository接口,继承JpaRepository<Member,Long>,JpaRepository 是Spring
Boot 为我们提供的简化类,默认提供了增删改查方法,这里的<Member,Long>为 
使用JpaRepository需要传入实体类及主键的类型,具体代码如下:
import org.springframework.data.jpa.repository.JpaRepository; import
vip.ablog.member.Entity.Member; import java.util.List; public interface
MemberRepository extends JpaRepository<Member,Long> { //相当于:select * from
t_member where mobile = ... public List<Member> findByMobile(String mobile); }
6、新建MemberController类进行测试,这里的注解不再赘述,详情见上文
@Controller public class MemberController { @Resource MemberRepository
repository; @GetMapping("/addMember") @ResponseBody public String addMember(){
Member member = new Member(); member.setIdno("1234"); member.setExpdate(new
Date()); member.setRegdate(new Date()); member.setMobile("110");
member.setName("小明"); repository.save(member); return "sucess!"; }
然后访问你的项目地址,如下图:(这里只提供思路,不要照搬我的地址)






这时可以看到数据库的表中多了一条记录信息:







7、上面是数据的插入,同样数据的查询修改等如下代码:
@GetMapping("/findMemberList") @ResponseBody public List<Member>
findMemberList(){ List<Member> memberList = repository.findAll(); return
memberList; } @GetMapping("/modifyMember") @ResponseBody public String
modifyMember(Long id){ //Optional
是一个包含或着不包含一个非空值的容器对象。如果一个值存在,isPresent()将会返回true 并且 get() 将会返回所对应的值. Optional
optional = repository.findById(id); //查询时默认返回Optional对象,相当于对原实体的封装 if
(optional.isPresent()) { Member member = (Member) optional.get();
member.setName("小花"); repository.save(member); }else{ //XXXXX } return "XXXX"; }







五、Spring Boot中需要注意的地方

1、thymeleaf文件修改后不自动生效问题:

1) 添加maven依赖
<dependency> <!--Spring 官方提供的热部署插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> <optional>true</optional>
</dependency>
2) 开启热部署
<plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <configuration>
<fork>true</fork> </configuration> </plugin>
3) application配置文件关闭页面缓存


spring.thymeleaf.cache=false
4) idea 打开自动部署


打开File → settings → build → complier → build project auto 项打钩

2、日期格式报400转换错误问题

application配置文件设置日期格式



#解决传日期参数报400转换错误问题 spring.mvc.date-format=yyyy-MM-dd
3、项目启动后访问地址报404页面找不到问题

如果代码无错误,访问后一直404找不到页面,很有可能是项目的main方法所在的ApplicationStart
文件不再这个项目名所在的包下,将main程序放在项目名所在的包下即可运行。




###后续会继续提供SpringCloud的文章#####未完待续#########








友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信