Java Web --- Spring boot 整合 mybatis, druid

tech2026-06-13  2

一、搭建框架

新建项目,初始项目框架选择

Druid介绍

Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等连接池,而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考验,这才收获了大家的青睐!

Spring boot配置Druid

话不多说,下面开始在我们的项目中配置Druid。本篇博客在上一篇博客Spring boot 整合Mybatis的基础上配置Druid,关于Mybatis连接数据库的内容就不多说了。

添加依赖

在我们项目的pom.xml文件中添加如下的依赖:

 

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

这里需要注意的是(很多人出错的原因),Druid还有另外一种依赖如下:

 

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

两种依赖都可以,但是配置的方式有些不同,使用下面的这种依赖项,在配置的时候需要新建Druid的配置类文件,而第一种依赖项则不需要,这里我使用的就是第一种--更简单,第二种就不介绍了,想了解的朋友请自行Google。

添加配置

我看网上的教程这一块写的都很模糊,直接上来就是一堆配置,也没有表明配置是什么意思,这对于喜欢复制粘贴的人来说很nice但是真的不利于我们掌握理解,所以我这里尽量分层给大家介绍的更清晰一些。

首先在项目的配置文件application.properties文件中添加如下内容,表明使用Druid连接池:

 

#表明使用Druid连接池 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 配置数据源信息(整合Mybatis的时候已经说过了,为了连贯性这里再提一遍)

 

#配置实体类的位置 mybatis.type-aliases-package=com.web.springbootmybatis.entity #xml文件位置 mybatis.mapper-locations=classpath:mapper/*.xml #mysql数据库连接信息配置 #mysql驱动 spring.datasource.driverClassName=com.mysql.jdbc.Driver #数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/eran?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 #数据库用户名 spring.datasource.username=root #数据库密码 spring.datasource.password=root 接下来配置连接池的相关属性,这些参数根据自己的需要灵活配置即可:

 

#初始化时建立物理连接的个数。 spring.datasource.druid.initial-size=5 #最大连接池数量 spring.datasource.druid.max-active=20 #最小连接池数量 spring.datasource.druid.min-idle=5 #获取连接时最大等待时间,单位毫秒 spring.datasource.druid.max-wait=3000 #是否缓存preparedStatement,也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。 spring.datasource.druid.pool-prepared-statements=false #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 spring.datasource.druid.max-open-prepared-statements= -1 #配置检测可以关闭的空闲连接间隔时间 spring.datasource.druid.time-between-eviction-runs-millis=60000 # 配置连接在池中的最小生存时间 spring.datasource.druid.min-evictable-idle-time-millis= 300000 spring.datasource.druid.max-evictable-idle-time-millis= 400000

通过别名的方式配置扩展插件,常用的插件有:

别名含义stat监控统计log4j日志wall防御sql注入

这里我们就配置了stat和wall,配置多个英文逗号分隔,配置如下:

#监控统计的stat,以及防sql注入的wall spring.datasource.druid.filters= stat,wall #Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔 spring.datasource.druid.aop-patterns= com.web.springbootdruid.service.*

这里配置很重要,比如不配置stat,我们在Druid的监控页面中就拿不到想要的信息。

上边我们开启stat监控统计插件,下边进行监控配置:

 

#是否启用StatFilter默认值true spring.datasource.druid.web-stat-filter.enabled= true #添加过滤规则 spring.datasource.druid.web-stat-filter.url-pattern=/* #忽略过滤的格式 spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/* StatViewServlet配置:Druid内置提供了一个StatViewServlet用于展示Druid的统计信息,StatViewServlet的用途包括: 提供监控信息展示的html页面提供监控信息的JSON API

配置如下,需要注意的是用户名和密码:

 

#是否启用StatViewServlet默认值true spring.datasource.druid.stat-view-servlet.enabled= true #访问路径为/druid时,跳转到StatViewServlet spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* # 是否能够重置数据 spring.datasource.druid.stat-view-servlet.reset-enable=false # 需要账号密码才能访问控制台,默认为root spring.datasource.druid.stat-view-servlet.login-username=druid spring.datasource.druid.stat-view-servlet.login-password=druid #IP白名单 spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 # IP黑名单(共同存在时,deny优先于allow) spring.datasource.druid.stat-view-servlet.deny=

到这里,关于Druid的配置就基本完成了,想要了解更多的朋友,可以去查阅官方文档【传送门】

验证Druid

