四、Mybatis的Dao层实现
SqlSession工厂对象SqlSessionFactory有多个方法创建bean实例,常用两个:
一、传统开发方式
1. 编写UserDao接口
1 public interface UserDao { 2 List<User> findAll() throws IOException; 3 }
2. 编写UserDaoImpl实现
1 public class UserDaoImpl implements UserDao { 2 public List<User> findAll() throws IOException { 3 InputStreamresourceAsStream = Resources.getResourceAsStream( 4 "SqlMapConfig.xml"); 5 6 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 7 SqlSession sqlSession = sqlSessionFactory.openSession(); 8 List<User> userList = sqlSession.selectList("userMapper.findAll"); 9 sqlSession.close(); 10 11 return userList; 12 } 13 }
二、代理开发方式
1. 代理开发方式介绍
采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。
Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接
口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper 接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的全限定名相同
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
2. 编写UserMapper接口
3. 测试代理方式
public void testProxyDao() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(); // 获得 MyBatis 框架生成的 UserMapper 接口的实现类 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.findById(1); System.out.println(user); sqlSession.close(); }