package com.example.controller;
//@ResponseBody 所以一个注解即可,RestController
/*
* 流程:
* 写一个***Controller控制器,专门用来处理请求(RestController)
* 而run专门用来处理"/hello"请求。
* 最终返回的数据,会写给浏览器
*
* */
@RestController // 包含controller 和ResponseBody
public class HelloController {
/*
* 要给浏览器返回字符串,
* SpringMVC注解:@RequestMapping来映射请求,
* 希望浏览器给我们发送hello请求
* 然后我们处理,处理完了以后,给浏览器返回字符串"hello spring Boot"
*
* 由于我们要给浏览器返回字符串,所以要加入:@ResponseBody。
* 由于HelloController这个类,要处理很多请求,都要给浏览器返回字符串
* 所以把@ResponseBody写在类上面:
* 代表类上面每一个方法,返回的数据,是直接写给浏览器的,而不是调转到某个页面。
*
* */
// request请求,mapping映射
@RequestMapping("/hello")
public String run(){
return "Springboot run...";
}
}
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
// 前两步骤导入parent和web依赖,第三步就可以写程序了
/*
* 注解@SpringBootApplication:
* 告诉springboot这是一个springboot应用
* 那么这就是一个主程序类,相当于所有程序的入口
*
*主程序下面的包及其下面的所有子包,都会默认扫描进来
* 所以连包扫描都不用配置,Controller就会进来。
*
* */
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//springboot应用跑起来,把主类加载进来。
//调用run会返回:IOC容器,容器包含了当前应用的所有组件。
//ConfigurableApplicationContext run =
SpringApplication.run(Springboot01HelloworldApplication.class);
//2.查看容器中的组件的名字
//String[] beanDefinitionNames = run.getBeanDefinitionNames();
// 所以说:Springboot帮我们配置好了,所有web开发的场景
}
}
1.开发springboot 程序需要导入坐标时,通常导入对应的starter
2.每个不同的starter根据功能不同,通常包含多个依赖坐标
3.使用starter可以实现快速配置的效果,达到简化配置的目的
starter是:包含了若干个坐标定义的pom文件,其中包含若干个依赖信息。从而达到开始配置
parent定义了许多版本谁在用?
直接在项目的pom文件中,写入使用的依赖,版本号在parent里面已经定义好了。
springBoot的引导类是boot工程的执行入口,运行main方法就可以启动项目
springBoot工程运行后初始化spring容器,扫描引导类所在包加载bean
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
// 前两步骤导入parent和web依赖,第三步就可以写程序了
/*
* 注解@SpringBootApplication:
* 告诉springboot这是一个springboot应用
* 那么这就是一个主程序类,相当于所有程序的入口
*
*主程序下面的包及其下面的所有子包,都会默认扫描进来
* 所以连包扫描都不用配置,Controller就会进来。
*
* */
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//springboot应用跑起来,把主类加载进来。
//调用run会返回:IOC容器,容器包含了当前应用的所有组件。
//ConfigurableApplicationContext run =
SpringApplication.run(Springboot01HelloworldApplication.class);
//2.查看容器中的组件的名字
//String[] beanDefinitionNames = run.getBeanDefinitionNames();
// 所以说:Springboot帮我们配置好了,所有web开发的场景
}
}
启动起来的服务器,之所以能用,就是因为内嵌了Tomcat。
Tomcat是用java写的,所以是靠对象运行,那么把这个对象交个spring管理。所以将Tomcat执行过程抽取出来,变成对象,交给spring容器去管理。
从而spring容器中有一个Tomcat对象,所以说所有的代码需要在Tomcat对象中运行,
REST(Representational State Transfer),表现形式状态转换。说白了就是:【访问网络格式】。
使用RESTful的形式进行开发,就是再说访问的格式是:REST风格进行的开发
优点:
隐藏资源的访问行为,无法通过地址得知对资源是何种操作
书写简化
PS:描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如Users、Books
@PathVariable:用来接受路径变量
当参数很少,只有1个,就采用@PathVariable接受请求路径变量,通常用来传递id值。
比如前端传来一个id,根据id来删除。
@RequestBody:用来接受JSON数据,【请求体的参数】
发送请求参数超过1个,以JSON格式为主,@RequestBody应用较广。
比如前端传来一个实体类,进行新增操作。
@RequestParam用于接手url地址传参或表单传参。用于非JSON格式。目前应用较少
比如分页查询,在controller默认当前页数为1,展示10条数据。
官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties
springboot 中导入对应的starter后,提供对应配置属性
只需要写关键字即可,就会有相应的提示
yml格式是主流
属性提示消息消失的方案:
之所以能提供提示是因为:SpringBoot在idea环境下提供的功能失效了,而提示功能是idea提供的。
指定SpringBoot配置文件
Setting → Project Structure → Facets
选中对应项目/工程
Customize Spring Boot
选择配置文件
大小写敏感
属性层级关系使用多行描述,每行结尾使用冒号结束
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
# 表示注释
核心规则:数据前面要加空格与冒号隔开
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
//单一格式
@Value("${name}")
private String name1;
// 数组
@Value("${subject[1]}")
private String name2;
//对象格式
@Value("${user.addres}")
private String name3;
//对象数组格式
@Value("${users[1].name}")
private String name4;
//创建env对象,会对yml所有数据进行封装
@Autowired
private Environment evn;
1、定义数据模型封装yaml文件对应的数据
2、定义为spring管控的bean @Component
而这个模型要加载的数据在yml配置文件中,
配置文件是给boot用的。其实springboot还是spring程序,
boot是为了加速spring程序开发
3、指定加载的数据。配置属性 @configurationProperties(“数据名字”)
配置文件中数据很多,如何只加载一部分呢?
添加注解 配置属性 Properties
@Component
@Data
@ConfigurationProperties("datasource")
public class MyDatasource {
//要和yml的属性一模一样: drive--drive
private String drive;
private String url;
private String username;
private String password;
}
------yml:----------
datasource:
drive: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot
username: root
password: root
//局部读取数据
@Autowired
private MyDatasource mydatasource;
System.out.println(mydatasource.toString());
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.3version>
dependency>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/test
数据库:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) DEFAULT NULL,
`password` VARCHAR(50) DEFAULT NULL,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
1 定义实体类:
@Data
public class User {
private Integer id;
private String username;
private String password;
private String name;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
接口: 只需要继承Iservice接口即可
package com.itheima.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.domain.User;
public interface UserService extends IService<User> {
}
-----impl:继承接口(Mapper,pojo实体类) implements 接口
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
}
@RestController
@RequestMapping
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/")
public List<User> saveAll(){
List<User> list = userService.list();
return list;
}
}