整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。
2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
整合步骤
- 创建一个java工程。
- 导入jar包。(课前资料中mybatis与spring整合所有包)
- mybatis的配置文件sqlmapConfig.xml
- 编写Spring的配置文件
- 数据库连接及连接池
- sqlsessionFactory对象,配置到spring容器中
- 编写Spring的配置文件
- 复制jdbc.properties配置文件到新工程
- 复制log4j.properties配置文件到新工程
Dao开发
1.传统Dao开发
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {@Overridepublic User getUserById(Integer id) {SqlSession sqlSession = super.getSqlSession();//查询用户User user = sqlSession.selectOne("user.getUserById", id);//不能关闭SqlSession//sqlSession.close();return user;}@Overridepublic List<User> getUserByUserName(String name) {SqlSession sqlSession = super.getSqlSession();List<User> list = sqlSession.selectList("user.getUserByName", name);//不能关闭SqlSessionreturn list;}@Overridepublic void insertUser(User user) {SqlSession sqlSession = super.getSqlSession();sqlSession.insert("user.insertUser", user);//不用手动提交事务,交给spring}}
- 在applicationContext.xml中配置UserDaoImpl实现类
```
6. 编写测试类,新建单完测试类
public class UserDaoTest { private ApplicationContext applicationContext;
@Beforepublic void init(){applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");}@Testpublic void testGetUserById() {UserDao userDao = applicationContext.getBean(UserDao.class);User user = userDao.getUserById(10);System.out.println(user);}………省略其它方法
}
## 2.Mapper代理模式开发Dao3. 配置Mapper1. 单个接口配置MapperFactoryBean
2. 配置包扫描器
4. 测试
public class UserMapperTest { private ApplicationContext applicationContext;
@Beforepublic void init(){applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");}@Testpublic void testGetUserById() {UserMapper userMapper = applicationContext.getBean(UserMapper.class);User user = userMapper.getUserById(10);System.out.println(user);}
}
```
