spirngboot 2小时 光速入门
慕课学习地址 : https://www.imooc.com/video/13590
由于很久之前学过一次,但没能坚持到底,本次只挑重点做笔记,争取2小时内快速温习一遍Springboot 1.X.X
一 helloworld 无脑创建一个springboot项目 组件只选web 其余随便填
/** * hello world * 创建一个springboot项目 选择web组件 * 新建这个Controller即可访问 * http://localhost:8080/hello */ @RestController public class HelloController { @RequestMapping(value = "/hello",method = RequestMethod.GET) public String say(){ return "Hello Spring Boot!"; } }
二 配置文件 D:\Projects\idea64\girl\src\main\resources\application.yml
(此处用了yml格式配置文件,属于property的懒人版)
1 基本款
server: port: 80 context-path: /girl
2 配置变量并读取
cupSize: B age: 18
@Value("${cupSize}") private String cupSize; @Value("${age}") private Integer age; @RequestMapping(value = "/cupSize",method = RequestMethod.GET) public String cupSize(){ return "cupSize : " + cupSize + " age:"+age; }
进阶读取参数1
另外在配置中仍可以使用先前的配置例如
cupSize: B age: 18 AllConf: "cupSize : ${cupSize} , age : ${age}"
进阶读取参数2
用一个pojo保存和自动装配所有参数
新建class
GirlPropertiey 包含private的参数以及get set toString等方法
在GirlPropertiey类之前加三个注解
@Component @PropertySource("application.yml") @ConfigurationProperties(prefix = "girl")
意思分别是
@Component 可以被以下方法注入
@Autowired private GirlPropertiey girlPropertiey;
@PropertySource("application.yml") 指定配置文件目录 路径
@ConfigurationProperties(prefix = "girl") 设置为配置文件的pojo 并指定了前缀
完成后即可用以下方法调用
@Autowired private GirlPropertiey girlPropertiey; @RequestMapping(value = "/all",method = RequestMethod.GET) public String all(){ return girlPropertiey.toString(); }
进阶读取参数3
多个配置文件 加载与切换
如下写法即使用后缀为prod作为默认配置
application.yml
spring: profiles: active: prod
application-dev.yml
server: port: 80 girl: cupSize: B age: 18
application-prod.yml
server: port: 80 girl: cupSize: F age: 21
多配置文件的使用场景 : 若在正式环境使用jar方式启动项目,可以使用--去配置使用哪个配置文件 例如
java -jar girl-0.0.1-SHAPSHOT.jar --spring.profiles.active=dev
三 Controller 的使用
传统SpringMVC 前后端一起开发
在Controller中使用@Controller处理请求
如果要返回值的话需要注解@ResponseBody
如果需要跳转到指定页面需要注解@RequestMapping 然后配合 return "index.jsp
而现在主流的开发模式已使用前后端分离的方式
即后端写代码的时候并不需要知道前端的具体信息如文件命名路径等,只需要知道需求即可
即前端使用ajax调用后端数据,然后前端判断是否挑战
后端只负责写rest接口提供数据请求服务
SpringMVC4中的@RestController 等价于 @Controller + @ResponseBody
(此处存在一个小坑 如果使用了传统的@Controller 需要在pom中搭配以下模板)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
关于传参
各种传参方法demo
//URL 参数 搭配 PathVariable 获取的 demo 访问方法 http://host:port/value/666 @RequestMapping(value = "/value1/{id}",method = RequestMethod.GET) public String getValue1(@PathVariable("id") Integer id){ return "id : " + id; } //此为主流方法 //GET/POST 参数 搭配 RequestParam 获取的 demo 访问方法 http://host:port/value?id=666 @RequestMapping(value = "/value2",method = RequestMethod.GET) public String getValue2(@RequestParam("id") Integer id){ return "id : " + id; } // 上文方法进阶版 支持非必传参数和默认值设定 // value 为传入的参数名 required 是否必传 defaultValue默认值(传入时必须是String) RequestMapping(value = "/value3",method = RequestMethod.GET) public String getValue3(@RequestParam(value="id",required = false,defaultValue = "0") Integer id){ return "id : " + id; }
除了RestController 另外的组合注解还有
@GetMapping("value3")
等价于@GetMapping(value = "/value3")
等价于@RequestMapping(value = "/value3",method = RequestMethod.GET)
@PostMapping @PutMapping 同上
四 从删库到跑路 。。。。数据库操作 => JPA方式
先添加maven依赖 改pom.xml
<!-- 添加Mysql和JPA--> <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 中 添加配置datasource
spring: profiles: active: prod datasource: url: jdbc:mysql://localhost:3306/dbgirl username: root password: root driver-class-name: com.mysql.jdbc.Driver jpa: hibernate: ddl-auto: create show-sql: true
ddl-auto: create 为自动建表 (每次都执行都会删除旧表 创建新的空表)
ddl-auto: update 就是字面意思 没有就创建 有就更新(推荐用这个)
ddl-auto: create-drop 应用停止运行就会删除表 应用启动就会新建空的表
ddl-auto:·none 什么都不做 等于是停用 ddl-auto
ddl-auto: validate 只负责验证 表结构与程序pojo是否一致,验证一致就正常执行,不一致就报错
show-sql: true 为控制台输出sql
配置成功后,创建接口类 无需内容,只需要继承JpaRepository
public interface GirlRepository extends JpaRepository<Girl,Integer>{}
然后再Controller中自动装载 之后使用findAll就可以调用了
@Autowired private GirlRepository girlRepository; /** * 返回girl表所有数据 */ @GetMapping("/girls") public List<Girl> girlList(){ return girlRepository.findAll(); }
运行成功后会返回所有数据库内容
数据表
页面返回值
POST插入一条新数据
/** * POST方式添加一条数据 */ @PostMapping("/add") public Girl girlAdd(@RequestParam("cupSize") String cupSize ,@RequestParam("age")Integer age){ return girlRepository.save(new Girl(cupSize,age)); }
Postman测试结果
数据库改变
其余需求是通过一个url的三种请求方式请求实现不同效果 如下图
实现代码如下
//查 @GetMapping("/girls/{id}") public Girl queryGirl(@PathVariable("id")Integer id){ return girlRepository.findOne(id); } //增 @PutMapping("/girls/{id}") public Girl putGirl(@PathVariable("id")Integer id,@RequestParam("cupSize") String cupSize ,@RequestParam("age")Integer age){ return girlRepository.save(new Girl(id,cupSize,age)); } //删 @DeleteMapping("/girls/{id}") public void delGirl(@PathVariable("id")Integer id){ girlRepository.delete(id); }
其中包含一个小坑
按照http请求的规定 put方法请求时,postman 数据类型必须选第二种 x-www-form-urlenoded
另外进阶版本的查询 即 通过非主键字段查询 例子
在刚才的GirlRepository接口中加入以下代码
public List<Girl> findByAge(Integer age);//格式和命名都必须按照规定
//另外进阶版本的查询 即 通过非主键字段查询 例子 @GetMapping("/girls/age{age}") public List<Girl> getGirlsByAge (@PathVariable("age")Integer age){ return girlRepository.findByAge(age); }