Part1. SpringBoot的介绍和快速入门
一. 介绍
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
二. 优点
1.创建独立的Spring应用;
2.内嵌Tomcat, 无需部署WAR文件;
3.简化MAVEN依赖配置;
4.自动配置Spring, 快速构建项目和集成新技术;
5.SpringBoot使监控变得简单(项目自带监控)
三. 不足
1.坑多, 文档少;
2.版本迭代速度快;
3.SpringBoot应用喜欢把配置都写在代码中, 有时会带来混乱;
四. 应用场景
1.web项目;
2.微服务;
3.Spring应用;
五. 快速入门
1. 创建一个MAVEN项目(jar)
注意: 创建spring boot应用通用方法是配置pom.xml, 将项目的父项目定义为spring-boot-starter-parent, 但是在真正的开发中, 往往模块的父项目是需要自己定义的, 而maven的pom只允许一个存在, 所有以后会学习如何避免使用spring-boot-starter-parent.
2. 引入web依赖
① 去maven中央仓库查找spring-boot-starter-web的依赖:
② 添加到pom.xml中
然后你会发现, springMVC需要的jar包都已经添加进来:
3. 创建Cotroller
4. 创建启动类
spring boot应用不需要部署到tomcat上, 它内嵌web容器, 通常需要一个名为*Application的Java启动入口类, 类中有一个main方法. 需要在类上加上springboot的注解@SpringBootApplication, 此注解是spring boot的核心注解, 主要目的是开启自动配置.
注意:
启动类只扫面它同级类或者同级包下的类!!!(在此吃了不少亏)
run(arg1, arg2)方法的两个参数:
arg1: 启动类.class
arg2: main的参数
5. 启动springboot应用
以java application的方式运行上面启动类的main方法.
6. 浏览器访问
Part2. SpringBoot的基本配置
一. 配置文件的种类
1. application.properties类型的配置文件
配置举例如下:
server.port=8081
server.context-path=/demo
2. application.yml类型的配置文件
配置举例如下:
server:
port: 8081
context-path: /demo
注意:
更推荐使用 *.yml文件配置, 更加简洁; 但是! 属性和属性值之间必须有一个空格!!!!
(而且我在eclipse中以这种方式配置的时候, 开头必须是顶格, 并不能使用tab键排版, 不然会报错; 但是使用idea配置的时候就可以, 而且idea还有提示. 什么情况)
二. Spring Boot的属性注入
1.基本类型的属性注入
方式如下:
① 在application.yml中添加:
id: 10
name: 张三
② 在Controller中使用@Value取值:
@Value(“${id}”)
private Integer id;
@Value(“${name}”)
private String name;
2.对象类型的属性注入
方式如下:
① 在application.yml中添加:
user:
id: 10
name: 张三
② 创建User实体类, 使用@ConfigurationProperties注解修饰此实体类:
@Component
@ConfigurationProperties(prefix=”user”)
public class User{
private Integer id;
private String name;
GET/SET..
}
③ 在pom.xml中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
④ 在Controller中注入对象属性:
@RestController
public class HelloWorldController {
@Autowired
private User user;
@RequestMapping(value="/")
public Object demo(){
return user;
}
}
3.如何来回切换配置文件?
需求:
开发环境: application-develop.yml
生产环境: application-product.yml
步骤:
①创建application-develop.yml和application-product.yml两个文件;
② 创建application.yml文件, 在此总配置文件中对不同生产环境的配置文件进行调度使用, 就拿application-develop.yml举例:
spring:
profiles:
active: develop
此时使用的就是开发环境下的配置.
Part3. Controller的使用
一. @Controller和@RestController注解
总得来说:
@RestController = @Controller + @ResponseBody
返回的是JSON字符串.
小提示:
spring boot底层用JSON工具是jackson. 如何配置使用fastjson以后会说的.
问:
既然@RestController返回的是JSON字符串, 那么如果我想要返回视图名称,从而跳转到相应页面, 那该怎么办呢?
答:
spring boot当然也可以使用@Controller注解了.
① 需要在pom.xml中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
② 在resources下创建templates文件夹
③ 在resources/templates/下创建index.html
④ 在Controller中返回”index”即可跳转到index.html页面
二.@RequestMapping和GetMapping、PostMapping、PutMapping、DeleteMapping的瓜葛
为了符合RESTful风格的请求url, 我们需要用不同的请求方式,主要有:GET, POST, PUT, DELETE.
★ GET 用于获取数据
★ POST用于添加数据
★ PUT用于修改数据
★ DELETE用于修改数据
例如:
1. @RequestMapping
有属性:
value 请求路径
method 请求方式
例如:
@RequestMapping(value=”/user”, method=RequestMethod.GET)
2. @GetMapping
它是一个组合注解;
@GetMapping(“/user”)
就相当于:
@RequestMapping(value=”/user”, method=RequestMethod.GET)
两者的效果是一模一样的.
@PostMapping、@PutMapping、@DeleteMapping道理同上.
Part4. 操作数据库
一. 什么是JPA?
JPA(Java Persistence API) 定义了一系列java对象持久化的标准(规范).
目前实现了这一规范的产品有: Hibernate、TopLink等.
二. RESTful API的设计
通过实现一下五个接口, 来了解spring boot如何操作数据库.
三. 实现步骤
1.在pom.xml中添加两个依赖
<!-- 引入jpa依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 引入mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2. 在application.yml中配置数据库信息
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
注:
★ show-sql: 是否打印sql语句
★ ddl-auto属性的意义在于表的生成方式, 可选值有:
① create 每次都创建新的表(如果存在, 删掉,再创建新的)
② create-drop 应用停止时删除表
③ update 若表不存在,则创建; 已存在, 则使用该表
④ none 什么也不做
⑤ validate 验证类中的属性和表中的字段是否一致
3. 创建实体类
@Entity(name="user_info")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
get/set...
}
★ @Entity表明此类对应数据库中的一张表, 属性name就是表名.
★ @Id表明此属性是主键
★ @GeneratedValue设置主键的维护方式(此处是自增)
若此时运行启动类, 则会发现数据库中多了一张名为user_info的表.
4. 编写Mapper接口
package online.bendou.springboot.demo.mapper;
import online.bendou.springboot.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserMapper extends JpaRepository<User, Integer>{
}
注:
Mapper接口继承JpaRepository
<T,Serializable.>
<
T
,
S
e
r
i
a
l
i
z
a
b
l
e
.
>
<script type="math/tex" id="MathJax-Element-1">
</script>
参数1: 此Mapper接口对应的实体Bean;
参数2: 该实体Bean的主键的类型;
5. 编写Controller
注意:
请求方式要实现上面表格中的RESTful风格的API设计!
@RestController
public class HelloWorldController {
@Autowired
private UserMapper userMapper;
/**
* 获取用户列表GET
*/
@GetMapping("/user")
public List<User> getAll(){
return userMapper.findAll();
}
/**
* 添加用户POST
*/
@PostMapping("/user")
public String add(User user){
userMapper.save(user);
return "ok";
}
/**
* 通过id查询用户GET
*/
@GetMapping("/user/{id}")
public User findById(@PathVariable("id") Integer id){
User one = userMapper.findOne(id);
return one;
}
/**
* 通过id修改用户PUT
*/
@PutMapping("/user/{id}")
public String update(User user){
userMapper.saveAndFlush(user);
return "ok";
}
/**
* 通过id删除用户DELETE
*/
@DeleteMapping("/user/{id}")
public String delete(@PathVariable("id") Integer id){
userMapper.delete(id);
return "ok";
}
}
6. 使用POSTMAN插件进行测试