• 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进行监控

  • 相关阅读:
    单机部署redis主从备份
    【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定
    java生成二维码(带logo)
    求一个序列的全部排列
    【C/C++学院】(24)Oracle数据库编程--管理oracle
    php学习之道:mysql SELECT FOUND_ROWS()与COUNT(*)使用方法差别
    用"池"来提升对象的复用
    迷茫的一代人
    VMWARE安装MAC时无法移动鼠标?
    小心两个共享库共用同一个静态库
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12965545.html
Copyright © 2020-2023  润新知