SpringBoot项目—整合mybatis+druid连接池

druid连接池的好处就不说了,可以自行百度下=-=,主要是我也是新手,下面挂一下自己的步骤和代码。(方面直接看的,直接从0开始搭建)

一:搭建springboot+mybatis框架

1:引入jar包

<!--web-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<!--连接驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!--druid数据源-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.28</version>
		</dependency>

以上为框架所需的所有jar包

2:创建mybatis-config文件,这个文件包含了数据源以及mybaits的设置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置全局属性 -->
	<settings>
		<!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
		<setting name="useGeneratedKeys" value="true" />

		<!-- 使用列别名替换列名 默认:true -->
		<setting name="useColumnLabel" value="true" />

		<!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
		<setting name="mapUnderscoreToCamelCase" value="true" />

		<!-- 打印查询语句 -->
		<setting name="logImpl" value="STDOUT_LOGGING" />

	</settings>

	<environments default="development">
		<environment id="development">
			<!-- 使用JDBC事务管理-->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="org.gjt.mm.mysql.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis "/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
</configuration>

因为这里使用druid数据源连接池,所以dataSource可以不用进行配置。

3:创建映射xml文件 AreaMapper.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="com.project.myo2o.mapper.AreaMapper">

	<select id="queryArea" resultType="com.project.myo2o.entity.Area">
		SELECT
		*
		FROM
		tb_area
		ORDER BY
		priority DESC
	</select>
</mapper>
<mapper namespace="com.project.myo2o.mapper.AreaMapper"> 命名空间为接口mapper的位置
<select id="queryArea" resultType="com.project.myo2o.entity.Area">id对应接口里面方法名,resultType对应查询出的结果集,可以自定义resultMap

4:创建mapper接口类

import com.project.myo2o.entity.Area;

import java.util.List;
@Mapper//必须标记为mapper
public interface AreaMapper {
    List<Area> queryArea();
}

二:加入druid连接池

1:编写数据源配置类DruidDBConfig

import java.sql.SQLException;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.alibaba.druid.pool.DruidDataSource;

@Configuration
public class DruidDBConfig {
    private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);


    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driverClassName}")
    private String driverClassName;

    @Value("${spring.datasource.initialSize}")
    private int initialSize;

    @Value("${spring.datasource.minIdle}")
    private int minIdle;

    @Value("${spring.datasource.maxActive}")
    private int maxActive;

    @Value("${spring.datasource.maxWait}")
    private int maxWait;

    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;

    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;

    @Value("${spring.datasource.validationQuery}")
    private String validationQuery;

    @Value("${spring.datasource.testWhileIdle}")
    private boolean testWhileIdle;

    @Value("${spring.datasource.testOnBorrow}")
    private boolean testOnBorrow;

    @Value("${spring.datasource.testOnReturn}")
    private boolean testOnReturn;

    @Value("${spring.datasource.poolPreparedStatements}")
    private boolean poolPreparedStatements;

    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
    private int maxPoolPreparedStatementPerConnectionSize;

    @Value("${spring.datasource.filters}")
    private String filters;

    @Value("{spring.datasource.connectionProperties}")
    private String connectionProperties;

    @Bean     //声明其为Bean实例
    @Primary  //在同样的DataSource中,首先使用被标注的DataSource
    public DataSource dataSource(){
        DruidDataSource datasource = new DruidDataSource();

        datasource.setUrl(this.dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);

        //configuration
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
        try {
            datasource.setFilters(filters);
        } catch (SQLException e) {
            logger.error("druid configuration initialization filter", e);
        }
        datasource.setConnectionProperties(connectionProperties);

        return datasource;
    }
}

@primary注解主要是为了mybatis在加载数据源的时候指定数据源为此dataSuorce类

2:创建application.yml文件

#配置mysql
spring:
  datasource:
    url: jdbc:mysql://localhost:3307/myo2o?useUnique=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driverClassName: com.mysql.jdbc.Driver
    #Druid连接池配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    filters: stat,wall,slf4j
    connectionProperties.druid.stat.mergeSql: true;
    connectionProperties.druid.stat.slowSqlMillis: 5000
#Mybatis
mybatis:
  #加载mybatis主要配置类
  config-location: classpath:mybatis/mybatis-config.xml
  #加载mapper配置类
  mapper-locations: classpath:mybatis/mapper/*.xml
  #加载mapper实体类
  type-aliases-package: com.project.myo2o.entity

yml里配置了连接池的数据以及数据库连接信息,mybatis创建dataSource实例时就会执行DruidDBConfig类,DruidDBConfig类会读取yml文件的内容写入。

mybatis:
  #加载mybatis主要配置类
  config-location: classpath:mybatis/mybatis-config.xml
  #加载mapper配置类
  mapper-locations: classpath:mybatis/mapper/*.xml
  #加载mapper实体类
  type-aliases-package: com.project.myo2o.entity

上面文件会扫描mabatis的配置文件。

基本有了上面的文件就可以运行了,不过druid连接池还可以进行监控,配置下面两个文件

DruidStatFilter.java

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import com.alibaba.druid.support.http.WebStatFilter;

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
        initParams={
                @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源
        }
)
public class DruidStatFilter extends WebStatFilter {

}
DruidStatViewServlet.java
import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns="/druid/*",
        initParams={
                @WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问)
                @WebInitParam(name="deny",value=""),// IP黑名单 (存在共同时,deny优先于allow)
                @WebInitParam(name="loginUsername",value="root"),// 用户名
                @WebInitParam(name="loginPassword",value="123"),// 密码
                @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
        })
public class DruidStatViewServlet extends StatViewServlet {
    private static final long serialVersionUID = -2688872071445249539L;
}

运行之后输入http://localhost:8080/druid/login.html 输入上面设置的用户名密码就可以登录查看了。

三:总结

源码上传到csdn,需要的可以下载查看。一个完整的框架,适合初学者

https://download.csdn.net/download/qq_36784299/10402440

猜你喜欢

转载自blog.csdn.net/qq_36784299/article/details/80250691