概念:
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
特点:
1. 创建独立的Spring应用程序
2. 嵌入的Tomcat,无需部署WAR文件
3. 简化Maven配置
4. 自动配置Spring
5. 提供生产就绪型功能,如指标,健康检查和外部配置
6. 绝对没有代码生成和对XML没有要求配置
使用:
使用idea编辑器创建SpringBoot项目,idea默认使用Maven管理SpringBoot项目
创建Web项目时需要勾选web选项
作用:
SpringBoot是用来做微服务的,什么是微服务?微服务架构是一项在云中部署应用和服务的新技术。
创建SpringBoot项目:
首先修改idea中的maven的setting.xml文件,idea自带的maven远程仓库服务器在国外,所以下载速度相当慢,因此使用阿里云的远程仓库,可以加快下载速度。
在配置完成远程仓库后,我们就可以在idea中选中我们的要创建的项目:Spring Initializr,
选择完成后,选择默认的url:http://start.spring.io,然后直接下一步下一步,记得别忘了选web这个选项。
创建springboot的配置文件
SpringBoot的配置文件是application.properties或者我们可以起名字叫application.yml
application.properties可以写数据库相关的配置信息,比如:
server.port=8080 这个是指定tomcat服务器的访问的端口号
server.context-path=test 这个是给访问项目前加一个前缀,加了这个以后, 访问项目就是:http://localhost:8080/test/项目中的名字
yml是另一种配置文件的格式,它比properties的好处在于,可以省略很多的关键字:
比如:
server:
port: 8080
context-path: /girl
上面这么写和properties写是一样的,但是要记得,yml文件中,在关键字冒号后面要有一个空格,比如port: 8080,这个冒号和8080之间就要有空格,否则就会报错。
如何在yml中声明变量并在controller中取出在网页中显示?
我们可以在yml文件里面声明变量,然后在我们的controller里面取到,比如:
user001: B
那么我们在controller里面就可以直接写成:
@Value("${user001}")
private String user001;
这样我们就取到了user001的值
还有就是,当我们新建一个controller类的时候,所使用的注解是@RestController,而不是Controller,这个和Controller的区别我会在后面总结。
@RestController
public class TestController {
@Value("${user001}")
private String user001;
@RequestMapping("test")
public String Test(){
return user001;
}
}
以上大概就是我们创建一个controller的基本代码,还有就是,我们在运行我们的项目时,要使用DemoApplication.java这个类,这个类中有这个代码:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication这个注解意思就是我们启动项目就是要通过以下这个类来启动。
那么我们如何在配置文件中使用我们已经声明完成的变量?这个时候我们就可以这么写:
user001: 001
age: 18
context: "user001:${user001},age:${age}"
我们在controller中就可以这么使用:
@Value("${context}")
private String context;
如何读取配置文件中的信息并封装成实体类
如果我们想把配置文件中的信息,读取并自动封装成实体类,这样我们就可以在代码中直接的使用,这个时候,我们就需要借助@ConfigurationProperties这个注释,使用方法如下:
首先,我们在yml文件里面这么写:
girl:
name: qxf
age: 23
然后我们新建一个实体类名字叫Girl,在里面这么写:
@Component
@ConfigurationProperties(prefix = "girl")
public class Girl {
private String name;
private String age;
public Girl() {
}
public Girl(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
给出相应的构造方法和set/get方法,idea的快捷键是alt+insert,然后我们在头文件声明:
@Compont就是标记一个组件,这个是spring中的注解,可以配合Autowired使用
@ConfigurationProperties就是注解将配置文件中的信息读取并封装,并且我们在prefix前缀中声明出我们在yml文件中的名字girl
最后,我们在controll里面这么写:
@RestController
public class TestController {
@Autowired
private Girl girl;
@RequestMapping("test")
public String Test(){
return girl.getName()+"\t"+girl.getAge();
}
}
这样就可以直接使用我们在配置文件中声明的实体类了
一个项目中有多个配置文件,怎么选择启动哪一个配置文件?
首先,我们有三个配置文件:
一个是application.yml,一个是application-dev.yml,一个是application-prop.yml
其次,我们在application.yml中写:
spring:
profiles:
active: dev(或者prop)
这个时候我们就可以通过访问不同的端口号访问不同的配置文件了,但是暂时不理解这样写有什么用。。。
Controller中常用的注释有哪些?
@Controller 处理http请求,要配合模板使用,但是基本不用,因为性能较低
@RestController Spring4后新加的注解,原来返回json需要@ResponseBody配合@Controller
@RequestMapping 配置url映射
@RequestMapping还可以这么写:@RequsetMapping(value={"/hello","/hi"}),这样的话,就可以通过hello或者hi访问了
url连接访问的都是get方式访问的,所以当我们在
@RequestMapping(value = "/test",method = RequestMethod.GET)的时候,可以直接访问,但是如果我们把method改成了post,就需要借助工具或者写一个表单来进行访问了。
@PathVariable 获取url中的数据
使用方法:
@RequestMapping(value = "/test/{id}",method = RequestMethod.GET)
public String Test(@PathVariable("id") Integer id){
return "id: "+id;
}
这样写完以后,在访问时这么访问:http://localhost:8080/test/1;就可以拿到id=1
当然,{id}这个东西也可以写在test的前面而不是后面
@RequestParam 获取请求参数的值
使用方法:
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String Test(@RequestParam("id") Integer id){
return "id: "+id;
}
这样写完以后,就可以访问url中带的参数了,访问时这么写: http://localhost:8080/test?id=100,就可以拿到id=100
我们也可以这么写给设置默认值:
@RequestMapping(value = "/test2", method = RequestMethod.GET)
public String Test2(@RequestParam(value = "name",required = false,defaultValue = "0") StringBuffer name){
return "name: "+name;
}
这样的话,如果我们不写,默认值就是0,否则的话就是我们写的值
@GetMapping 组合注解
当然我们还可以使用@GetMapping(value="/test")来替代下面这句话:
@RequestMapping(value = "/test",method = RequestMethod.GET)
这两句话都是一样的,使用的效果完全一样
使用SringBoot对数据库进行增删改查
Spring-Data-Jpa
JPA定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate,TopLink等
所以我们通过使用Jpa来实现对数据库的增删改查,而且通过Jap,我们可以反向生成数据库中的表,即和Hibernate非常的相似,通过新建一个实体类然后生成一张表。
具体步骤如下:
第一步:引入Jap和mysql 的相关jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.wisdom-framework</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34_1</version>
</dependency>
第二步:配置yml文件,设置Jpa的相关参数
spring:
datasource:(这个是数据库的相关配置)
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
password: 12345678
username: root
jpa:
hibernate:
ddl-auto: update
show-sql: true
create是每次程序运行都会创建一个新的表,如果你之前有这个表的话,它会帮你删除掉。
update是如果你里面有数据,它会帮你保留,而不会删除表中的数据。
第三步:新建一个实体类
@Entity
public class Boy {
@Id
@GeneratedValue//设置自增
private Integer id;
private String name;
private String sex;
public Boy() {
}
public Boy(Integer id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
}
第四步:新建一个接口,这个接口继承了JpaRepository类并且映射了Boy类
public interface BoyRepository extends JpaRepository<Boy,Integer> {
}
第五步:新建一个Controller类
@RestController
public class BoyController {
//查询所有
@Autowired
private BoyRepository boyRepository;
@GetMapping(value = "/boys")
public List<Boy> boylist(){
return boyRepository.findAll();
}
//新增
@GetMapping(value = "/save")
public Boy boyadd(@RequestParam("name") String name,
@RequestParam("sex") String sex){
Boy boy = new Boy();
boy.setName(name);
boy.setSex(sex);
return boyRepository.save(boy);
}
//查询
@RequestMapping(value = "/findById/{id}")
public Boy findById(@PathVariable("id") Integer id){
return boyRepository.findOne(id);
}
//更新
@RequestMapping(value = "/update/{id}")
public Boy update(@PathVariable("id") Integer id,
@PathVariable("name") String name,
@PathVariable("sex") String sex){
Boy boy = new Boy();
boy.setId(id);
boy.setName(name);
boy.setSex(sex);
return boyRepository.save(boy);
}
//删除
@RequestMapping(value = "/delete/{id}")
public void delete(@PathVariable("id") Integer id){
boyRepository.delete(id);
}
}