spring整合mybatis

一、导入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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值