spring 集成mybatis
1、pom.xml:
项目主要依赖的jar包有Spring核心包、Spring AOP包、MyBatis ORM包、MyBatis-Spring适配包、JSTL、JUnit、Log4j2等,具体的pom.xml文件如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.zhangguo</groupId> 5 <artifactId>BookStore</artifactId> 6 <version>0.0.1</version> 7 <packaging>war</packaging> 8 9 <properties> 10 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 11 <spring.version>4.3.0.RELEASE</spring.version> 12 </properties> 13 14 <dependencies> 15 <!--Spring框架核心库 --> 16 <dependency> 17 <groupId>org.springframework</groupId> 18 <artifactId>spring-context</artifactId> 19 <version>${spring.version}</version> 20 </dependency> 21 <!-- aspectJ AOP 织入器 --> 22 <dependency> 23 <groupId>org.aspectj</groupId> 24 <artifactId>aspectjweaver</artifactId> 25 <version>1.8.9</version> 26 </dependency> 27 <!-- Spring Web --> 28 <dependency> 29 <groupId>org.springframework</groupId> 30 <artifactId>spring-web</artifactId> 31 <version>${spring.version}</version> 32 </dependency> 33 <!--mybatis-spring适配器 --> 34 <dependency> 35 <groupId>org.mybatis</groupId> 36 <artifactId>mybatis-spring</artifactId> 37 <version>1.3.0</version> 38 </dependency> 39 <!--Spring java数据库访问包,在本例中主要用于提供数据源 --> 40 <dependency> 41 <groupId>org.springframework</groupId> 42 <artifactId>spring-jdbc</artifactId> 43 <version>${spring.version}</version> 44 </dependency> 45 <!--mysql数据库驱动 --> 46 <dependency> 47 <groupId>mysql</groupId> 48 <artifactId>mysql-connector-java</artifactId> 49 <version>5.1.38</version> 50 </dependency> 51 <!--log4j日志包 --> 52 <dependency> 53 <groupId>org.apache.logging.log4j</groupId> 54 <artifactId>log4j-core</artifactId> 55 <version>2.6.1</version> 56 </dependency> 57 <!-- mybatis ORM框架 --> 58 <dependency> 59 <groupId>org.mybatis</groupId> 60 <artifactId>mybatis</artifactId> 61 <version>3.4.1</version> 62 </dependency> 63 <!-- JUnit单元测试工具 --> 64 <dependency> 65 <groupId>junit</groupId> 66 <artifactId>junit</artifactId> 67 <version>4.10</version> 68 </dependency> 69 <!--c3p0 连接池 --> 70 <dependency> 71 <groupId>c3p0</groupId> 72 <artifactId>c3p0</artifactId> 73 <version>0.9.1.2</version> 74 </dependency> 75 <!-- jstl --> 76 <dependency> 77 <groupId>javax.servlet</groupId> 78 <artifactId>jstl</artifactId> 79 <version>1.2</version> 80 </dependency> 81 </dependencies> 82 </project>
spring-mybatis.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.1.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 12 <!-- 自动扫描 --> 13 <context:component-scan base-package="com.cn.hnust" /> 14 <!-- 引入配置文件 --> 15 <bean id="propertyConfigurer" 16 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 17 <property name="location" value="classpath:jdbc.properties" /> 18 </bean> 19 20 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 21 destroy-method="close"> 22 <property name="driverClassName" value="${driver}" /> 23 <property name="url" value="${url}" /> 24 <property name="username" value="${username}" /> 25 <property name="password" value="${password}" /> 26 <!-- 初始化连接大小 --> 27 <property name="initialSize" value="${initialSize}"></property> 28 <!-- 连接池最大数量 --> 29 <property name="maxActive" value="${maxActive}"></property> 30 <!-- 连接池最大空闲 --> 31 <property name="maxIdle" value="${maxIdle}"></property> 32 <!-- 连接池最小空闲 --> 33 <property name="minIdle" value="${minIdle}"></property> 34 <!-- 获取连接最大等待时间 --> 35 <property name="maxWait" value="${maxWait}"></property> 36 </bean> 37 38 <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> 39 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 40 <property name="dataSource" ref="dataSource" /> 41 <!-- 自动扫描mapping.xml文件 --> 42 <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property> 43 </bean> 44 45 <!-- DAO接口所在包名,Spring会自动查找其下的类 --> 46 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 47 <property name="basePackage" value="com.cn.hnust.dao" /> 48 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 49 </bean> 50 51 <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> 52 <bean id="transactionManager" 53 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 54 <property name="dataSource" ref="dataSource" /> 55 </bean> 56 57 </beans>
spring配置:
1 <context:property-placeholder location="classpath:jdbc.properties" /> 2 3 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- 数据库驱动 --> 4 <property name="driverClassName" value="${jdbc.driverClassName}" />
<!-- 数据库链接地址 --> 5 <property name="url" value="${jdbc.url}" /> 6 <property name="username" value="${jdbc.username}" /> 7 <property name="password" value="${jdbc.password}" /> 8 9 <!-- 默认值是 0, 连接池创建连接的初始连接数目 --> 10 <property name="initialSize" value="2" /> 11 <!-- 默认是 0, 连接数中最小空闲连接数 --> 12 <property name="minIdle" value="2" /> 13 <!-- 默认值是 8, 连接池中同时可以分派的最大活跃连接数 --> 14 <property name="maxActive" value="8" /> 15 <!-- 默认是 8 ,连接池中最大空闲连接数 --> 16 <property name="maxIdle" value="5" /> 17 <!-- 默认值是无限大,当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 ( 在抛异常之前 ) --> 18 <property name="maxWait" value="60000" /> 19 <!-- 默认值是 false, 是否清理 removeAbandonedTimeout 秒没有使用的活动连接 , 清理后并没有放回连接池 --> 20 <property name="removeAbandoned" value="true" /> 21 <!-- 默认值是 300( 秒 ), 活动连接的最大空闲时间 --> 22 <property name="removeAbandonedTimeout" value="180" /> 23 <!-- 当建立一个数据库连接的时候,这些属性参数将传给 jdbc driver,参数的形式必须是 [propertypropertyName=property;]*。 24 <property name="connectionProperties"> 25 <value>clientEncoding=utf-8</value> 26 </property> 27 --> 28 29 <!-- validate配置,重连配置 --> 30 <!-- 默认值是 false, 当连接池中的空闲连接是否有效 --> 31 <property name="testWhileIdle" value="true" /> 32 <!-- 默认值是 true ,当从连接池取连接时,验证这个连接是否有效 --> 33 <property name="testOnBorrow" value="true" /> 34 <!-- 默认值是 flase, 当从把该连接放回到连接池的时,验证这个连接是否有效 --> 35 <property name="testOnReturn" value="false" /> 36 <!-- 验证连接是否成功, SQL SELECT 指令至少要返回一行 --> 37 <property name="validationQuery"> 38 <value>select current date from sysibm.SYSDUMMY1</value> 39 </property> 40 <!-- 在执行检查时超时设置,通过statement 设置,statement.setQueryTimeout(validationQueryTimeout) --> 41 <property name="validationQueryTimeout" value="1" /> 42 <!-- 默认值是 -1 ,每隔一段多少毫秒跑一次回收空闲线程的线程 --> 43 <property name="timeBetweenEvictionRunsMillis" value="60000" /> 44 <!-- 默认值是 3 ,每次验证空闲连接的连接数目 --> 45 <property name="numTestsPerEvictionRun" value="8" /> 46 </bean>
DBCP数据源:
DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。下面是使用DBCP配置MySql数据源的配置片断:
1 xml 代码 2 3 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 6 7 <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 8 9 <property name="url" value="jdbc:mysql://localhost:3309/sampledb" /> 10 11 <property name="username" value="root" /> 12 13 <property name="password" value="1234" />
BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。
除以上必须的数据源属性外,还有一些常用的属性:
defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;
defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;
maxActive:最大连接数据库连接数,设置为0时,表示没有限制;
maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;
maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;
validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select count(*) from user”;
removeAbandoned:是否自我中断,默认是 false ;
removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;
logAbandoned:是否记录中断事件, 默认为 false;
application.properties:
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://127.0.0.1:3306/mytest 3 username=root 4 password=123456 5 6 idleConnectionTestPeriod=60 7 maxIdleTime=240 8 acquireIncrement=5 9 initialPoolSize=10 10 maxPoolSize=30 11 minPoolSize=10 12 autoCommitOnClose=false 13 checkoutTimeout=1000 14 acquireRetryAttempts=2