1. 程式人生 > 其它 >Day12(Mybatis的Dao層實現)49

Day12(Mybatis的Dao層實現)49

MyBatis的Dao層實現方式

1.Mybatis的Dao層實現

1.1 傳統開發方式

1.編寫UserDao介面

public interface UserDao {
List<User> findAll() throws IOException;•}

2.編寫UserDaoImpl實現

public class UserDaoImpl implements UserDao {
public List<User> findAll() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("userMapper.findAll");
sqlSession.close();
return userList;
}
}

3.測試傳統方式

@Test
public void testTraditionDao() throws IOException {
UserDao userDao = new UserDaoImpl();
List<User> all = userDao.findAll();
System.out.println(all);
}

1.2 代理開發方式

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.測試代理方式

@Test
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();
}

1.3 知識小結

MyBatis的Dao層實現的兩種方式:

  • 手動對Dao進行實現:傳統開發方式

  • 代理方式對Dao進行實現: UserMapper userMapper = sqlSession.getMapper(UserMapper.class);