首页 > 编程语言 > 详细

5.Springboot(五)

时间:2020-12-26 17:53:00      阅读:35      评论:0      收藏:0      [点我收藏+]

整合JDBC使用 (git:springboot-05-data)

  • 对于数据访问层,无论是SQL(关系型数据库),还是NOSQL(非关系型数据库),springboot的底层,都是采用spring Data的方式进行统一处理
  • SpringBoot底层是采用Spring Data的方式进行统一处理各种类型的数据库,spring Data也是spring中与springBoot,springCloud齐名的知名项目
  • spring Data的官网:https://spring.io/projects/spring-data

直接使用JDBCTemplate操作数据

只要是***Template的类,就是springBOOT默认帮我们配置好了的,拿来就可以用,例如jdbcTemplate
配置数据库连接

#配置数据库连接
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/study?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

mysql时区:UTC 是标准时间参照,GMT(格林威治时间)、CST(北京时间)、PST(太平洋时间)等等是具体的时区。由于 UTC +0 的特殊性,所以有时也把 GMT 当成参照,以下写法等同:GMT: UTC +0 = GMT: GMT +0
CST: UTC +8 = CST: GMT +8
PST: UTC -8 = PST: GMT -8

controller

@RestController
public class JdbcController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    /**
     * 当没有实体类的时候,怎么查询数据库的结构以及数据
     */
    @RequestMapping("/JDBC")
    public List<Map<String,Object>> findAll(){
        String sql = "select * from shop";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }

    //使用jdbcTemplate还可以直接王数据库里面添加数据
    @RequestMapping("/add")
    public String addData(){
        String sql = "insert into study.shop(id,name,money) values (3,‘cdl‘,25000)";
        jdbcTemplate.update(sql);
        return "add_success";
    }
}

test

@SpringBootTest
class Springboot05DataApplicationTests {

    @Autowired
    DataSource dataSource;

//测试数据库是否连接成功
    @Test
    void contextLoads() throws SQLException {
        //查看默认数据源 class com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());

        //获得数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection); //wrapping com.mysql.cj.jdbc.ConnectionImpl@6e1b9411

        //只要看到 ***template什么的类,就是springBOOT默认帮我们配置好了的,拿来就可以用,例如jdbcTemplate
//        //关闭连接
        connection.close();
    }

}

整合Druid数据源

Druid

  • Druid是阿里巴巴开源平台上一个数据库连接池实现,结合c3p0,DBCP等数据库连接池的优点,同时加入了日志监控
  • Druid可以很好的监控数据库数据库连接池和sql执行情况,天生就是为监控而生的数据库连接池
  • Spring Boot 2.0 以上默认使用Hikari数据源,可以说Hikari与Druid都是当前Java Web上最优秀的数据源,我们来重点介绍Spring Boot 如何集成Druid数据源,如何实现监控

扩展:HikariDataSource

1.引入数据源,https://mvnrepository.com/search?q=druid

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

2.在application.yml增加druid专有配置

    #SpringBoot默认是不注入这些的,需要自己绑定
    #druid数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

      #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
      #如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Properity
      #则导入log4j 依赖就行
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

3.编写配置类,实现druid的监控功能

@Configuration
public class DruidConfig {

    //将自定义的容器绑定到springboot中,不需要springboot自动创建
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }

    //实现后台监控
    //因为springboot内置了servlet容器,所以没有web.xml,替代方法ServletRegistrationBean
    @Bean
    public ServletRegistrationBean statViewServlet(){

        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
        //后台需要有人登录
        HashMap<String, String> hashMap = new HashMap<>();

        //增加配置 登录的key是固定  loginUsername   loginPassword
        hashMap.put("loginUsername","admin");
        hashMap.put("loginPassword","123456");
        //允许谁可以访问
        hashMap.put("allow","");
        //不允许谁访问
        hashMap.put("cdl","127.0.0.1");
        bean.setInitParameters(hashMap);//设置初始化参数
        return bean;
    }
}

5.浏览器访问localhost:8080/druid即可
技术分享图片

6.执行crud代码,查看sql执行情况
技术分享图片

配置过滤器

//配置过滤器
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        //可以过滤那些请求呢
        HashMap<String, String> map = new HashMap<>();
        //这些不统计
        map.put("exclusions","*.js,*.css,/druid/*");
        bean.setInitParameters(map);
        return bean;
    }

整合mybatis

1.导包

<!-- mybatis-spring-boot-starter 不是spring官方的,是mybatis自己整合的,以spring-boot开头才是spring官方的 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

2.配置文件

<?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.cdl.mapper.UserMapper">

</mapper>

3.mybatis配置

#配置数据库连接
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/study?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
#整合mybatis
mybatis:
  type-aliases-package: com.cdl.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml

4.编写sql
5.调用

5.Springboot(五)

原文:https://www.cnblogs.com/cdlszl/p/14192171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!