我们直接启动项目,浏览器访问localhost:8080/druid或者127.0.0.1:8080/druid得到如下页面说明配置成功:

在这里插入图片描述

进入Druid的登陆页面,输入我们在配置文件中配置的用户名和密码登陆,进入下面的页面:

在这里插入图片描述

首页可以看到一些基本配置信息,点击菜单栏中的数据源可以查看到我们的数据源配置信息,以及连接池配置信息:

在这里插入图片描述

点击sql监控,查看执行sql信息:

二、添加代码

在包下创建目录 controller, dao, entity, service 如下图

数据库sql

CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `usercode` varchar(32) NOT NULL COMMENT '账号', `username` varchar(64) NOT NULL COMMENT '姓名', `password` varchar(32) NOT NULL COMMENT '密码', `salt` varchar(64) DEFAULT NULL COMMENT '盐', `locked` char(1) DEFAULT NULL COMMENT '账号是否锁定,1:锁定,0未锁定', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO `sys_user` VALUES ('1', 'Promise', 'eran', '123456', null, '0');

SysUser.java

package cn.springboottest.sbdruidmybatis03.entity; public class SysUser { private static final long serialVersionUID = 1L; private Long id; //主键 : id private String usercode; //账号 : usercode private String username; //姓名 : username private String password; //密码 : password private String salt; //盐 : salt private String locked; //账号是否锁定,1:锁定,0未锁定 : locked public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsercode() { return usercode; } public void setUsercode(String usercode) { this.usercode = usercode; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSalt() { return salt; } public void setSalt(String salt) { this.salt = salt; } public String getLocked() { return locked; } public void setLocked(String locked) { this.locked = locked; } }

SysUserMapper.java           dao层接口

package cn.springboottest.sbdruidmybatis03.dao; import cn.springboottest.sbdruidmybatis03.entity.SysUser; import org.springframework.stereotype.Repository; @Repository public interface SysUserMapper { public SysUser findById(Long id); }

SysUserMapper.xml

由于我使用的是xml版,所以需要添加xml文件,这里只是简单写一下,实际开发中,这些文件我们都是利用插件自动生成的

<?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="cn.springboottest.sbdruidmybatis03.dao.SysUserMapper"> <resultMap id="sysUser" type="cn.springboottest.sbdruidmybatis03.entity.SysUser"> <result column="id" property="id" /> <result column="usercode" property="usercode" /> <result column="username" property="username" /> <result column="password" property="password" /> <result column="salt" property="salt" /> <result column="locked" property="locked" /> </resultMap> <select id="findById" parameterType="java.lang.Long" resultMap="sysUser"> SELECT id, usercode, username, password, salt, locked FROM sys_user WHERE id=#{id} </select> </mapper>

ISysUserService.java

service接口

package cn.springboottest.sbdruidmybatis03.service; import cn.springboottest.sbdruidmybatis03.entity.SysUser; public interface ISysUserService { SysUser findById(Long id); }

SysUserServiceImpl.java

service接口实现

package cn.springboottest.sbdruidmybatis03.service.impl; import cn.springboottest.sbdruidmybatis03.dao.SysUserMapper; import cn.springboottest.sbdruidmybatis03.entity.SysUser; import cn.springboottest.sbdruidmybatis03.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("sysUserService") public class SysUserServiceImpl implements ISysUserService { private SysUserMapper sysUserMapper; @Override public SysUser findById(Long id) { // TODO Auto-generated method stub return sysUserMapper.findById(id); } }

TestController.java

控制器

package cn.springboottest.sbdruidmybatis03.controller; import cn.springboottest.sbdruidmybatis03.entity.SysUser; import cn.springboottest.sbdruidmybatis03.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private ISysUserService sysUserService; @RequestMapping("/user") public SysUser getUser() { return sysUserService.findById(1L); } }

添加注解扫描dao层

在启动类中添加注解@MapperScan()注解配置扫描dao层位置,里边的值根据实际情况填写。

package cn.springboottest.sbdruidmybatis03; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("cn.springboottest.sbdruidmybatis03.dao") //该注解表示 程序启动时扫描 dao 使得 SysUserMapper.java 与 .xml文件匹配 public class Sbdruidmybatis03Application { public static void main(String[] args) { SpringApplication.run(Sbdruidmybatis03Application.class, args); } }

此时项目的结构为:

修改 pom.xml 文件,增加如下内容(不然dao 接口会映射不上)

最后运行结果如下:

最新回复(0)