(MyBatis-Spring整合案例)
案例使用maven-web工程搭建,使用mvc架构
工程创建截图
配置相关文件
导入相关依赖包 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文件配置
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文件中
<property name="validationQuery" value="select 1 from dual" />
如果使用的为mysql数据库配置为
<property name="validationQuery" value="select 1 " />
如果使用其他数据库执行查阅资料
配置日志文件 log4j.properties
这个日志文件配置了数据库输出日志,如需使用可开启注释,连接自己数据库即可
#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文件,
如过不需要可以不需要配置,并且在ApplicationContext.xml文件中对mybatis配置行进行注释即可
<!-- 指定MyBatis核心配置文件地址 -->
<property name="configLocation" value="classpath:MyBatisConfig.xml"></property>