一、导入jar包
1、mybatis-spring-1.2.5.jar
2、spring-jdbc-4.3.5.jar
3、Druid-1.0.26.jar//使用的是阿里巴巴旗下的Druid数据库连接池
二、用spring管理SqlSessionFactory
spring.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">
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.oa">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 加载jdbc属性文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:dbconfig.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 数据库基本信息配置 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="driverClassName" value="${driverClassName}" />
<property name="filters" value="${filters}" />
<!-- 最大并发连接数 -->
<property name="maxActive" value="${maxActive}" />
<!-- 初始化连接数量 -->
<property name="initialSize" value="${initialSize}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${maxWait}" />
<!-- 最小空闲连接数 -->
<property name="minIdle" value="${minIdle}" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testWhileIdle" value="${testWhileIdle}" />
<property name="testOnBorrow" value="${testOnBorrow}" />
<property name="testOnReturn" value="${testOnReturn}" />
<property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="${removeAbandoned}" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="${logAbandoned}" />
</bean>
<!-- 创建SqlSessionFactory,同时指定数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybaits/SqlMapConfig.xml"></property>
</bean>
</beans>
这样,SqlSessionFactory的bean就在spring中创建好了,
三、现在把1、得到dao层接口的实现类和2、事务处理也交给spring处理:
1、
<!-- 创建dao层Mapper接口的实现类的bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.oa.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
现在直接在service中注入Mapper就可以了:
2、在spring中配置事务:
<!-- 配置事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
头文件:
现在要导入jar包:
spring-tx.jar
spring-aop.jar
spring-aspectjweaver.jar
事务配置好之后:
<!-- 事务管理开始 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务如何管理 -->
<tx:advice id="myadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="del*" propagation="REQUIRED" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="edit*" propagation="REQUIRED" rollback-for="java.lang.Exception"></tx:method>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 管哪里 -->
<aop:pointcut expression="execution(*com.oa.service..*(..))" id="mycut"/>
<!-- 通过myadvice管理mycut -->
<aop:advisor advice-ref="myadvice" pointcut-ref="mycut"/>
</aop:config>
<!-- 事务管理结束 -->
事务层只关注事务:
package com.oa.service.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.oa.dao.ProfessionalMapper;
import com.oa.entity.Professional;
import com.oa.service.ProService;
@Service("proService")
public class ProServiceImpl implements ProService{
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Autowired
private ProfessionalMapper mapper;
/**
* 增加一个专业
*/
public int addPro(Professional pro) {
int result = 0;
Professional professional = mapper.selectByName(pro.getProname());
if(professional == null){
result = mapper.insert(pro);
}else{
result=-1;
}
return result;
}
/**
* 得到专业列表
*/
public List<Professional> getAllPros() {
List<Professional> pros = null;
pros = mapper.selAllPros();
return pros;
}
/**
* 删除一个专业
*/
public int delPro(int proid) {
int result = 0;
result = mapper.deleteByPrimaryKey(proid);
return result;
}
/**
* 修改一个专业
*/
public int editPro(Professional pro) {
int result = 0;
result = mapper.updateByPrimaryKey(pro);
return result;
}
/**
* 查找一个专业
*/
public Professional selProById(int proid) {
Professional pro = null;
pro = mapper.selectByPrimaryKey(proid);
return pro;
}
}