【springboot】--集成数据库mysql

一、前言说明

在项目中,数据库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版权协议,转载请附上原文出处链接和本声明。