Spring数据访问操作2

目录

一、SpringBoot整合MyBatis

1.坐标

解释:

 2、写配置yml文件

3.写代码:

第一种写法 :---加上@Mapper

第二种写法: ---@MapperScan

4.测试

二、SpringBoot切换数据源 

 SpringBoot自带的数据源

结果:

更换数据源--druid 

 1、坐标

2、yml文件配置

3、配置类 

解释 :@ConfigurationProperties(prefix = "spring.datasource")

作用详细解释:

总体流程:

三、Druid监控平台 

   引言:

   解释Druid监控平台:

  步骤:

1. 根据第二大点更换数据源为Druid数据源

2.在yml文件中配置过滤器,否则不生效

解释:

3、配置类【和web有呼应】

3.1、注入数据源

3.2、servlet的注册类【制作监控页面】

3.3、过滤器的注册类【编写过滤规则】

四、 SpringBoot监控

1.坐标【监控平台】

2.启动项目

一、SpringBoot整合MyBatis

1.坐标

             【属于第三方的启动器 :要version】

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

解释:

   此时的项目:已经集成了 web启动器 mysql数据源 test单元测试

             Spring

             SpringMVC

             Mybatis

 2、写配置yml文件

                  ----- 配置数据源[基础版的]

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    username: root
    password: SunXinR

3.写代码:

实体类   dao

第一种写法 :---加上@Mapper

                  新注解

有点类似repository注解【持久层 只注入】

Mapper映射器不仅要有spring做注入【运行时所需要的类】

还需要在mybatis容器做注册

所以:现在用@Mapper替换@repository

第二种写法: ---@MapperScan

以包为单元做:批量注入+注册

位置:不在映射器上

而是在启动类上 :@MapperScan(basePackages = {"com.xin.dao"})

或者:@MapperScan("com.xin.springboot_redis02.dao")

 eg:

@SpringBootApplication
@MapperScan(basePackages = {"com.xin.dao"})
public class SpringbootData02MybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootData02MybatisApplication.class, args);
    }
}

这两个注解选一个就好,不用都写上

4.测试

注意:

按照规范:

       表字段下划线,实体类属性小驼峰

       在yml中配置:开启自动驼峰映射【默认是false】

type-aliases-package:起别名【映射时不用写完全限定名】

mybatis:
  configuration:
    map-underscore-to-camel-case: true
  type-aliases-package: com.xin.pojo

测试: 

@SpringBootTest
class SpringbootData02MybatisApplicationTests {
    @Autowired(required = false)
    AccountMapper accountMapper;
    @Test
    void contextLoads() {
        List<Account> accounts = accountMapper.findAll();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }
}

二、SpringBoot切换数据源 

 SpringBoot自带的数据源

@SpringBootTest
class SpringbootDataDruidApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    public void source() throws SQLException {
        System.out.println(dataSource.getClass());
        System.out.println(dataSource.getConnection());
    }
}

结果:

image.png

更换数据源--druid 

 1、坐标

<!-- druid坐标 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

2、yml文件配置

在dataSource同级目录下

        配置type属性: 作用:给当前数据源一个类型

datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    username: root
    password: SunXinR
    type: com.alibaba.druid.pool.DruidDataSource
    

3、配置类 

@Configuration
public class DruidConfig {

    //注入数据源
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

解释 :@ConfigurationProperties(prefix = "spring.datasource")

在项目的某个@Configuration配置类中通过@Bean注解在某个方法上:

作用:使用配置文件中相应的属性初始化该bean的属性

作用详细解释:

1.加载了yml文件中spring.datesource的相关信息,

2.并将内容获取过来,

3.关联给DruidDateSource的实例对象对应的属性

4.将数据源注入容器

总体流程:

springBoot就会去查看:

当你注入了数据源,

此时:它提供的HiKariDataSource不在是唯一的数据源时,会使用人工注入的数据源【实现替换】

三、Druid监控平台 

   引言:

         项目上线后,如何去监控项目的运行状态

   原来:日志【不是很智能】

   解决:继承第三方的监控平台【会生成对应的UI界面,可以看到系统的运行状态】

为项目上线之后作准备

   解释Druid监控平台:

  应用:数据库+Dao层的监控

  解释:Druid毕竟是数据源,智能体现在数据访问层

能帮我们统计出那一时刻那个用户执行那个Sql,查询结果,并发量,查询结果,从而作SQL优化 

  步骤:

1. 根据第二大点更换数据源为Druid数据源

2.在yml文件中配置过滤器,否则不生效

image.png

解释:

  stat是做统计的过滤器

   wall防火墙过滤器

3、配置类【和web有呼应】

           servlet三大组件的第二种配置方式

image.png

3.1、注入数据源

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
    return new DruidDataSource();
}

3.2、servlet的注册类【制作监控页面】

Druid提供了好了一个StatViewServlet:

       作用:画监控页面的

   需要提供:Servlet的账号密码

我们只需要做配置 ---只能用@Bean


@Bean
public ServletRegistrationBean registrationBean(){
    //1.创建servlet注册类
    ServletRegistrationBean<StatViewServlet>  servletRegistrationBean =  new ServletRegistrationBean<StatViewServlet>();
    //2.创建制作页面的servlet
    StatViewServlet statViewServlet = new StatViewServlet();
    //3.绑定servlet
    servletRegistrationBean.setServlet(statViewServlet);
    servletRegistrationBean.setUrlMappings(Arrays.asList("/druid/*"));
    //4.参数绑定
    Map<String,String> maps = new HashMap<String,String>();
    maps.put(StatViewServlet.PARAM_NAME_USERNAME,"admin");
    maps.put(StatViewServlet.PARAM_NAME_PASSWORD,"123");
    maps.put(StatViewServlet.PARAM_NAME_ALLOW,"");//白名单
    maps.put(StatViewServlet.PARAM_NAME_DENY,"192.168.0.12");//黑名单
    
    servletRegistrationBean.setInitParameters(maps);
    return servletRegistrationBean;
}

3.3、过滤器的注册类【编写过滤规则】

WebStatFilter过滤器:

      作用:做统计

   要告诉它什么请求需要过滤器【统计请求的访问次数等等】

   什么资源不做过滤,不做统计

WebStatFilter过滤器是做统计的

@Bean
public FilterRegistrationBean filterRegistrationBean(){

    FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<WebStatFilter>();
    bean.setFilter(new WebStatFilter());
    //所有请求进行监控处理
    bean.setUrlPatterns(Arrays.asList("/*"));

    Map<String, String> initPrams = new HashMap<>();
    
    //添加不需要忽略的格式信息
    initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
    bean.setInitParameters(initPrams);
    
    return bean;
}

四、 SpringBoot监控

SpringBoot自带监控功能Actuator

步骤:

1.坐标【监控平台】

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.启动项目

         访问项目路径【http://localhost:8080/actuator】即可 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值