Springboot2.0学习总结

Springboot2.0学习总结

Spring框架
IOC控制反转:在IoC模式下,控制权限从应用程序转移到了IoC容器中。组件不是由应用程序负责创建和配置,而是由IoC容器负责。
使用IoC的情况下,对象是被动地接收依赖类而不是主动地查找。对象不是从容器中查找他的依赖类,而是容器在实例化对象时,主动地将他所依赖的对象注入给他。
应用程序只需要直接使用已经创建并且配置好的组件即可,而不必自己负责创建和配置。一般配置在我们的applicationContext.xml中,它其实就是一个控制器,

IOC依赖注入:也就是我们applicationContext.xml文件里面的控制规则,比如如何自动注入Bean,交给我们的spring容器来管理,全局扫描等。具体可以参考我的博客Spring框架章节。

AOP:也叫切面编程,配合我们的OOP面向对象编程使用,分为静态代理动态代理JDK动态代理使用注解的方式实现动态代理

SpringMVC框架
基于MVC运行:
在这里插入图片描述
基于SpringMVC运行:
在这里插入图片描述
从以上我们可以看出它们的区别,交给处理的机制不一样,返回的一个是Model一个ModelAndVIew。
那么我需要使用SpringMVC就需要配置,也是根据它的流程了配置的,以及它的RequstMapping等,具体可以参考我的博客SpringMVC系类文章。

SpringBoot基于Maven
说实话,不知道从何说起,干脆通过它的常用注解来讲解吧。

1)@Configuration,配置文件的注解,实现WebMvcConfiguration接口,它里面有诸多方法,比如添加一个拦截器addInterceptors,实习此方法,配置好属性,比如拦截那些路径,放行那些路径,在把你自己编写的拦截器放入,即可使用。

2)@component与@Bean,有时候分不清楚它的的区别,@Component是通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。@Bean,注册到了spring上下文中,一般用来标注第三方类库,或者引用,也就是用来标注@Configuration注解下东西,把他们加到我们的spring容器中,两个注解都可以用@Autowired装配,我们需要使用直接,

@Autowired
RedisUrlConuntInterceptor redisUrlConuntInterceptor;

然后调用,很方便。

3)@Controller、@Service、@GetMapping、@PostMapping

4)@ResponseBody说明返回的只是JSON数据,在引入Thymeleaf模板,不加注解默认跳转页面

注册Servlet三大组件:
① 使用实现他们对应的接口,比如:Filter就实现Filter接口,@WebFilter(urlPatterns = {"/css/*"})来说拦截的路径,Servlet实现HttpServlet接口@WebServlet来说明请求路径,ServletContextListener实现ServletContextListener接口,需要使用@WebListener来注解;
在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

@Configuration
public class MyRegisterConfig {
    @Bean
    public ServletRegistrationBean myServlet(){
        MyServlet myServlet = new MyServlet();
        return new ServletRegistrationBean(myServlet,"/my","/my02");
    }
    //@Bean
    public FilterRegistrationBean myFilter(){
        MyFilter myFilter = new MyFilter();
        //根据其他的Servlet拦截的路径,过滤器也拦截相同的路径
       /* return  new FilterRegistrationBean(myFilter,myServlet());*/
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);
        //自定义拦截路径
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","my02"));
        return filterRegistrationBean;
    }
    @Bean
    public ServletListenerRegistrationBean myListener(){
        MyServletContextListener myServletContextListener = new MyServletContextListener();
        return new ServletListenerRegistrationBean(myServletContextListener);
    }

直接注册到容器中

LomBox插件,可以使我们的实体类类开发更简洁方便,
主要注解有:
@Data表示自动加载了GETSET方法,
@AllArgsConstructor:所有参构造函数
@NoArgsConstructor:空的构造函数等

整合MyBatis
需要在pom.xml中引入spring-boot-starter-data-jdbc,与mybatis-spring-boot-starter,

@MapperScan(“com.lsl.admin.Mapper”),在SpringBootApplication上使用@MapperScan注解可以扫描指定包下面的所有Mapping,不同我们一个一个的去写,

接下来说一个整合MyBatis后的使用方法,比如我们需要从数据库中根据ID查询某一条数据,

yaml配置文件:

spring:
  datasource:
    url: jdbc:mysql://192.168.1.38:3306/test1
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
#配置myBatis规则
mybatis:
  #config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:   #指定mybatis全局配置文件中的相关配置项
    map-underscore-to-camel-case: true



Controller:

@Controller
public class CityController {
    @Autowired
    CityService cityService;
    @ResponseBody
    @GetMapping("/city")
    public City getById(@RequestParam("id") int id){
        return  cityService.getCityById(id);
    }
    }

CityService

@Service
public class CityService {
    @Autowired
    CityMapper cityMapper;
    public City getCityById(int id){
        return cityMapper.getCity(id);
    }
    }

UserMapper

public interface CityMapper {
    public City getCity(int id);
    }

MyBatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--开启驼峰命名法,也可以在yaml中配置-->
    <!--<settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>-->
</configuration>

用来访问数据和映射给Mapping的配置文件:

<?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.lsl.admin.Mapper.CityMapper">
   <!-- <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into city(name,state,country)values(#{name},#{state},#{country});
    </insert>-->
    <select id="getCity" resultType="com.lsl.admin.Entity.City">
        SELECT * FROM test1.city where id=#{id}
    </select>
</mapper>

还可以在Mapping中直接采用注解的方式进行增删改,

 @Insert("insert into city(name,state,country)values(#{name},#{state},#{country})")
 @Options(useGeneratedKeys = true,keyProperty = "id")
    public void insert(City city);

整合durid监控功能:
可以使用两种方式,不过都要先引入maven配置:

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

随后可以使用@Configuration的方式

package com.lsl.admin.Config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * 在配置文件中写会更简单
 */
//@Configuration
public class MyDataSourceConfig {
    //默认的自动配置是判断容器中没有才会配
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        //加入sql监控功能
        //druidDataSource.setFilters("stat,wall");
        return druidDataSource;
    }
    //配置Druid监控页
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet servlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(servlet, "/druid/*");
        //配置durid的登录功能
        registrationBean.addInitParameter("loginUsername","admin");
        registrationBean.addInitParameter("loginPassword","123");
        return registrationBean;
    }
    /**
     * WebStatFilter 用于采集web-jdbc关联监控的数据
     *
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;

    }
}

也可以使用yaml配置:

    druid:
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: 123
        resetEnable: false
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      aop-patterns: com.lsl.admin.*
      filters: stat,wall
      filter:
        stat:
          slow-sql-millis: 1000
          log-slow-sql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false

整合MyBatis-Puls,同时引入了start-JDBC和start-mybaits.
引入:

 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

可以混合使用,不过它的mybatis配置文件映射规则,默认在resource下的mapper路径下,也可以只用puls,看个人需求.

使用:从数据库查询某一张表的数据

@Autowired
UserService userService;
List<User> list = userService.list();//list方法由我们的mybatis-puls提供

UserSevice接口:

public interface UserService extends IService<User> {
//IService是service的总接口,里面有很多增删改查的方法,我们controller里面的list方法就是从这里调出去的

}

UserServiceImpl

@Service
public class UserServiceimpl extends ServiceImpl<UserMapper,User> implements UserService {
//实现UserService接口,UserService接口又实现的IService接口,那么我们是不是要实现IService接口的所有方法才能使用?不需要,因为我们有ServiceImpl类这个类实现了IService接口的所有方法,我们继承这个类就欧克了.

Junit5:断言,前置,嵌套,参数测试,迁移等.

指示监控没有认真学习.后续会补,加油打工仔.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值