Spring Boot
1.快速创建项目
1)idea创建project
Spring Initializr:
name:项目名
location:项目地址
type:Maven
Group:包名
Artifact:项目名
Packaging:Jar
Package name:默认创建一个启动类,放在此包下
2)选择需要的依赖和springboot版本
spring工程版本:默认最新版本
点击finish,第一次创建时会现在大量依赖。
删除无用文件:mvnw、mvnw.cmd、.mvn
3)将SE工程改为web工程
pom.xml:修改为spring-boot-starter-web。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
刷新Maven。
4)运行简单程序
src->main->java->找到application启动程序目录:
在启动程序目录下创建包和class:controller.testController.java
package com.example.test.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class testController {
@GetMapping("/test")
public String test(){
return "hello SpringBoot !";
}
}
浏览器访问http://localhost:8080/test。
2.SpringBoot的目录结构
1.pom.xml
1)指定了一个父工程:指定当前项目为springboot,帮我们声明了starter依赖的版本。
2)项目的元数据:包名、项目名、版本号。
3)制定了properties信息:java版本号
4)导入了依赖:默认情况下导入spring-boot-starter和pring-boot-starter-test。
5)插件:spring-boot-maven-plugin
2.src目录
--main
--java
--包名
--启动类.java #将controller类放在启动类的子包中或同级包中。
--resourses
--static #静态文件
--templates #模板页面
--application.properties #spring提供的唯一配置文件
3.SpringBoot项目的三种启动方式
运行启动类的main方法
采用Maven命令运行spring工程
Terminal:mvn sping-boot:run
采用jar包运行
1)将项目打包成jar文件
2)通过java-jar jar文件名启动项目
4.SpringBoot中常用的注解
@Configuration和@Bean
1)Configuration相当于beans标签,代表的类是一个配置类
2)Bean相当于bean标签:
id=”方法名或注解中的name属性(优先级更高)“
class=“方法的返回结果”
<dependency> //添加一个依赖
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
创建实体对象:
@NoArgsConstructor
@Data
@AllArgsConstructor
public class user {
private int id;
private String name;
}
创建配置对象:
@Configuration //代表当前是一个配置类,相当于beans标签
public class userConfig {
@Bean //创建一个实例,发到spring容器中。也可以是@Bean(name = "user1),此时引用该类时使用user1。
public user User(){
user User = new user();
User.setId(1);
User.setName("hh");
return User;
}
}
/*
相当于:
<beans>
<bean id="User" class="com/example/springbootlearning/entity/user"/>
</bean>
*/
使用实体对象:
@Autowired
private user User;
//或者:@Resource(name = "user1")
// private user User;
@GetMapping("/user")
public user User(){
return User;
}
@SpringBootApplication
@SpringBootApplication是一个组合注解,包括:
1)@SpringBootConfiguration
就是一个configuration注解,代表启动类就是一个配置类。
2)@EnableAutoConfiguration
实现自动装配,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类,加载MEAT-INF/spring.factories配置类(已经开启的),
通过SpringFactoriesLoader类中的load方法以for循环的方式逐个加载。
3)@ComponentScan
相当于<context:component-scan basePackage="包名“/>,帮助扫描注解。
5.SpringBoot常用配置
SpringBoot配置文件格式
支持properties和yml,推荐使用yml格式。
1)yml文件会根据换行和缩进管理配置文件的位置。
2)yml文件相比properties文件更轻量级。
3)填写value时:后面一定要加空格。
2.多环境配置
1)创建多个配置文件,方式为application-环境名.yml
application-dev和application-prov:
server:
#项目端口
port: 8080
#项目路径
servlet:
context-path: /
server:
#项目端口
port: 8081
#项目路径
servlet:
context-path: /boot
2)选择要使用的配置文件
创建application.yml文件:
spring:
profiles:
active: 环境名
引入外部配置信息
1)引入单个信息:
定义配置信息:picPath: D:\xxx
引入配置信息:
public class controller{
@Value("${picPath}")
private String picPath;
@GetMapping("/picPath")
public String picPath(){
return picPath;
}
}
2)引入一组配置信息
定义配置信息:
tests:
a: 12
b: 15
c: 16
以注入容器的方式引用信息:
@ConfigurationProperties(prefix = "tests") //prefix的值为引用信息的名字
@Component
@Data
public class testsProterties {
private String a;
private String b;
private String c;
}
public class controller{
@Autowired
private testsProterties testsproterties;
@GetMapping("/getTests")
public testsProterties getTest(){
return testsproterties;
}
}
Spring热加载
1)在pom.xml中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2)在setting中修改配置信息
进入compiler,勾选Build project automatically
修改项目后,点击Build->Build Project即实现热加载。
6.xml方式整合Mybatis
1.导入依赖
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid连接-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- mybatis依赖-->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
编写配置文件
1)准备实体类
在MySQL建立数据库。
idea连接数据库。
利用数据库自动生成表的实体类:在database中选中对应的表,右键——>Scripted Extensions——>
Generate POJOs.groovy——>选择实体类所在文件夹——>修改实体类的包名和注解。
package com.example.springbootlearning.entity;
import lombok.Data;
@Data
public class Air {
private long id;
private long distinctId;
private long pm2_5;
private java.sql.Date time;
}
2)创建mapper接口
package com.example.springbootlearning.mapper;
import com.example.springbootlearning.entity.Air;
import java.util.List;
public interface AirMapper {
List<Air> findAll();
}
在启动类中添加注解,扫描mapper接口所在的包:
@SpringBootApplication
@MapperScan(basePackages = "com.example.springbootlearning.mapper")
public class SpringBootLearningApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootLearningApplication.class, args);
}
}
3)准备映射文件
resours——>mapper——>AirMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springbootlearning.mapper.AirMapper"> <!--接口的全路径-->
<!-- 根据接口内的抽象方法编写SQL语句-->
<!-- List<Air> findAll()-->
<select id="findAll" resultType="Air">
select * from air
</select>
</mapper>
4)配置application-dev.yml文件:
# mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml #扫描所有的mapper映射文件。
type-aliases-package: com.example.springbootlearning.entity #扫描实体类,别名扫描
configuration:
map-underscore-to-camel-case: true #数据库字段名带_,而实体类名为大写,所以设置驼峰映射。
5)连接数据库信息
#连接数据库信息
spring:
datasource:
url: jdbc:mysql:///air
username: root #用户名
password: root #密码
driver-class-name: com.mysql.cj.jdbc.Driver #驱动名
type: com.alibaba.druid.pool.DruidDataSource #数据类型
测试
1)在接口位置右键go to——>test——>勾选要测试的方法名,点击OK,即可自动创建测试类:
class AirMapperTest extends SpringBootLearningApplicationTests { //继承SpringBootLearningApplicationTests类可实现测试功能,要将该类设为public。
@Autowired
private AirMapper airMapper; //将接口注入进来。
@Test
void findAll() { //运行此方法查看查询结果。
List<Air> list = airMapper.findAll();
for (Air air : list){
System.out.println(air);
}
}
}
7.注解方式整合mybatis
创建实体类的mapper接口
public interface DistrictMapper {
List<District> findAll();
}
添加mybatis注解
增删改查分别对应注解:@Insert, @Delete, @Update, @Select
同样需要在启动类添加@MapperScan注解
在yml配置文件中只需添加驼峰映射即可:
mybatis:
# mapper-locations: classpath:mapper/*.xml #扫描所有的mapper映射文件。
# type-aliases-package: com.example.springbootlearning.entity #扫描实体类,别名扫描————————注解方式不需要添加文件映射和别名扫描。
configuration:
map-underscore-to-camel-case: true #数据库字段名带_,而实体类名为大写,所以设置驼峰映射。
public interface DistrictMapper { //在mapper接口中插入注解,直接编写SQL语句。
@Select("select * from distirct")
List<District> findAll();
@Select("select * from distirct where id = #{id}")
District findOneById(@Param("id") Integer id);
@Insert("insert into district values(#{id},#{name})")
int add(@Param("id") Integer id, @Param("name") String name);
}
测试,看到执行的SQL语句
logging:
level:
com.example.springbootlearning.mapper: DEBUG #使接口执行时在控制台打印所执行的SQL语句
测试方法与xml方式相同:
class DistrictMapperTest extends SpringBootLearningApplicationTests {
@Autowired
private DistrictMapper districtMapper;
@Test
void findAll() {
List<District> list = districtMapper.findAll();
for (District district : list){
System.out.println(district);
}
}
@Test
void findOneById() {
District district = districtMapper.findOneById(1);
System.out.println(district);
}
@Test
void add() {
int add = districtMapper.add(4,"De");
System.out.println(add);
}
}
8.SpringBoot整合分页助手
导入依赖
<!--导入分页助手pageHelper-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
测试使用
class DistrictMapperTest extends SpringBootLearningApplicationTests {
@Autowired
private DistrictMapper districtMapper;
@Test
void findAllByPage(){ //测试分页助手
// 1.执行分页
PageHelper.startPage(1,3);
// 2.执行查询
List<District> list = districtMapper.findAll();
// 3.封装PageInfo类
PageInfo<District> pageInfo = new PageInfo<>(list);
// 4.输出
for (District district : pageInfo.getList()) {
System.out.println(district);
}
}
}