springboot 使用jdbc + Druid整合

新建一个springboot项目

打开New Project > 选择Spring initializr 然后next

需要导入webmvc导入依赖

    <!--web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

新建一个application.yml配置文件

  spring:
    datasource:
      username: root
      password: 123456
      # 假如市区报错了,就增加一个时区的配置就ok了  serverTimezone=UTC
      url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
      driver-class-name: com.mysql.jdbc.Driver

测试一下数据源

@SpringBootTest
class Springboot04DataApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源
        System.out.println(dataSource.getClass());

        //获取数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        connection.close();
    }
}

数据库

  DROP TABLE IF EXISTS `user`;
  CREATE TABLE `user` (
    `id` int(20) auto_increment,
    `name` varchar(30) DEFAULT NULL,
    `pwd` varchar(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  INSERT INTO `user` VALUES ('1', '李倩', '123123');
  INSERT INTO `user` VALUES ('2', '张三', '123456');
  INSERT INTO `user` VALUES ('3', '李四', '123456');
  INSERT INTO `user` VALUES ('4', '赵柳', '1234556');
  INSERT INTO `user` VALUES ('6', 'libai', '123456');      
  INSERT INTO `user` VALUES ('7', 'lisi', '123123');
  INSERT INTO `user` VALUES ('8', '聊吧', '123123');

增删改查

@RestController的使用
https://www.cnblogs.com/rzkwz/p/12936806.html

@RestController
public class JDBCController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    //查询数据库的所有信息
    //没有实体类,数据库中的东西,怎么获取  Map
    @GetMapping("/userList")
    public List<Map<String,Object>> userList(){
        String sql="select * from user";
        List<Map<String, Object>> list_maps = jdbcTemplate.queryForList(sql);
        return list_maps;
    }

    @GetMapping("addUser")
    public String addUser(){
        String sql = "insert into user(id,name,pwd) values(10,'小妞','123123')";
        jdbcTemplate.update(sql);
        return "update-ok";
    }


    @GetMapping("/updateUser/{id}")
    public String updateUser(@PathVariable("id") int id){
        String sql = "update user set name=?,pwd=? where id="+id;

        //封装
        Object[] objects = new Object[2];
        objects[0] ="小明";
        objects[1] ="11111";
        jdbcTemplate.update(sql,objects);
        return "update-ok";
    }

    @GetMapping("/delUser/{id}")
    public String delUser(@PathVariable("id") int id){
        String sql = "delete from user where id = ?";
        jdbcTemplate.update(sql,id);
        return "update-ok";
    }
}


启动主入口

测试
@SpringBootApplication

Druid

导入依赖

    <!--Druid-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>
    <!--log4j-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

在application.yml配置文件配置Druid

spring:
  datasource:
    username: root
    password: 123456
    # 假如市区报错了,就增加一个时区的配置就ok了  serverTimezone=UTC
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5 # 初始化大小
    minIdle: 5     # 最小连接数
    maxActive: 20  # 最大连接数
    maxWait: 60000 # 取连接等待超时的时间
    timeBetweenEvictionRunsMillis: 60000  # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    minEvictableIdleTimeMillis: 300000    # 配置一个连接在池中最小生存的时间,单位是毫秒
    validationQuery: SELECT 1 FROM DUAL   # 验证连接有效与否的SQL,不同的数据配置不同
    testWhileIdle: true

    # 这里建议配置为TRUE,防止取到的连接不可用
    testOnBorrow: false
    testOnReturn: false

    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

测试一下数据源

@SpringBootTest
class Springboot04DataApplicationTests {
    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源
        System.out.println(dataSource.getClass());

        //获取数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        connection.close();
    }
}

可以看到SpringBoot已经帮我们换成了Druid数据源了

编写一个DruidConfig配置类

在rzk包下新建一个config包,在config包下新建一个DruidConfig类

@Configuration

@Configuration
public class DruidConfig {
    /*
    @ConfigurationProperties作用:
    将配置文件中配置的每一个属性的值,映射到这个组件中;
    告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
    参数 prefix = "spring.datasource" : 将配置文件中的"spring.datasource"下面的所有属性一一对应
    */
    @ConfigurationProperties(prefix = "spring.datasource")//这样就可以和application.yml里面的spring.datasource下的属性进行一一对应
    //如果在application.yml 配置Druid也没有用,因为没有跟配置文件绑定产生交互就起不来作用,需要加@Bean
    @Bean
    public DataSource druidDateSource(){
        return new DruidDataSource();
    }

    //后台监控
    @Bean
    public ServletRegistrationBean a(){
        ServletRegistrationBean<StatViewServlet>  bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        //后台需要有人登陆,账号密码配置
        HashMap<String,String> initParameters = new HashMap<>();

        //增加配置
        //登陆key 是固定的 Username 和 Password
        initParameters.put("loginUsername","admin");
        initParameters.put("loginPassword","123456");

        //允许谁可以访问  如果vlue为空意思就为所有人都可以访问
        initParameters.put("allow","");

        //禁止谁能访问
//        initParameters.put("xx",192.168.11.10);

        bean.setInitParameters(initParameters);
        return bean;
    }

    //filter
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());

        //可以过滤哪些请求呢?
        HashMap<String, String> initParameters = new HashMap<>();
        //这些东西不进行统计
        initParameters.put("exclusions","*.css,*.js,/druid/*");

        bean.setInitParameters(initParameters);
        return bean;
    }
}

启动进行测试

在网页打开http://localhost:8080/druid/basic.json
在config配的账号密码输入进去

如图:

可以看到在config配的属性

进行一条查询

可以看到查询的语句会被Druid进行监控

原文地址:https://www.cnblogs.com/rzkwz/p/12965545.html