整合思路
需要spring通过单利方式管理sqlSessionFactory
spring和mybatis整合生成代理对象,使用sqlSessionFactory创建sqlsession(自动完成)
持久层mapper需要有spring进行管理
创建新工程
jar包:
mybatis3.2.7
spring3.2.0
mybatis-spring-1.2.2(mybatis和spring的整合包)
工程结构
Spring配置文件:
在classpath下创建applicationContext.xml,定义数据库链接池、SqlSessionFactory
applicationContext.xml
```
Mybatis配置文件
在classpath下创建mybatis/SqlMapConfig.xml
SqlMapConfig.xml
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
原始的Dao开发
Dao接口实现类继承SqlSessionDaoSupport
使用此种方法即原始dao开发方法,需要编写dao接口,dao接口实现类、映射文件
User.xml
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
UserDao.java
package cn.ztc.ssm.dao;
import cn.ztc.ssm.po.*;
public interface UserDao {
//根据id查用户信息
public User findUserById(int id) throws Exception;
}
UserDaoImpl.java
package cn.ztc.ssm.dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import cn.ztc.ssm.po.*;
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
@Override
public User findUserById(int id) throws Exception {
//继承了SqlSessionDaoSupport,通过getSqlSession();方法得到sqlSession
SqlSession sqlSession = this.getSqlSession();
User user = sqlSession.selectOne("test.findUserById", id);
//方法结束,自动关闭sqlSession
//sqlSession.close();
return user;
}
}
测试类
package cn.ztc.ssm.dao;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.ztc.ssm.po.User;
public class UserDaoImplTest {
private ApplicationContext applicationContext;
//在setUp方法中得到spring的容器
@Before
public void setUp() throws Exception{
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User user = userDao.findUserById(1);
System.out.println(user);
}
}
mapper代理开发
UserMapper.java
package cn.ztc.ssm.mapper;
import java.util.List;
import cn.ztc.ssm.po.User;
import cn.ztc.ssm.po.UserCustom;
import cn.ztc.ssm.po.UserQueryVo;
public interface UserMapper {
//根据id查用户信息
public User findUserById(int id) throws Exception;
}
UserMapper.xml
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
applicationContext.xml添加
测试类
package cn.ztc.ssm.mapper;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.ztc.ssm.po.User;
public class UserMapperTest {
private ApplicationContext applicationContext;
//在setUp方法中得到spring的容器
@Before
public void setUp() throws Exception{
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserMapper usermapper = (UserMapper) applicationContext.getBean("userMapper");
User user = usermapper.findUserById(1);
System.out.println(user);
}
}
此方法问题:要针对每个mapper配置
解决方法:applicationContext.xml中添加
```