一、前言说明
在项目中,数据库Mysql是最常见的数据存储。在介绍集成mysql时,往往还伴随有jdbc、Druid、mybatis等技术字眼,它们之间的关系是:
像现在常见的springboot集成mysql、mybatis等就是很方便的配置即可使用,上述的关系图是帮助理解各个技术栈的关联。
二、集成mysql+mybatis
需要的所有jar包
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--导入 JDBC 场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- 启用druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
properties配置
#mysql
spring.datasource.url = jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = root
#mybatis
mybatis.mapper-locations=classpath:mapper/*.xml
#扫描实体类的位置,在此处指明扫描实体类的包,在 mapper.xml 中就可以不写实体类的全路径名
mybatis.type-aliases-package=com.wwy.entity
application启动类配置注解
@MapperScan(basePackages = {"com.wwy.*"}) //是mybatis的扫描mapper接口所在包
Dao层和sql的xml文件位置
例如personMapper.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">
<!--namespace代表这个*mapper.xml文件指向哪个接口-->
<mapper namespace="com.wwy.dao.PersonMapper">
<resultMap id="BaseResultMap" type="com.wwy.entity.PersonPo">
<id column="PersonID" jdbcType="INTEGER" property="PersonID" />
<result column="LastName" jdbcType="VARCHAR" property="LastName" />
<result column="FirstName" jdbcType="VARCHAR" property="FirstName" />
<result column="Address" jdbcType="VARCHAR" property="Address" />
<result column="City" jdbcType="VARCHAR" property="City" />
</resultMap>
<sql id="Base_Column_List">
PersonID, LastName, FirstName, Address,City
</sql>
<!--select表示查询,它的id名称必须与DAO层接口的方法名相同,否则无法绑定-->
<!-- 通过用户名来进行唯一查找 -->
<select id="selectPersonById" parameterType= "Integer" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from persons where PersonID = #{id}
</select>
<insert id="insertPerson" parameterType="com.wwy.entity.PersonPo">
insert into persons (PersonID, LastName, FirstName, Address, City)
values (#{PersonID}, #{LastName}, #{FirstName}, #{Address}, #{City})
</insert>
<delete id="delPerson" parameterType="com.wwy.entity.PersonPo">
delete from persons
where PersonID = #{PersonID}
</delete>
</mapper>
单纯利用mysql,那么直接service层使用Dao即可
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
PersonMapper personMapper;
@Override
public PersonPo getPersonById(Integer id) {
PersonPo person = personMapper.selectPersonById(id);
return person;
}
/**
* 某个用户 插入的记录
*/
@Override
public void insertPerson(String userId,PersonPo person){
personMapper.insertPerson(person);
}
@Override
public void delPerson(String userId, PersonPo person) {
personMapper.delPerson(person);
}
}
三、集成Druid数据源
3.1、说明
spring-boot-starter-data-jdbc启动器默认引入了一个数据源:HikariCP。可以根据自己项目特色集成相关的数据源。
Druid数据源是阿里推出的高性能产品,不仅支持所有 JDBC 兼容的数据库,包括 Oracle、MySQL、SQL Server 和 H2 等,还加入了强大的监控功能【实时观察数据库连接池和 SQL 的运行情况】。
Springboot整合Durid是通过starter启动器方式。
----说明:这里介绍Druid数据源,是使用其强大的监控功能。
3.2、集成代码实现
properties配置如下
# 数据库访问配置, 使用druid数据源
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
#springboot2.x版本、MySQL8.X版本的驱动需要使用com.mysql.cj.jdbc.Driver; 老的com.mysql.jdbc.Driver 废弃了。
#spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 连接等待超时时间
spring.datasource.maxWait=60000
# 配置检测可以关闭的空闲连接间隔时间
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置连接在池中的最小生存时间
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
## 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#开启 SQL 监控
spring.datasource.druid.filter.stat.enabled=true
#慢查询
spring.datasource.druid.filter.stat.slow-sql-millis=1000
#记录慢查询 SQL
spring.datasource.druid.filter.stat.log-slow-sql=true
#开启防火墙
spring.datasource.druid.filter.wall.enabled=true
application启动类配置
@ImportResource(locations = { "classpath:druid-bean.xml" }) //主要开启druid中“spring监控”
druid-bean.xml的配置信息是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置_Druid和Spring关联监控配置 -->
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/>
<!-- 方法名正则匹配拦截配置 -->
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.wwy.dao.*</value>
</list>
</property>
</bean>
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
</aop:config>
</beans>
configuration配置如下
@Configuration
public class DruidConfig {
/**
* 开启 Druid 内置监控页面 【接着才会有其他子菜单开启权限】
*/
@Bean
public ServletRegistrationBean statViewServlet() {
StatViewServlet statViewServlet = new StatViewServlet();
//向容器中注入 StatViewServlet,并将其路径映射设置为 /druid/*
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(statViewServlet, "/druid/*");
//配置监控页面访问的账号和密码(选配)
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
return servletRegistrationBean;
}
}
按照上面操作,就可以登录druid界面,地址是http://localhost:8084/druid/
3.3、应用说明
开启Druid监控页面的SQL监控/SQL防火墙/慢SQL等等,上面配置已经有了,可以自行操作。
对于一些公司没额外数据库监控系统,那么可以使用Druid监控功能来监控数据库的情况。
版权声明:本文为xunmengyou1990原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。