1、什么是springboot
springboot属于spring的一个子项目,可以说是基于spring,主要是为了简化配置而诞生的一个解决方案框架,它可以利用引入starter而引入一组starter,从而简化了坐标的引入,同时简化配置使我们能更快速的专注单体程序(微服务)本身的开发。
2、springboot和spring及springCloud什么关系
简单点可以说 springboot基于spring,而springCloud属于微服务治理,springCloud则又是基于springboot
3、初识springboot案例
请参考 关于文中 :关于SpringBoot数据源的引入及第三方组件使用
4、springBoot自动配置类流程
springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中,然后通过yml 属性配置文件进行属性注入。
5、属性注入(使用到的依赖 参考下文引入的相关依赖)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.0.Final</version>
</dependency>
5.1) 属性校验需要使用到校验器(依赖包)
5.2) 需要在对应的类上增加 @Validated 属性上则科室使用 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.3) 如果是(如:把B类作为A类的属性)内部类,或者外部类。则需要在属性上增加增加 @Valid ,并在内部属性、或者外部类 增加对应条控制 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.4) 从配置文件yaml中属性绑定可以使用@ConfigurationProperties(jiac.name) 用于类上或者 @Value(“${jiac.age}”) 用于属性上,需要注意的是 @Value 不能用于从配置文件yaml中绑定复杂的数据类型
6、关于yaml中profile的用法
6.1)可以在yaml中使用 spring.peofiles.activ=test 启用
6.2)可以在主方法入口处通过参数配置 如 -Dspring.profiles.active=pro , -Dacme.enabled=false(用于覆盖配置文件中的属性)
7、springboot自动配置大体流程
7.1)springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中。然后我们开发人员在开发程序的时候 想使用哪个配置类,就可以在yaml 中进行相关的属性配置,就可以是直接使用某个配置类等等。
7.2)关于注解的说明
7.2.1) @SpringBootConfiguration 把启动类作为配置类
7.2.2) @EnableAutoConfiguration --开启自动配置类类
7.2.2.1) @AutoConfigurationPackage --自动配置包
7.2.2.2) @Import(AutoConfigurationImportSelector.class) --引入自动配置类选择器(根据引入的starter 通过@import筛选出对应的配置类,创建对应的bean,并注册到Ioc容器之中)
8、关于SpringBoot数据源的引入及第三方组件使用
8.1 使用数据源(DataSource)
8.2 使用数据库链接驱动(mysql)
8.3 使用第三方数据源组件
8.4 使用日志组件
如引入如下坐标即可使用(具体参见坐标注释说明):
<!--springboot依赖的坐标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--数据源坐标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--指定数据源类型,如未引入 则默认使用HikariDataSource-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!--日志坐标-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
<!--用于yaml属性配置时 提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.7.2</version>
</dependency>
<!--用于省略getter setter 方法,简化代码,带需要在实体类上标注@Data注解 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- https://mvnrepository/artifact/org.hibernate/hibernate-validator 校验器-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.0.Final</version>
</dependency>
9 检验将属性填充至配置类
9.1)编写主启动类
9.2)编写配置类(如果不使用第三组件的数据源则可省略该配置类)
9.3)编写普通的controller
9.4) 编写yml属性配置文件
9.5) 以Debug启动测试程序访问测试地址http://localhost:8080/test(请在controller类中打一个断点,也可忽而略,主要为了验证属性被注入成功)
package cn.tx.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ClassName SpringApplication
* @Description TODO
* @Author jiac
* @Date 2022/8/7 18:54
* @Version 1.0
**/
@SpringBootApplication
public class SpringApplications {
public static void main(String[] args) {
SpringApplication.run(SpringApplications.class,args);
}
}
package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName DataSourceConfig
* @Description TODO
* @Author jiac
* @Date 2022/8/7 19:46
* @Version 1.0
**/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入
public DruidDataSource dataSource(){
return new DruidDataSource();
}
}
package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;
/**
* @ClassName HelloController
* @Description TODO
* @Author jiac
* @Date 2022/8/7 18:54
* @Version 1.0
**/
@RestController
public class HelloController {
@Autowired //自动装配 或者通过构造方法注入
private DataSource dataSource;
@RequestMapping("test")
public String hello(){
System.out.println(dataSource);
return "ok";
}
}
#格式一定需要注意,同一层级一定需要对齐,否则测试会报错
spring:
datasource:
url: jdbc:mysql://localhost:3306/tx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
#com.zaxxer.hikari.HikariDataSource 为默认数据源
#type: com.zaxxer.hikari.HikariDataSource
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
10springboot整合IdbcTemplate测试
10.1)整个IdbcTemplate简单点理解就是对数据源坐标、连接数据库坐标引入 至pom文件并在yml属性配置文件进行配置
10.2)整合JdbcTemplate进行数据库测试(由于前面驱动包均已准备就绪,此处只需要将JdbcTemplate注入使用即可,如下:)
访问 http://localhost:8080/jdbctemp
package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @ClassName
* @Description TODO
* @Author jiac
* @Date 2022/8/7 23:30
* @Version 1.0
**/
@RestController
public class JdbcTempController {
// @Autowired //自动装配 或者通过构造方法注入
private JdbcTemplate jdbcTemplate;
public JdbcTempController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@RequestMapping("jdbctemp")
public List<Map<String, Object>> query(){
List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_user");
return maps;
}
}
访问如下:
11springboot整合Mybatis测试(使用DruidDataSource,测试单表)
10.1)springboot 整合mybatis的核心分为5步:
1、导入驱动包
2、建立实体类(因为使用了@Data注解 则可省略Setter和Getter方法)
3、建立接口mapper 将该接口加入容器(@mapper) 并编写对应的增删改查
4、编写DruidDataSource 配置类
5、编写controller 进行测试 (因为测试所以忽略了Service层) ,浏览器访问
<!--springboot整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
package cn.tx.boot.model;
import lombok.Data;
import java.util.Date;
@Data
public class Person {
private int pid;
private String pname;
private String addr;
private int gender;
private Date birth;
}
package cn.tx.boot.mapper;
import cn.tx.boot.model.Person;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface PersonMapper {
@Select("select * from person a where a.pid=#{pid}")
public Person selectById(int pid);
@Select("select * from person")
public List<Person> selectAll();
@Options(useGeneratedKeys = true,keyProperty = "pid")
@Insert("insert into person(pid,pname,addr,gender,birth) values(#{pid},#{pname},#{addr},#{gender},#{birth})")
public void insert(Person p);
}
package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName DataSourceConfig
* @Description TODO
* @Author jiac
* @Date 2022/8/28 22:46
* @Version 1.0
**/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入
public DruidDataSource dataSource(){
return new DruidDataSource();
}
}
package cn.tx.boot.controller;
import cn.tx.boot.mapper.PersonMapper;
import cn.tx.boot.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @ClassName MybatisController
* @Description TODO
* @Author jiac
* @Date 2022/8/28 22:33
* @Version 1.0
**/
@RestController
public class MybatisController {
@Autowired
private PersonMapper personMapper;
@RequestMapping("selectById")
public Person selectById(){
return personMapper.selectById(1);
}
@RequestMapping("selectAll")
public List<Person> selectAll(){
return personMapper.selectAll();
}
@RequestMapping("insert")
public void insert(){
Person person=new Person();
person.setPname("学java");
personMapper.insert(person);
}
}
。。。。。。。。。。。。。。。学习更新待续。
注:(学习记录是为了更好的留下印象,便于后续查看,也是希望在这个过程中能更好的了解这一部分知识,如有错误之处,请即时指出,请大家相关讨论交流)
更多推荐
什么是springboot
发布评论