SpringBoot

SpringBoot是SpringMVC的升级版,简化配置,很可能成为下一代的框架

1.新建项目

怎么创建springBoot项目呢?

创建步骤复杂一点点

  1. New Project – Spring Initializr – 选择web

确定文件路径

选择版本,组件

  1. 选择路径进行保存。删除没用的文件

启动SpringBoot项目

运行自动生成的XXApplication类,其必须带有@SpringBootApplication注解,右键Run XX即可启动项目。

@SpringBootApplication
public class IndustryApplication { public static void main(String[] args) {
SpringApplication.run(IndustryApplication.class, args);
} }

为什么我没有Run XX按钮?

Z:idea在初次启动的时候需要加载许多东西,建议maven使用阿里云的仓库,加载完之后才会出现Run XX按钮。

Z:当出现此页面的时候,说明springBoot启动成功

M:怎么编写一个Controller文件呢?

Z:添加类似Spring的注解,启动即可访问。(也可以先编译,通过命令启动)

@RestController
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String HelloController(){
return "helloWorld";
}
}

M:怎么进行代码补全呢?

Z:由于代码补全快捷键冲突了,所以需要进行修改。

配置文件的使用

Z:新建的项目中,application.properties就是新建项目默认的配置文件。这里可以对访问端口和访问路径进行配置。

server.port=8081
server.context-path=/girl

相似的,application.yml也是默认配置文件,其使用分组的格式,:之后必须加空格,子内容前面为tab键

server:
port: 8081
context-path: /girl

M:yml可以配置java代码中注入的值吗?

Z:也行,直接写 键:值,用@Value("${键}")的方式即可注入。

M:那可以用@Value把配置文件内容注入到java中,那要怎么注入到xml中呢?

Z:直接用${}就可以引用了

server:
port: 8081
age: 18
size: B
content: "size: ${size},age: ${age}"

M:当配置文件需要频繁变换,怎么灵活切换呢?

Z:将其写成两个配置文件,而主配置文件只要选好要哪一个配置文件即可。

新建两个配置文件 application-dev.yml & application-prod.yml

在application.yml中指定调用哪一个配置文件:

spring:
profiles:
active:dev

调用dev后缀的配置文件。

4.注解的使用

1.@Component & @ConfigurationProperties

M:一个个属性注入太麻烦了,有没有注入对象的方法?

Z:修改配置文件为组的形式,编写pojo对象映射,再将pojo对象注入

server:
port: 8081
girl:
age: 18
size: B

pojo对象,需要@Component定义Spring管理Bean,@ConfigurationProperties指定前缀内容。

@Component注解相当于:@Service,@Controller,@Repository,并下面类纳入进spring容器中管理。这样才能被下一层@Autowired注入该对象。

@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties { private String size; private Integer age; public String getSize() {
return size;
} public void setSize(String size) {
this.size = size;
}
...
}

运行@SpringBootApplication,即可访问Controller的内容

@RestController
public class HelloController { @Autowired
private GirlProperties girlProperties; @RequestMapping(value = "/hello",method = RequestMethod.GET)
public String say(){
return girlProperties.getSize();
}
}

2.@RestController
Z:@RestController = @ResponseBody + @Controller

3.@RequestMapping
@RequestMapping可以指定多个value: @RequestMapping(value={"/say","/hi"}) 。

@RequestMapping的Get请求获取参数的方式:

方式一PathVariable:访问地址中间参数传输:

 @RequestMapping(value="/{id}/say",method = RequestMethod.GET)
public String say(@PathVariable("id") Integer id){
return "Hello Spring Boot:"+id;
}

url访问地址可以将id中间位置:http://localhost:8080/hello/233333/say

方式二RequestParam:访问地址后面传值:

@RequestMapping(value="/say",method = RequestMethod.GET)
public String say(@RequestParam("id") Integer id){
return "Hello Spring Boot:"+id;
}

url访问方式:http://localhost:8080/hello/say?id=110
添加默认值:(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) ,如何不传id,它就会默认为0。
     @RequestMapping(value="/say",method = RequestMethod.GET)也可以写成GetMapping(value="/say")的方式。

4.@Transactional

M:当我一个Service的方法里有两条sql插入操作,怎么保证其同时执行成功或者同时执行失败?

Z:在方法上面添加@Transactional注解,即说明其为同个事务。

 @Transactional
public void insertTwo(){
Girl girlA = new Girl();
girlA.setSize("A");
girlA.setAge(10);
girlRepository.save(girlA); Girl girlB = new Girl();
girlB.setSize("BBBBB");
girlB.setAge(20);
girlRepository.save(girlB);
}

M:为什么我添加之后,还是有一个成功,一个失败呢?

Z:只有在innodb引擎下事务才能工作。所以需要在数据库中执行ALTER TABLE girl ENGINE=innodb命令。

5.数据库操作

1.创建表

Z:要操作数据库,首先添加组件

  1. pom.xml添加组件

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

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: create
show-sql: true
  • ddl-auto: create:每次都重新创建数据库,数据不保存,要保存得用update
  • show-sql: true:打印sql语句。

M:为什么启动报错?

Z:需要在mysql中创建对应的数据库。

D:怎么利用SpringBoot的jpa进行自动建表呢?

Z:配置完上方的jpa之后,编写pojo对象,添加@Entity注解,标注id@Id,自增长@GeneratedValue,运行之后数据库就会自动生成对应表。ddl-auto: create配置将决定表是创建create还是更新update

