java mybatis-spring整合案例

(MyBatis-Spring整合案例)

案例使用maven-web工程搭建,使用mvc架构javascript

工程建立截图

在这里插入图片描述

配置相关文件

在这里插入图片描述

导入相关依赖包 pom.xml

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.pxg</groupId>
  <artifactId>Job20190426</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Archetype - Job20190426</name>
  <url>http://maven.apache.org</url>
  <dependencies>
  <!-- spring核心包 -->
  	<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.2.RELEASE</version>
		</dependency>
		<!-- 数据库链接 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.2.RELEASE</version>
		</dependency>
		<!-- 切面使用 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.3.2.RELEASE</version>
		</dependency>
		<!-- 事务提交 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.3.2.RELEASE</version>
		</dependency>
		<!-- mybatis框架使用 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.1</version>
		</dependency>
		<!-- 测试使用 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<!-- 数据查询分页 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.1.4</version>
		</dependency>
		<!-- 阿里巴巴链接数据库使用 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.22</version>
		</dependency>
		<!-- mybatis整合spring使用 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>
		<!-- 日志使用 -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.6.1</version>
		</dependency>
  </dependencies>
</project>

建立ApplicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
	<!-- 1.自动扫描组件 扫描包 -->
	<context:component-scan base-package="com.pxg.*"></context:component-scan>
	<!-- 引入数据库数据源 -->
	<context:property-placeholder location="classpath:db.properties" />
	<!-- 2.配置基本属性 username/password/ 链接池 -->
	<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>  
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<!-- 配置初始化大小,最小,最大 -->
		<property name="initialSize" value="1"></property>
		<property name="minIdle" value="10"></property>
		<property name="maxActive" value="30"></property> 
		<!-- 配置获取链接等待超时的时间 -->
		<property name="timeBetweenEvictionRunsMillis" value="60000"></property> 
		<!-- 配置间隔多久才进行一次检测,检测须要关闭的空闲时间,单位毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="300000"></property>
		<property name="testWhileIdle" value="false"></property>
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		<!-- 打开PSCache,而且指定每一个链接上PSCache的大小  -->
		<property name="poolPreparedStatements" value="false"/>
		<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
		<property name="defaultAutoCommit" value="true" />
		<property name="validationQueryTimeout" value="60000"/>
		<!-- 数据库链接有效性 -->
		<property name="validationQuery" value="select 1 from dual" />
	</bean>
	<!-- 3.配置链接池 数据源 -->
	<bean id="dataSoure_druid" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
		<property name="targetDataSource" ref="druidDataSource"></property>
	</bean>
	<!--4.建立一个sql会话工厂bean,指定数据源 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 指定数据源 -->
		<property name="dataSource" ref="dataSoure_druid"></property>
		<!-- 指定MyBatis核心配置文件地址 -->
		 <property name="configLocation" value="classpath:MyBatisConfig.xml"></property> 
		<!-- 自动扫描mapping.xml文件,注意这里的classpath后面是* 必需要的 -->
		<property name="mapperLocations" value="classpath*:com/pxg/mapper/*Mapper.xml"></property>
		<!-- pojo所在包,为pojo类取别名,别名就为类名 -->
		<property name="typeAliasesPackage" value="com.pxg.model"></property>
		<!-- 真核pageHelper分页插件 -->
		<property name="plugins">
			<array>
				<!-- 插件类型 -->
				<bean class="com.github.pagehelper.PageInterceptor">
					<property name="properties" value="helperDialect=oracle"></property>
				</bean>
			</array>
		</property>
	</bean>
	<!--5. MyBtis DAO所在包名,Spring或自动查找旗下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 数据源 -->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
		<!-- MyBatis DAO接口所在包名,nasePackage指定的包下面的类会自动查找 -->
		<property name="basePackage" value="com.pxg.dao" />
	</bean>
	<!-- 6.事务管理 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSoure_druid"></property>
	</bean>
	<!-- 7.配置事务管理 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 排除事务方法 -->
			<tx:method name="get*" propagation="NEVER"/>
			<tx:method name="set*" propagation="NEVER"/>
			<tx:method name="find*" propagation="NEVER"/>
			<tx:method name="select*" propagation="NEVER"/>
			<tx:method name="query*" propagation="NEVER"/>
			<!-- 自动管理事务的方法 -->
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="insert*" propagation="REQUIRED"/>
			<tx:method name="del*" propagation="REQUIRED"/>
			<!-- 其余状况下默认 -->
			<tx:method name="*" propagation="SUPPORTS"/>
		</tx:attributes>
	</tx:advice>
	<!-- 8.事务切入到业务逻辑层 -->
	<aop:config>
		<aop:pointcut expression="execution(* com.pxg.service.*.*(..))" id="txPointcut" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
	</aop:config>
	<!-- 另外一种方法开启事务、开启事务管理 -->
	<!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
</beans>

案例使用oracle数据库,db.properties文件配置java

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=scott
jdbc.password=sasa

在配置使用 ApplicationContext.xml文件中mysql

<property name="validationQuery" value="select 1 from dual" />

若是使用的为mysql数据库配置为git

<property name="validationQuery" value="select 1 " />

若是使用其余数据库执行查阅资料github

配置日志文件 log4j.properties

这个日志文件配置了数据库输出日志,如需使用可开启注释,链接本身数据库便可web

#rootLogger debug 级别,stdout控制台,file 日志文件   db为使用类添加 DATABASE为包中添加
log4j.rootLogger=debug,stdout,file
#添加控制台追加器
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#添加控制台输出格式为自定义格式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#自定义格式内容
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%L %l %M %p %m %c %t %F %n

log4j.logger.com.mybatis=DEBUG
#输出sql语句
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#添加日志文件追加器
log4j.appender.file=org.apache.log4j.FileAppender
#只是日志存放位置
log4j.appender.file.File=log4j.log
#添加文件输出格式为自定义格式
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#自定义格式内容
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%L %l %M %p %m %c %t %F %n
#设置文件编码
log4j.appender.file.encoding=UTF-8





	#添加数据库追加器
#log4j.appender.db=com.pxg.util.Log4jSQL
		
##直接使用log4j包中的文件
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
##与数据库创建链接
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.Driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=123456
##指定要插入数据库的格式,具体参数的格式看一开始给出的文档
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J(ss,xx,jb) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%F%L%m','%p')

配置MyBatisConfig.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>
	 <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
</configuration>

因为本案例增长了mybatis的sql语句输出,因此进行配置mybatis文件,spring

如过不须要能够不须要配置,而且在ApplicationContext.xml文件中对mybatis配置行进行注释便可sql

<!-- 指定MyBatis核心配置文件地址 -->
 <property name="configLocation" value="classpath:MyBatisConfig.xml"></property>

配置文件配置完成能够自行进行测试,若是使用oracle数据链接不成功可能少了ojdbc6.jar包,也是oraclejar包

项目下载地址
https://github.com/panxg123/Job20190426.git数据库