SpringBoot整合JDBCTemplate

本篇文章将会介绍用SpringBoot整合JDBCTemplate来实现简单的增删改查的功能、及通过SpringBoot整合Druid数据库连接池实时监控数据库的连接信息 ,为优化数据库性能提供更好的指导。

前言

在使用JDBCTemplate之前,我们先来了解一下JDBC。它是java用于连接数据库的规范,也就是用于执行数据库SQL语句的java API。是由一组用java语言编写的类和接口组成,为大部分关系型数据库提供了访问接口。
而JDBC每次使用前进行数据库的连接,然后处理SQL语句、传值、关闭数据库等,如果都由开发人员编写代码,很容易出错,可能会出现在使用完成以后,数据库连接忘记关闭的情况,从而导致连接被占用降低性能,为了减少这种可能的错误,减少开发人员的工作量,JDBCTemplate就被设计出来了。


JdbcTemplate是Spring提供的一套JDBC模板框架,利用AOP技术来解决直接使用JDBC时大量重复代码的问题。JdbcTemplate虽然没有MyBatis那么的灵活,但是比直接使用JDBC要方便很多。
下面就通过一个实例来具体介绍JDBCTemplate的使用:

开发工具及环境: IDEA、Maven、jdk1.8、Mysql、postman、

一、创建数据库

创建表(book)

二、项目结构

三、导入依赖

在pom.xml文件中引入下面依赖:

<!--        引入jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--        引入druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version></dependency><!--        引入mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version><scope>runtime</scope></dependency>
<!--        引入log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

四、配置数据库连接信息

在这里使用的是application.yml的配置文件:

spring:datasource:username: rootpassword: 123url: jdbc:mysql://localhost:3306/jdbctemplate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.jdbc.Driver
#    使用Druid数据源type: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#   配置监控统计拦截的filters,stat:监控统计、Log4j:日志记录、wall:防御sql注入filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

五、创建实体类

Book.java

package com.example.entity;/*** @author 2017810402084*/
public class Book {private Integer id;private String name;private String author;public Book() {}public Book(Integer id, String name, String author) {this.id = id;this.name = name;this.author = author;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "Book{" +"id=" + id +", name='" + name + ''' +", author='" + author + ''' +'}';}
}

六、创建数据库访问层(DAO)

BookDao.java

package com.example.dao;import com.example.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.List;/*** @author 2017810402084*/@Repository
public class BookDao {@AutowiredJdbcTemplate  jdbcTemplate;public int addBook(Book book) {return jdbcTemplate.update("insert into book(name,author) values (?,?)",book.getName(),book.getAuthor());}public int updateBook(Book book) {return jdbcTemplate.update("update book set name = ?,author = ? where id = ?" ,book.getName(),book.getAuthor(),book.getId());}public int deleteBook(Integer id) {return jdbcTemplate.update("delete from book where id = ?",id);}public Book getBookById(Integer id) {return jdbcTemplate.queryForObject("select *  from book where id = ?",new BeanPropertyRowMapper<>(Book.class),id);}public List<Book> getAllBooks() {return jdbcTemplate.query("select *  from book",new BeanPropertyRowMapper<>(Book.class));}
}

  • jdbcTemplate中,增删改操作主要使用updatebatchUpdate方法来完成的。
  • queryqueryForObject方法主要来完成查询的功能。

七、创建Controller

BookController.java

package com.example.controller;import com.example.entity.Book;
import com.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author 2017810402084*/@RestController
@RequestMapping("/book")
public class BookController {@Autowiredprivate BookService bookService;@RequestMapping(value = "/addBook")public String addBook() {Book book = new Book("数据库","李四");int result =  bookService.addBook(book);if(result >0) {return "数据插入成功";}else {return "数据插入失败";}}@RequestMapping(value = "/getBookById")public Book getBookById(Integer id){try {Book bookresult = bookService.getBookById(id);if(bookresult != null) {return bookresult;}else {return null;}}catch (Exception e) {return null;}}@RequestMapping(value = "/getBooksList")public List<Book> getBooksList() {return bookService.getAllBooks();}
}

八、创建Service

BookService.java

package com.example.service;import com.example.dao.BookDao;
import com.example.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** @author 2017810402084*/
@Service
public class BookService {@Autowiredprivate BookDao bookDao;public int addBook(Book book) {return bookDao.addBook(book);}public int updateBook(Book book) {return bookDao.updateBook(book);}public int deleteBook(Integer id) {return bookDao.deleteBook(id);}public Book getBookById(Integer id) {return bookDao.getBookById(id);}public List<Book> getAllBooks() {return bookDao.getAllBooks();}}

九、整合Druid数据库连接池

9.1、配置Druid的监控功能

package com.example.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.util.Arrays;
import java.util.HashMap;
import java.util.Map;/*** @author 2017810402084*/@Configuration
public class DruidConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource  druidDataSource() {return new DruidDataSource();}//配置后台Druid监控功能@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");//后台需要登录HashMap<String,String> initParameters = new HashMap<>();//增加配置initParameters.put("loginUsername", "admin");initParameters.put("loginPassword","123456");//允许谁可以访问initParameters.put("allow", "");  //允许所有访问//禁止谁能访问initParameters.put("druid", "192.168.11.123");//设置初始化参数bean.setInitParameters(initParameters);return bean;}//配置一个web监控的filter@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());Map<String,String> initParams = new HashMap<>();//不进行统计initParams.put("exclusions","*.js,*.css,/druid/*"); //排除静态资源和请求bean.setInitParameters(initParams);bean.setUrlPatterns(Arrays.asList("/*"));  //拦截所有请求return  bean;}}