@Entity
public class Girl { @Id
@GeneratedValue
private Integer id; private String size; private Integer age; public Integer getId() {
return id;
}
...
}

.JPA实现增删改查

M:怎么实现查询所有呢?

Z:新建接口,继承JpaRepository<Girl, Integer>,注入接口,直接调用JpaRepository中的CRUD方法即可

  1. 新建接口

public interface GirlRepository extends JpaRepository<Girl, Integer> {

}

调用CRUD方法

 /**
* 查询所有
* @return
*/
@GetMapping(value = "/girls")
public List<Girl> girlList() {
return girlRepository.findAll();
} /**
* 根据id查询
* @param id
* @return
*/
@GetMapping(value = "/girlById/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id) {
Optional<Girl> temp = girlRepository.findById(id);
//从返回值中获取值
return temp.get();
} /**
* 添加内容
* @param age
*/
@PostMapping(value = "/girlAdd")
public Girl girlAdd(@RequestParam("size") String size, @RequestParam("age") Integer age) {
Girl girl = new Girl();
girl.setAge(age);
girl.setSize(size);
return girlRepository.save(girl);
} /**
* 更新
*/
@PutMapping(value = "/moGirlById/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id, @RequestParam("age") Integer age,@RequestParam("size") String size) {
Girl girl = new Girl();
girl.setId(id);
girl.setAge(age);
girl.setSize(size);
return girlRepository.save(girl);
} /**
* 删除
*/
@DeleteMapping(value = "/delGirls/{id}")
public void girlDelete(@PathVariable("id") Integer id) {
Girl girl = new Girl();
girl.setId(id);
girlRepository.delete(girl);
}

M:如果某些方法在JpaRepository中不存在呢?

Z:可以自己使用扩展方法,写在接口中,调用即可。但是要求方法名要规范

public interface GirlRepository extends JpaRepository<Girl, Integer> {
//通过年龄查询
public List<Girl> findByAge(Integer age);
}
  /**
* 通过年龄查询
*/
@GetMapping(value = "/girlByAge/{age}")
public List<Girl> getListByAge(@PathVariable("age") Integer age) {
return girlRepository.findByAge(age);
}

springboot的入门的更多相关文章

  1. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  2. SpringBoot Docker入门,SpringBoot Docker安装

    SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...

  3. 01-项目简介Springboot简介入门配置项目准备

    总体课程主要分为4个阶段课程: ------------------------课程介绍------------------------ 01-项目简介Springboot简介入门配置项目准备02-M ...

  4. SPRING-BOOT系列之SpringBoot快速入门

    今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...

  5. SpringBoot快速入门01--环境搭建

    SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2  选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...

  6. SpringBoot 初入门

    SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...

  7. springBoot从入门到源码分析

    先分享一个springBoot搭建学习项目,和springboot多数据源项目的传送门:https://github.com/1057234721/springBoot 1. SpringBoot快速 ...

  8. SpringBoot基础篇-SpringBoot快速入门

    SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...

  9. Springboot快速入门篇,图文并茂

    Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...

  10. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

随机推荐

  1. charles Windows 安装

    本文参考:charles Windows 安装 在实际开发.测试中需要通过代理截取 app 的网络请求报文来快速定位问题.https 双向认证的 app 越来越多,fiddler在这方面并不好用.由于 ...

  2. [学习笔记] 下载、安装、启动 Eclipse(OEPE)

    OEPE 的全称是: Oracle Enterprise Pack for Eclipse 截止目前的最新版本是:(12.2.1.9) 下载地址:(需要在甲骨文官网注册一个账户才能下载) https: ...

  3. 在eNSP上简单的模拟企业网络场景(不同网段互连)

    额..首先你要有eNSP工具和Wireshark抓包工具,没有的话可以上网搜索一下,最好下载最新版本的,新版本中拥有更多型号的机器 这个实验我们主要模拟某公司购买了新的路由器和交换机.交换机S1连接客 ...

  4. Span复习

    Span复习 using System; namespace Span复习 { class Program { static void Main(string[] args) { //Console. ...

  5. JVM(三) 对象的创建过程

    1.对象的创建过程 1.1 . 给对象分配内存 对象的内存分配有两种方式,一种是指针碰撞另外一种是空闲列表的方式,堆是否规整由我们垃圾回收器来决定的 ,如果垃圾回收带有我们的压缩算法,那么他会规整的分 ...

  6. python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据

    当实际工作需要把excel表的数据读取出来,或者把一些统计数据写入excel表中时,一个设计丰富,文档便于寻找的模块就会显得特别的有吸引力,本文对openpyxl模块的一些常见用法做一些记录,方便工作 ...

  7. mininet安装配置

    mininet安装配置 安装mininet mininet使用 在VM中运行mininet 安装VMware,在VMware中打开下载好的mininet虚拟机映像 启动虚拟机,虚拟机的初始账号密码均为 ...

  8. 第1章 云端开发平台Salesforce CRM

    1.1云计算平台 传统软件的开发往往耗资成千上万(甚至几百万)美元,有时需要几年的专业服务帮助建立和定制应用程序,而软件的业务问题往往由于其十分复杂或成本太高而无法触及.随着Internet的革新,改 ...

  9. hdu 6562 Lovers (线段树)

    大意: 有$n$个数字串, 初始为空, 两种操作(1)把$[l,r]$范围的所有数字串首位添加数位$d$ (2)询问$[l,r]$区间和 假设添加的数为$L$, $L$位数为$H$, $L$翻转后乘上 ...

  10. 使用MD5加密字符串

    一.概念: MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值. 二 ...