整合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,因为数据库已被清空,一条记录也没有