【Java】SpringMVC集成mybatis 连接池c3p0和druid分别实验

来源:互联网 发布:cf画面优化是什么意思 编辑:程序博客网 时间:2024/06/08 04:00

1.pom.xml

Spring框架包 mybatis包 AOP包 aspectj包 aopalliance包

<!-- mysql start --><dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.6</version>  </dependency>  <!-- mysql end --><!-- 连接池  支持oracle  mysql--><dependency>      <groupId>com.alibaba</groupId>      <artifactId>druid</artifactId>      <version>1.1.5</version>  </dependency> <!--或者--><dependency>    <groupId>com.mchange</groupId>    <artifactId>c3p0</artifactId>    <version>0.9.5-pre10</version></dependency><!-- 连接池 end --><!--mybatis --><dependency>    <groupId>org.mybatis</groupId>    <artifactId>mybatis</artifactId>    <version>3.2.2</version></dependency><dependency>    <groupId>org.mybatis</groupId>    <artifactId>mybatis-spring</artifactId>    <version>1.2.0</version></dependency>
2.web.xml:
<!-- druid -->    <servlet>        <servlet-name>DruidStatView</servlet-name>        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>DruidStatView</servlet-name>        <url-pattern>/druid/*</url-pattern>    </servlet-mapping>
3.application.properties
jdbc.mysql.driverClass=com.mysql.jdbc.Driverjdbc.mysql.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mybatisjdbc.mysql.user=xxxxxjdbc.mysql.password=xxxxxxjdbc.mysql.maxPoolSize=20jdbc.mysql.maxIdleTIme=1000jdbc.mysql.minPoolSize=6jdbc.mysql.initalPoolSize=5
4.applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache-4.0.xsd"><context:property-placeholder location="classpath:application.properties" /><context:annotation-config /><!-- 使用annotation 自动注册bean,并保证@Required,@Autowired,@Resource的属性被注入 --><context:component-scan base-package="com.naton" /><import resource="spring-mysql.xml"/><import resource="spring-aop.xml"/><!-- 多文件上传 --><!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> --><bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /></beans>
5.spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd       http://www.springframework.org/schema/aop       http://www.springframework.org/schema/aop/spring-aop-3.2.xsd       ">       <!-- spring aop -->   <aop:aspectj-autoproxy /></beans>
6.spring-mysql.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/spring-mvc.xsd              http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd              http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd              http://mybatis.org/schema/mybatis-spring  http://mybatis.org/schema/mybatis-spring.xsd">    <!-- 开启注解 -->    <context:annotation-config />        <!-- 一、使用数据库连接池注册数据源,引入相关的配置文件 暂时用c3p0 -->    <import resource="c3p0.xml"/>        <!-- 二、创建mybatis会话工厂 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="cpdataSource" />        <property name="configLocation" value="classpath:mybatis-config.xml"></property>      </bean>     <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="cpdataSource" />    </bean><tx:annotation-driven transaction-manager="transactionManager"/> <!-- 三、创建mybatis会话template -->    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">       <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>    </bean>    <!-- 注册接口类的bean,使得程序中可以用注解方式获取 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">       <property name="basePackage" value="com.naton.dao" />    </bean>  </beans>
7.mybatis-config.xml
<?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>      <mappers>          <mapper resource="com/naton/dao/mapper/UserMapper.xml"/>      </mappers>  </configuration>

8.c3p0.xml配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 一、使用c3p0连接池注册数据源 -->    <bean id="cpdataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">       <!-- 基础配置 -->       <property name="jdbcUrl" value="${jdbc.mysql.jdbcUrl}"></property>     <property name="driverClass" value="${jdbc.mysql.driverClass}"></property>     <property name="user" value="${jdbc.mysql.user}"></property>     <property name="password" value="${jdbc.mysql.password}"></property>     <!-- 关键配置 -->     <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->     <property name="initialPoolSize" value="3"></property>     <!--连接池中保留的最小连接数。Default: 2 -->     <property name="minPoolSize" value="2"></property>     <!--连接池中保留的最大连接数。Default: 15 -->     <property name="maxPoolSize" value="15"></property>     <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->     <property name="acquireIncrement" value="3"></property>     <!-- 性能配置 -->     <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->     <property name="maxStatements" value="8"></property>     <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->     <property name="maxStatementsPerConnection" value="5"></property>     <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->     <property name="maxIdleTime" value="1800"></property>    </bean></beans>
9.实验过程:
package com.naton.controller;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.naton.dao.UserMapper;import com.naton.pojo.po.User;import com.naton.service.TxTestService;@Controllerpublic class MybatisController {        @Autowired    TxTestService txTestService;        @RequestMapping(value = "/mybatis/text")    @ResponseBody    public String text(HttpServletRequest request) {        return "{\"what\":\"hi\"}";    }            @RequestMapping(value = "/mybatis/InsertTest")    @ResponseBody    public String test(HttpServletRequest request) {         txTestService.insert();                return "";    }}package com.naton.service;import java.util.UUID;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.naton.dao.UserMapper;import com.naton.pojo.po.User;@Transactional@Servicepublic class TxTestService {    @Autowired    UserMapper userMapper;    public void insert() {        for (int i = 0; i < 100; i++) {            User u = new User();            u.setUsername(UUID.randomUUID().toString());            u.setPassword(UUID.randomUUID().toString());            userMapper.insert(u);        }                        throw new RuntimeException();    }        }

UserMapper.java、 User.java、UserMapper.xml都是通过之前介绍的工具生成好的http://blog.csdn.net/jack_eusong/article/details/78537125

//UserMapper.javapackage com.naton.dao;import org.springframework.stereotype.Service;import com.naton.pojo.po.User;@Servicepublic interface UserMapper {    int deleteByPrimaryKey(Integer id);    int insert(User record);    int insertSelective(User record);    User selectByPrimaryKey(Integer id);    int updateByPrimaryKeySelective(User record);    int updateByPrimaryKey(User record);}package com.naton.pojo.po;//User.javapublic class User {    private Integer id;    private String username;    private String password;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username == null ? null : username.trim();    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password == null ? null : password.trim();    }}//UserMapper.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.naton.dao.UserMapper" >  <resultMap id="BaseResultMap" type="com.naton.pojo.po.User" >    <id column="ID" property="id" jdbcType="INTEGER" />    <result column="username" property="username" jdbcType="VARCHAR" />    <result column="password" property="password" jdbcType="VARCHAR" />  </resultMap>  <sql id="Base_Column_List" >    ID, username, password  </sql>  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >    select     <include refid="Base_Column_List" />    from tb_user    where ID = #{id,jdbcType=INTEGER}  </select>  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >    delete from tb_user    where ID = #{id,jdbcType=INTEGER}  </delete>  <insert id="insert" parameterType="com.naton.pojo.po.User" >    insert into tb_user (ID, username, password      )    values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}      )  </insert>  <insert id="insertSelective" parameterType="com.naton.pojo.po.User" >    insert into tb_user    <trim prefix="(" suffix=")" suffixOverrides="," >      <if test="id != null" >        ID,      </if>      <if test="username != null" >        username,      </if>      <if test="password != null" >        password,      </if>    </trim>    <trim prefix="values (" suffix=")" suffixOverrides="," >      <if test="id != null" >        #{id,jdbcType=INTEGER},      </if>      <if test="username != null" >        #{username,jdbcType=VARCHAR},      </if>      <if test="password != null" >        #{password,jdbcType=VARCHAR},      </if>    </trim>  </insert>  <update id="updateByPrimaryKeySelective" parameterType="com.naton.pojo.po.User" >    update tb_user    <set >      <if test="username != null" >        username = #{username,jdbcType=VARCHAR},      </if>      <if test="password != null" >        password = #{password,jdbcType=VARCHAR},      </if>    </set>    where ID = #{id,jdbcType=INTEGER}  </update>  <update id="updateByPrimaryKey" parameterType="com.naton.pojo.po.User" >    update tb_user    set username = #{username,jdbcType=VARCHAR},      password = #{password,jdbcType=VARCHAR}    where ID = #{id,jdbcType=INTEGER}  </update></mapper>
  1. 启动程序,访问http://localhost:8080/mybatis/InsertTest,运行后,到数据库中看了一下,确实插入了100条数据。整合完成。

11.实验druid部分

druid.xml 注意druid 的id与之前c3p0中的id是一样的,主要是为了快速切换,少改东西。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <!-- 一、使用druid数据库连接池注册数据源 -->  <bean id="cpdataSource" class="com.alibaba.druid.pool.DruidDataSource">     <!-- 基础配置 -->     <property name="url" value="${jdbc.mysql.jdbcUrl}"></property>     <property name="driverClassName" value="${jdbc.mysql.driverClass}"></property>     <property name="username" value="${jdbc.mysql.user}"></property>     <property name="password" value="${jdbc.mysql.password}"></property>     <!-- 关键配置 -->     <!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 -->      <property name="initialSize" value="3" />      <!-- 最小连接池数量 -->      <property name="minIdle" value="2" />      <!-- 最大连接池数量 -->      <property name="maxActive" value="15" />     <!-- 配置获取连接等待超时的时间 -->      <property name="maxWait" value="10000" />     <!-- 性能配置 -->     <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->      <property name="poolPreparedStatements" value="true" />      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />     <!-- 其他配置 -->     <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->      <property name="timeBetweenEvictionRunsMillis" value="60000" />     <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->      <property name="minEvictableIdleTimeMillis" value="300000" />     <!--   建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,               执行validationQuery检测连接是否有效。 -->     <property name="testWhileIdle" value="true" />     <!-- 这里建议配置为TRUE,防止取到的连接不可用 ,申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->      <property name="testOnBorrow" value="true" />      <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->     <property name="testOnReturn" value="false" />     </bean></beans>

将spring-mysql.xml中的

<!-- 一、使用数据库连接池注册数据源,引入相关的配置文件 -->    <import resource="c3p0.xml"/>    改成   <import resource="druid.xml"/>

运行程序:到数据库中查看 数据 成功插入,配置完成。

附录:完整的pom配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.naton</groupId>  <artifactId>mavenexample</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>    <properties><!-- spring版本号 --><spring.version>4.2.9.RELEASE</spring.version><aspectj.version>1.6.10</aspectj.version><tomcat.version>8.0.39</tomcat.version></properties><dependencies><dependency>    <groupId>dom4j</groupId>    <artifactId>dom4j</artifactId>    <version>1.6.1</version></dependency><dependency>    <groupId>org.apache.tomcat</groupId>    <artifactId>tomcat-catalina</artifactId>    <version>${tomcat.version}</version>    <scope>provided</scope></dependency><dependency>    <groupId>commons-configuration</groupId>    <artifactId>commons-configuration</artifactId>    <version>1.10</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version></dependency><dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-lang3</artifactId>    <version>3.4</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.41</version></dependency><dependency>    <groupId>net.sf.json-lib</groupId>    <artifactId>json-lib</artifactId>    <version>2.4</version>    <classifier>jdk15</classifier></dependency><!-- URL Rewrite --><dependency>    <groupId>org.tuckey</groupId>    <artifactId>urlrewritefilter</artifactId>    <version>4.0.4</version></dependency><!-- thymeleaf start --><dependency>            <groupId>org.thymeleaf</groupId>            <artifactId>thymeleaf</artifactId>            <version>2.1.5.RELEASE</version>        </dependency>        <dependency>            <groupId>org.thymeleaf</groupId>            <artifactId>thymeleaf-spring4</artifactId>            <version>2.1.5.RELEASE</version>        </dependency>        <dependency>            <groupId>org.thymeleaf.extras</groupId>            <artifactId>thymeleaf-extras-springsecurity3</artifactId>            <version>2.1.2.RELEASE</version>        </dependency><!-- thymeleaf end --><!-- 日志 --><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-api</artifactId>    <version>1.7.25</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <version>1.7.25</version></dependency><!-- shiro --><dependency>    <groupId>commons-logging</groupId>    <artifactId>commons-logging</artifactId>    <version>1.1.3</version></dependency><dependency>    <groupId>org.apache.shiro</groupId>    <artifactId>shiro-core</artifactId>    <version>1.2.2</version></dependency><dependency>    <groupId>org.apache.shiro</groupId>    <artifactId>shiro-web</artifactId>    <version>1.2.2</version></dependency><dependency>    <groupId>org.apache.shiro</groupId>    <artifactId>shiro-ehcache</artifactId>    <version>1.2.2</version></dependency><dependency>    <groupId>org.apache.shiro</groupId>    <artifactId>shiro-spring</artifactId>    <version>1.2.2</version></dependency> <!-- shiro end --><!-- mongodb drive start --><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>2.13.1</version></dependency>            <!-- mongodb drive end --><!-- morphia start --><dependency><groupId>org.mongodb.morphia</groupId><artifactId>morphia</artifactId><version>1.0.1</version></dependency><dependency><groupId>com.thoughtworks.proxytoys</groupId><artifactId>proxytoys</artifactId><version>1.0</version><type>jar</type><optional>true</optional></dependency><!-- morphia end --><!-- redis start --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><!-- redis end --><!-- oracle start--><dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.4.0</version></dependency><!-- oracle end--><!-- mysql start --><dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.6</version>  </dependency>  <!-- mysql end --><!-- 连接池  支持oracle  mysql--><dependency>      <groupId>com.alibaba</groupId>      <artifactId>druid</artifactId>      <version>1.1.5</version>  </dependency> <!-- 连接池 end --><dependency>        <groupId>com.mchange</groupId>        <artifactId>c3p0</artifactId>        <version>0.9.5-pre10</version>        </dependency><!--mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.2.2</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.2.0</version>        </dependency>        <!--mybatis end --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency> <!-- 支持@Transactional --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency>    <groupId>aopalliance</groupId>    <artifactId>aopalliance</artifactId>    <version>1.0</version></dependency><!-- 映入JSON --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.7.4</version></dependency><!-- httpClient-->   <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>





阅读全文
0 0
原创粉丝点击