学习笔记:Springboot

Spring

一、基础

1、依赖包

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
​
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
​
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>
​
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
</dependencies>

配置目录结构

2、注解

SpringConfig:

@Configuration标明注解

@ComponentScan("com.")扫描包

@MapperScan

@Import

@PropertySource

其他类的:@Component @Service @Controller @Respority @Bean

@Autowired

3、配置信息

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&amp;serverTimezone=UTC
jdbc.username=root
jdbc.password=xzx2003.701@

JdbcConfig配置类

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
​
    @Value("${jdbc.url}")
    private String url;
​
    @Value("${jdbc.username}")
    private String username;
​
    @Value("${jdbc.password}")
    private String password;
​
​
​
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }

MybatisConfig配置类

public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        //设置实体封装类
        ssfb.setTypeAliasesPackage("com.itheima.domain");
        //设置数据源
        ssfb.setDataSource(dataSource);
        return ssfb;
    }
    
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        //设计mapper代理,扫描映射所在的包
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }
}

4、启动

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        AccountService accountService = ctx.getBean(【想要获取的类名】.class);
​
        Account account = accountService.findByUsername("zhangsan");
        System.out.println(account);
    }


二、事务管理

作用:在数据层或业务层一系列数据库操作保证同成功同失败

1.在service接口上添加Spring事务管理@Transactional

public interface AccountService {
    @Transactional
    void transfer(String out,String in,Double money);
}

2.设置事务管理器

在JdbcConfig类里

@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    transactionManager.setDataSource(dataSource);
    return transactionManager;
}

3.SpringConfig类添加事务允许

@EnableTransactionManagement

1、入门四步

第四步改进后:

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
	//Spring容器加载
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

	//SpringMVC容器加载
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
	
	//路径拦截
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

	//处理Post的中文乱码
    @Override
    protected Filter[] getServletFilters() {
        //只能处理post的乱码
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

2、注意bean的加载控制

因为springMVC和Spring的功能不同

  • SpringMVC加载controller层的bean

  • Spring加载service和dao层的bean

3、get和post请求

4、不同请求参数下的使用

1)pojo实体类参数

2)嵌套的pojo实体类参数

3)数组参数

4)集合参数

5)接收JSON参数

第一步添加JSON依赖

<dependency>
  	<groupId>com.fasterxml.jackson.core</groupId>
  	<artifactId>jackson-databind</artifactId>
  	<version>2.9.0</version>
</dependency>
<dependency>
  	<groupId>com.fasterxml.jackson.core</groupId>
  	<artifactId>jackson-core</artifactId>
	<version>2.9.0</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.9.0</version>
</dependency>    

第二步

第三步postman选择请求体为JSON格式

第四步参数前面添加@RequestBody

public String common(@RequestBody List<String> name)

注意:pojo参数和集合参数都可以用JSON来传参

pojo参数
{

​	"name":"itcast",

​	"age":18

}

集合
[
	{"name":"itcast","age":18},
	{"name":"itcast","age":18}

]
6)日期型参数
public String dataParam(@DataTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Data data)


四、REST风格

1、简介

2、请求参数注解

@RequestParam @RequestBody @PathVariable

△@RestController = @ResponseBody + @Controller


五、SSM整合

1、目录

2、依赖包导入

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.10.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.10.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
  </dependency>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
  </dependency>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.2.10.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.0</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.0</version>
  </dependency>
</dependencies>


<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <port>8080</port>
        <path>/</path>
      </configuration>
    </plugin>
  </plugins>
</build>

3、各配置类信息

1)SpringConfig
@Configuration
@ComponentScan({"com.itheima.service","com.itheima.dao"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {

}
2)JdbcConfig
public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driver);
        dataSource.setUsername(username);
        return dataSource;
    }


    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager ds = new DataSourceTransactionManager();
        ds.setDataSource(dataSource);
        return ds;
    }
}
3)MybatisConfig
public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setDataSource(dataSource);
        ssfb.setTypeAliasesPackage("com.itheima.domain");
        return ssfb;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }
}
4)SpringMvcConfig
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {


}
5)ServletContainersInitConfig

mvc容器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }


    //处理Post的中文乱码
    @Override
    protected Filter[] getServletFilters() {
        //只能处理post的乱码
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

4、表现层数据封装

就是将后端向前端返回的数据按照统一的样式返回过去

可以再定义一个返回码

public class Code {
    public final static Integer SAVE_OK = 20011;
    public final static Integer DELETE_OK = 20021;
    public final static Integer UPDATE_OK = 20031;
    public final static Integer GET_OK = 20041;



    public final static Integer SAVE_ERR = 20010;
    public final static Integer DELETE_ERR = 20020;
    public final static Integer UPDATE_ERR = 20030;
    public final static Integer GET_ERR = 20040;


    public final static Integer SYSTEM_ERR = 50001;
    public final static Integer SYSTEM_TIMEOUT_ERR = 50002;

    public final static Integer BUSINESS_ERR = 60002;
}

5、异常处理器

运用AOP切面思想对Controller进行增强

可以集中统一的处理项目中的异常

通常写在表现层

/**
 * 异常处理器
 * @RestControllerAdvice 用来代表对RestController进行增强
 * @ExceptionHandler 用来定义当前方法用来出来哪一种异常
 */
@RestControllerAdvice
public class ProjectExceptionAdvice {
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex){
        System.out.println("嘿嘿,异常你被我拦截到了");
        return new Result(500,null,"出现异常");
    }
}    

6、拦截器

1)入门

2)拦截器思想

六、SpringBoot

springboot是在spring和SpringMVC的基础上再次简化开发,加快开发速度的

其设计目的是用来简化Spring应用的初始搭建开发过程

好处是完全不需要再写spring和SpringMVC的配置类了

1、快速创建

2、启动方式

3、基础配置

4、整合Mybatis

页面放在resources目录下的static目录里

5.全局异常处理器

/**
 * 全局异常处理器,处理项目中抛出的业务异常
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 捕获业务异常
     * @param ex
     * @return
     */
    @ExceptionHandler
    public Result exceptionHandler(BaseException ex){
        log.error("异常信息:{}", ex.getMessage());
        return Result.error(ex.getMessage());
    }

}

七、MybatisPlus

1、入门

1)添加起步依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
2)配置数据库信息
spring:
    datasource:
        url: jdbc:mysql://localhost:3306/testdb?useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: xzx2003.701@
        type: com.alibaba.druid.pool.DruidDataSource
3)继承BaseMapper

2、分页查询

①设置分页拦截器作为Spring 管理的bean

@Configuration
public class MybatisPlusConfig {
	/**
     * 分页插件。如果你不配置,分页插件将不生效
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mpi = new MybatisPlusInterceptor();
        mpi.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpi;
    }
}

开启mybatis-plus运行日志

mybatis-plus:
    configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、条件查询

lt: less than 小于 gt: greater than 大于

4、清除日志

八、Swagger

导入依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

然后添加一个配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))  //添加ApiOperiation注解的被扫描
                .paths(PathSelectors.any())
                .build();
 
    }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title(”swagger和springBoot整合“).description(”swagger的API文档").version("1.0").build();
    }
 
}

最后访问本地链接

http://localhost:8080/swagger-ui.html#/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值