SpringBoot快速入门
SpringBoot快速配置部署:
1)通过IDEA 中Spring
- 创建新的项目/模块 Spring Initializr
- 默认通过Spring官网创建SpringBoot项目
- 编写Controller
2) 在线创建:
-
- Spring官网中quick start your project
- 使用阿里云,自定义URL:阿里云
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2mFvU3hz-1681899499933)(/Users/tanshilin/Library/Application%20Support/typora-user-images/image-20230410171941081.png)]
3) 没有网络创建:
- 创建普通Maven工程
- 继承Spring-boot-starter-parent Maven父类启动starter的继承
- 添加依赖Spring-boot-starter-web
- 制作引导类Application
SpringBoot中的依赖:
parent
-
- 开发SpringBoot程序要继承spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果
starter
- 启动需要的依赖管理
引导类
- @SpringBootApplication注解
- 引导类时Boot工程的执行入口,运行main方法可以启动项目
- SpringBoot工程运行后初始化Spring容器,扫描引导类所在包目录,加载所有目录下配置的Bean
内嵌Tomcat- Server服务器配置
- 默认使用tomcat
- jetty
SpringBoot配置
三种配置方法:
- properties
- YML (主流推荐)
- YAML
配置文件的加载顺序:
Properties > YML > YAML 加载顺序
*配置自动提示消失配置: * 通过模块中facets配置Spring配置加载文件,其中设置添加配置文件更改为配置加载文件。
YAML语法规则:
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 缩进表示层级关系,属性名冒号后面 : 与数据间添加空格
- “-” 表示单个模块的划分
- “#”表示注释
YAML中数据读取
-
1 使用@Value注解,结合SpEL表达式获取数据
- ${一级属性名.二级属性名}
- 使用"[ ]"获取数组中保存属性
- 通过字符串包裹的 数据表达式 “” 其中转义字符可以经过解析
-
-
使用 Environment对象封装全部配置信息
-
使用@Autowireed自动配置数据到Environment对象中
-
需要获取数据时,enviroment调用getProperty()获取数据
-
-
-
- 引用对象封装数据:
-
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的Bean,否则无法进行属性注入
-
- 引用对象封装数据:
SSM整合
需要掌握,如何整合技术
整合JUnit
1. 整合的使用*@SpringBootTest*表示当前为测试类
2. SpringBootTest测试类运行时,会优先在本地目录中查找@SpringBootConfiguration即SpringBoot配置类,其中@SpringBootApplication引导类注解同样包含配置类
3. 若本地目录中不存在配置类,使用classes = XXX.class 指定引导类,进行加载,或者也可以配置@SpringBootConfiguration配置类
整合Mybatis
1. 选择使用Mybatis-Framworks技术集
2.设置数据源与映射配置 DataSource等
3. 数据库SQL映射需要添加@Mapper被容器识别到
配置识别:
- 1,MySql8.X驱动强制要求设置时区
- 修改URL,添加ServerTimezone设定
- 修改MySql数据库配置
-
- 驱动类过时时,提醒更换为com.mysql.cj.jdbc.Driver
整合Mybatis-Plus
-
-
手工添加Mybatis-Plus对应的starter
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
-
数据层接口使用BaseMapper简化开发
-
MP的调试日志
-
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
整合Druid
-
-
整合Druid需要导入Druid对应的starter
-
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency>
-
根据Druid提供的配置方式进行配置
-
SSMP整合案例
数据层
-
配置Mybatis中的Page分页
-
使用IPage封装分页数据
-
IPage page = new Page(1, 5);
-
分页操作依赖MyBatis-Plus分页拦截器实现功能
-
@Configuration public class MPConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ //定义拦截器容器 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //添加内部拦截器 //添加 分页拦截器 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }
-
借助MyBatisPlus日志查阅执行SQL语句
bookDao.selectPage(page, null);
之后返回的IPage对象,依旧是原本传入的IPage对象,IPage原本存在属性,可以高度复用,调用出IPage封装的5个数据
@Test void testGetPage(){ IPage page = new Page(2,5); bookDao.selectPage(page, null); System.out.println(page.getCurrent()); //当前页码值 System.out.println(page.getSize()); //每页显示数 System.out.println(page.getTotal()); //数据总量 System.out.println(page.getPages()); //总页数 System.out.println(page.getRecords()); //详细数据 }
-
-
按条件查询
-
-
使用QueeryWrapper对象封装查询条件
-
@Test void selectByConditionTest(){ QueryWrapper<Book> wrapper = new QueryWrapper<Book>(); //wrapper设置条件匹配,like匹配 wrapper.like("name", "spring"); List<Book> books = bookDao.selectList(wrapper); System.out.println(books); } }
-
推荐使用LambdaQueryWrapper对象
-
@Test void selectByConditionTest(){ /*QueryWrapper<Book> wrapper = new QueryWrapper<Book>(); //wrapper设置条件匹配,like匹配 wrapper.like("name", "spring");*/ String name = "spring"; //设置为name变量 LambdaQueryWrapper<Book> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.like(name != null, Book::getName, name); //首先检测name条件是否为null List<Book> books = bookDao.selectList(lambdaQueryWrapper); System.out.println(books); }
-
所以查询操作封装成方法调用
-
查询条件支持动态条件拼装
-
-
业务层 Service
使用Mybatis-Plus快速开发
-
-
使用通用接口( IService )快速开发Service
-
public interface IBookService extends IService<Book> { //添加非通用操作API接口 }
-
-
使用通用实现类( ServiceImpl <M,T> )快速开发ServiceImpl
-
业务层接口实现类快速开发,关注继承的类需要传入两个泛型,一个是数据层接口,另一个是实体类
-
@Service public class IbookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService { @Autowired private BookDao bookDao; //添加非通用操作的API }
-
-
可以在通用接口基础上做功能重载或功能追加
-
注意重载时不需要覆盖原始操作,避免原始提供的功能丢失
-
表现层开发
- 表现层开发如下
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private IBookService iBookService;
//查询所有映射
@GetMapping
public List<Book> listAll(){
return iBookService.list();
}
//据id查询
@GetMapping("{id}")
public Book listById(@PathVariable Integer id){
return iBookService.getById(id);
}
//分页查询
@GetMapping("{currentPage}/{pageSize}")
public IPage<Book> listByPage(@PathVariable Integer currentPage, @PathVariable Integer pageSize){
return iBookService.getPage(currentPage, pageSize);
}
//添加
@PostMapping
public Boolean saveBook(@RequestBody Book book){
return iBookService.save(book) ;
}
//更新
@PutMapping
public Boolean updateBook(@RequestBody Book book){
return iBookService.update(book, null);
}
//删除
@DeleteMapping("{id}")
public Boolean removeBook(@PathVariable Integer id){
return iBookService.removeById(id);
}
}
总结
-
- 其中Restful制作表现层接口
- Get : 请求数据
- Post :新增
- Delete : 删除
- Put : 更新
- 接收参数:
- 实体数据(封装在请求体中) : @RequestBody
- 路径变量(URL) : @PathVariable
- 其中Restful制作表现层接口
表现层消息的一致性
-
设计统一的返回值结果类型便于前端开发读取数据
-
返回值结果类型可以根据需求自行设定,没有固定格式
-
返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议