目录
2、通过spring官网下载离线文件创建(spring.io)
一、几种快速创建springboot工程的方法
1、通过idea创建(需要联网)
红框为要更改的地方
2、通过spring官网下载离线文件创建(spring.io)
得到模块的压缩包,解压后再idea中导入即可
3、阿里云创建(start.aliyun.com)
选择相应的服务
4、手动制作(需提前导入jar包)
就是仿照前面的工程创建的,创建的模块比较清爽
创建一个maven工程pom导入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
主函数中
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
5、隐藏无用的文件
二、springboot简介及快速开发解析
SpringBoot是由Pivotal团队提供的全新的框架,其目的是用来简化spring应用的初始搭建以及开发过程。优点如下
- 起步依赖(简化依赖配置)
- 自动配置(简化常用工程的相关配置)
- 辅助功能(内置服务器)
1、starter解析
SpringBoot中常见的项目名称,定义里当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
- 开发SpringBoot程序需要导入坐标是通常导入对应的starter
- 每个不同的starter根据功能的不同通常包含多个依赖坐标
- 使用starter可以实现快速配置的效果,达到简化配置的目的
2、引导类解析
即application类,其中的SpringApplication.run(),其实就是加载SpringBoot自动生成的配置类。加载spring容器。
3、内嵌tomcat解析
- 内嵌的Tomcat服务器是SpringBoot辅助功能之一
- 内嵌Tomcat工作原理是江Tomcat服务器作为对象运行,并将该对像交给Spring容器进行管理
- 变更内嵌服务器的思想是去除 现有的服务器,添加全新的服务器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
通过<exclusions></exclusions>排除服务器后,再添加自己的服务器
三、REST风格开发简介
-
隐藏资源的访问行为,无法通过地址得知对资源是何种操作(主要) - 是一种约定方式并不是规范
- 描述模块的名称通常使用复数
- 简化输写
1、书写方式
2、具体方法
1、无请求参数
@RequstMapping(value = "/users" , method = RequestMethod.[GET,PUST,PUT,...])
@ResponseBody
public String a(){}
2、有请求参数
@RequstMapping(value = "/users/{id}" , method = RequestMethod.[GET,PUST,PUT,...])
@ResponseBody
public String a(@PathVariable Integer id){}
3、RESTful快速开发
对上面的的代码进一步简化
//@GetMapping,@PostMapping,@PutMapping ..
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){}
四、SpringBoot的相关配置(基础)
1、小技巧———复制模块
- 创建一个模板,删除其中的无关文件,保留src目录和pom.xml文件
- 修改pom.xml文件中的atifactId与新工程/模块名相同(一定)
- 删除name标签和description标签
2、基础属性配置
三种文件格式,.properties,.yaml,.yml(主流)。
调用的优先级为.properties>.yml>.yaml。
1、.properties文件修改
在resource目录下的application.properties文件中进行修改,如
server. port = 8081
修改服务器端口
logging .level.root=debug
设置日志的级别
采用键值对的格式,不能随意的进行配置,与你所使用的技术有关(如web等)
2、 .yeml和.yml文件修改
语法规则
- 大小写敏感
- 属性名冒号后面与数据之间有空格
- 用缩进表示层级关系(空格)
示例
3、yml数据的读取
- 使用@value("${属性名}")来普通读取
//读取单个数据
@Value("${属性名}")
private String a;
//读取数组数据
@Value("%{属性名[1]}")
private String a;
//读取有层级关系的数据
@Value("${一级属性名.二级属性名...}")
private String a;
- yml内引用数据
baseDri: c:\win10
tempDri: ${baseDri}\temp如果用双引号括起来则转义字符有效
- 获取全部数据(Environment)
@Autowired
private Environment env;
System.out.println(env.getProperty("属性名"));
- 自定义对象封装指定数据
datasource:
class_name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:''localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
@Component //生成bean
//前缀(父属性名)
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource{
private String class_name;//变量名需与上面一样
private String url;
private String username;
private String password;
}
注入就能使用
五、整合第三方技术
1、整合Junit
在创建一个boot模块时会自动导入Junit的相关starter
- 在测试类的上加上@SpringBootTest注解
- 将要测试的对象自动装配
- @Test
如果测试类不在引导类所在包或子包类,则spring就找不到Junit所对应的启动包得加上class
@SpringBootTest(classes = Springboot05JUnitApplication.class)
class JUnitApplication(){}
2、整合MyBatis
在创建boot工程时勾选mybatis和数据库驱动,自动导入相关的starter
在.yml中配置相关的属性就行,不用配置其他的东西
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/xiangjiang?serverTimezone=UTC username: root password: 123456如果是自己写的xml映射,则要配置映射文件路径
mybatis: mapper-locations: classpath:dao/*.xml
3、整合MyBatis-Plus
MyBatis-Plus是国人基于自己的开发习惯开发的技术
可以像整合MyBatis一样创建工程(得是阿里云的网站)但版本较低。
也可以用坐标导入对应的starter(mvnrepository.com)
<dependency>
<groupId>com.baomidou</groupId>
<artifacrId>mybati-plus-boot-starter</artifacrId>
<version>3.4.3<version>
</dependency
使用BaseMapper中定义了一些基本的sql操作如增删改查等
@Mapper public interface BookMapper extends BaseMapper<Book> { }bookMapper.selectById(1);
yml的相关配置
mybatis-plus: global-config: db-config: id-type: auto #表示主键自动增长 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启日志
4、整合Druid
用坐标导入对应的starter(mvnrepository.com)
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
在yml中配置如下
spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/xiaojiang?serverTimezone=UTC username: root password: 123456
六、ssmp小项目
1、lombok
一个java类库,提供里一组注解,简化pojo实体类的开发
坐标
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
一些注解
@Getter 生成get方法
@Setter 生成set方法
@Date 生成全部方法tostring等
2、mp的分页
需添加分页相关的拦截器,原理就是在sql的末尾拼接limit
@Configuration public class MPConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor plusInterceptor = new MybatisPlusInterceptor(); //添加相应的拦截器 plusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return plusInterceptor; } }
具体使用
void contextLoads() { IPage bookPage = new Page(1,1); bookMapper.selectPage(bookPage,null); }
3、mp的条件查询
几乎所有的查询都支持
String type = "计算机理论"; //使用lambda更方便 //或QueryWrapper<Book> qw = new QueryWrapper<>(); LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>(); lqw.eq(type!=null,Book::getType,type); //相当于SELECT id,type,name,description FROM book WHERE type='计算机理论' bookMapper.selectList(lqw);
4、使用mp写业务层代码
接口类
IService接口中定义了一些常用的业务层接口,需要一个实体类
public interface BookService extends IService<Book> { }
实现类
ServiceImpl中定义了IService的实现类,需要dao的接口类和实体类
public class BookServiceImpl extends ServiceImpl<BookMapper,Book> implements BookService