四、spring整合mybatis及声明式事务管理(17~22)

整合mybatis(注意!!!!:一下内容4之前的,在<aop:config>里的<aop:pointcut>中的id为pointcut而不是point,免得测试不通过

1、步骤:

  a) 导入相关jar包

  b) 编写配置文件

spring的配置文件beans.xml

mybatis的配置文件mybatis.cfg.xml

 c) 实现

  Dao接口及实现

public interface UserDao {
    public List<User> selectUser();
}

/**
* 以前需要一个SqlSession,现在既然要整合,创建对象的过程都不用自己去创建了
* 所以现在的SqlSessionTemplate(对SqlSession的一种封装)
*
*
*/
public class UserDaoImpl implements UserDao {
     private SqlSessionTemplate sqlSession;


     public void setSqlSession(SqlSessionTemplate sqlSession) {
          this.sqlSession = sqlSession;
     }
     @Override
     public List<User> selectUser() {
          return sqlSession.selectList("cn.sxt.vo.user.mapper.selectAll");
     }
}

cn.sxt.test.Test

 2、声明式事务管理(重点)

事务的传播特性

spring支持两种事务,一种声明式事务,一种编程式事务(自己在代码中自己去管理事务)

 3、第二种方式:使用mybatis-spring1.2.3整合(拷贝12做改进)

在spring配置文件中,不需要管理sqlSessionTemplate,在Dao的实现中需要继承SqlSessionDaoSupport

Dao实现

/**
 * 以前需要一个SqlSession,现在既然要整合,创建对象的过程都不用自己去创建了
 * 所以现在的SqlSessionTemplate(对SqlSession的一种封装)以前的,不管
 * 
 *这种继承SqlSessionDaoSupport的方式是新版本的功能,这样beans.xml里面少了一个注入了,更加的简单
 *但是这个要换掉mybatis-spring1.2.1的jar包改为mybatis-spring1.2.3的jar包才有这样的功能
 */
public class UserDaoImpl extends SqlSessionDaoSupport重点 implements UserDao {
    //private SqlSessionTemplate sqlSession;        现在这里代码不要了
    @Override
    public List<User> selectUser() {    //这个操作应该在service层,这里暂时没写
        return getSqlSession().selectList("cn.sxt.vo.user.mapper.selectAll");
    }
}

补充:源码中SqlSessionDaoSupport与SqlSessionTemplate  implements SqlSession 三者的关系

 4、第三种方式:spring整合mybatis(拷贝13做改进)

mybatis使用注解,整个项目目录结构是这样的

UserMapper

public interface UserMapper {
    @Select("select * from user")
    public List<User> selectUser();
}

UserServiceImpl

public class UserServiceImpl implements UserService {
    private UserMapper userMapper = null;
    
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
    @Override
    public List<User> selectUser() {
        // TODO Auto-generated method stub
        return userMapper.selectUser();
    }
}

spring配置文件beans.xml

配置文件关键点id=userMapper   userService 部分

测试类

5、第四种方式:整合spring和mybatis(拷贝12做改进)------不要mybatis配置文件

 把<aop:config>的子标签<aop:pointcut>里面的id属性改为pointcut

将所有的配置信息配置到spring的配置文件

改变1

改变2:删除了mybatis.cfg.xml,所以也就没有了别名,所以每个实体的mapper.xml返回   resutlType为  全类名   无别名

改变3:由于里面有事务,所以为了测试正常把UserDao实现类里的selectUser()方法中间删除(之前遗留做声明式事务测试的)只有返回值      测试不变,值为0,因为数据库已被清空,一条记录也没有

原文地址:https://www.cnblogs.com/djlindex/p/11361036.html