9.2、配置Druid

具体的配置内容已在前面的数据库连接信息中进行配置了,这里不再进行展示。

十、启动项目

项目启动后发现控制台出现下面的情况:

具体的解决方法参见:springboot整合Druid数据(出现log4j:WARN No appenders could be found for logger (druid.sql.Connection))的解决方案


接下来用postman进行测试:

十一、整合结果展示

  • 访问:http://127.0.0.1:8080/druid/login.html输入admin/123456进行登录

用户名和密码设置如下:

//增加配置initParameters.put("loginUsername", "admin");initParameters.put("loginPassword","123456");

  • 登录成功后,进入首页。
  • 运行相应的 sql 查看 druid SQL监控。

总结

本篇文章通过SpringBoot与JDBCTemplate整合实现简单的增删改查的功能,以及怎样与Druid整合实时监控数据库的连接信息等;希望通过这个例子能给予大家帮助。

原文作者:浅殇忆流年

原文链接:https://segmentfault.com/a/1190000023961648

原文出处:CSDN

druid连接池_SpringBoot整合JDBCTemplate及Druid连接池相关推荐

  1. java使用druid maven_SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置...

    一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...

  2. redis 连接池_SpringBoot整合redis

    闲来没事,把之前自己搭建的SpringBoot集成Redis整理了一下,相信网上有很多,我只是写一下搭建的文章,能帮到就好,不能帮助,也是自己整理的文档罢了.文章开始: 开发工具用的IDEA 2018 ...

  3. spring boot socket长连接_springboot 整合阿里 druid 数据库连接池实战

    情景 web 开发中连接数据库基本是必须的,阿里的 druid 是一款非常优秀的开源数据库连接池工具. 本文将介绍一下如何使用 springboot 整合 druid 数据源. 快速开始 maven ...

  4. SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

    一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...

  5. druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库

    一.连接池 在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的 ...

  6. springboot pom文件添加mysql组件_SpringBoot整合mybatis-plus+druid组件,实现增删改查

    前言 本篇文章主要介绍的是SpringBoot整合mybatis-plus,实现增删改查. GitHub源码链接位于文章底部. 建库建表 创建springboot数据库,创建t_user表,字段id主 ...

  7. springboot update数据_SpringBoot整合Mybatis+Druid+数据库(注解版)

    运行展示 正题 Spring boot :2.1.5RELEASE :数据库(Mysql.Oracle):Mybatis:阿里云的连接池 : Druid : 步骤 1.POM依赖 <!-- My ...

  8. druid java直接调用_Spring Boot使用Druid连接池的示例代码

    Druid是Java语言中最好的数据库连接池.Druid相比于其他的数据库连接池,有两大特性: 监控数据库,有利于分析线上数据库问题 更容易扩展,同时也很高效. 今天演示一下Spring Boot集成 ...

  9. druid连接池mysql自动关闭_探究Druid连接池“违反协议”异常

    作者:董添 使用Druid连接池和PreparedStatement Cache后,应用访问数据库的效率提高了,针对连接池的监控手段也变多了,但是随之而来也出现了一些新的问题,最近发现在给表增加字段后 ...

最新文章

  1. 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)
  2. 2007白领职场成功需要哪“十商”
  3. [js] 写一个格式化时间的方法
  4. EM算法最完整易懂讲解
  5. 能搜python题的软件_中国大学MOOC的APP用Python玩转数据期末考试搜题公众号答案...
  6. MathType几个常用字体的名称
  7. kafka+线程池+Runnable
  8. 高等数学辅导讲义_《高等数学》考研自用框架体系
  9. 陕西2020行政区划调整_陕西省最新行政区划,厉害了大陕西
  10. 计算机第一代及第四代发展概况,1计算机发展概况解析.ppt
  11. python色彩变换CMYK,RGB,HSI
  12. 前端导航栏的几种写法
  13. Puppet nginx+passenger模式配置
  14. 抓住每一次学习的机会
  15. c++ 去除字符串首尾的空白字符
  16. 计算机毕业设计Java诚越园区垃圾分类信息科普系统(源码+系统+mysql数据库+lw文档)
  17. 让curl支持IE代理
  18. html期末成绩查询页面,小学分数查询
  19. 输出一个区间内的质数(素数)
  20. macbert4csc纠错

热门文章

  1. android 虚拟按键 增减和删除的方法
  2. NoSQL(3) 之Redis主从复制、哨兵和集群介绍及详细搭建步骤
  3. rap技术原理_「水深坑多」做分子海绵,你还需要了解这些技术
  4. 大话移动通信pdf_移动通信是怎么实现的?
  5. 在本地机房享受专属公共云服务,详解阿里云本地化部署服务云盒
  6. 揭秘 | 大流量场景下发布如『丝般顺滑』背后的原因
  7. 专访《王者荣耀》美术总监:用6年研究东方美学
  8. 《Detroit:Become Human》玩家情感故事背后的叙事魔法和体验设计
  9. 游戏中常用的寻路算法的分享(3):A*算法的实现
  10. 游戏编程新手教程:怪物AI设计简述