【mybatis基礎】mybatis開發dao兩種方法


mybatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀的持久層的框架,是apache下的頂級項目。mybatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。mybatis可以使用簡單的XML或注解用於配置和原始映射,將接口和JavaPOJO映射成數據庫中的記錄。

其中,開發dao有兩種方法,一種原始的dao開發方法,程序員需要寫dao接口和dao實現類。另一種是mapper代理方法,程序員只需要寫mapper接口相當於dao接口。

 

原始dao開發方法

1.編寫dao接口(UserDao

 

[java]  view plain  copy
 
  1. public interface UserDao {  
  2.     // 根據id查詢用戶信息  
  3.     public User findUserById(int id) throws Exception;  
  4. }  

2.編寫dao實現類

[java]  view plain  copy
 
  1. public class UserDaoImpl implements UserDao {  
  2.   
  3.     // 需要向dao實現類中注入SqlSessionFactory  
  4.     // 這里通過構造方法注入  
  5.     private SqlSessionFactory sqlSessionFactory;  
  6.   
  7.     public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {  
  8.         this.sqlSessionFactory = sqlSessionFactory;  
  9.     }  
  10.   
  11.     @Override  
  12.     public User findUserById(int id) throws Exception {  
  13.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  14.           
  15.         //這里的test.findUserById是與下面的映射文件user.xml中的namespace+id有關。  
  16.         User user = sqlSession.selectOne("test.findUserById", id);  
  17.   
  18.         // 釋放資源  
  19.         sqlSession.close();  
  20.   
  21.         return user;  
  22.   
  23.     }  
  24. }  

3.編寫映射文件(user.xml

[java]  view plain  copy
 
  1. <mapper namespace="test">  
  2.     <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">  
  3.         SELECT * FROM USER WHERE id=#{value}  
  4.     </select>  
  5. </mapper>  

4.編寫測試類

[java]  view plain  copy
 
  1. public class UserDaoImplTest {  
  2.     private SqlSessionFactory sqlSessionFactory;  
  3.   
  4.     // 此方法是在執行testFindUserById之前執行  
  5.     @Before  
  6.     public void setUp() throws Exception {  
  7.         // 創建sqlSessionFactory  
  8.   
  9.         // mybatis配置文件  
  10.         String resource = "SqlMapConfig.xml";  
  11.         // 得到配置文件流  
  12.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  13.   
  14.         // 創建會話工廠,傳入mybatis的配置文件信息  
  15.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  16.     }  
  17.   
  18.     @Test  
  19.     public void testUserDaoImpl() throws Exception{  
  20.         // 創建UserDao的對象  
  21.         UserDao userDao = new UserDaoImpl(sqlSessionFactory);  
  22.   
  23.         // 調用UserDao的方法  
  24.         User user = userDao.findUserById(1);  
  25.                   
  26.         System.out.println(user);  
  27.     }  
  28. }  

測試結果:

 



mapper代理方法

1.編寫mapper.javaUserMapper.java相當於java接口)

[java]  view plain  copy
 
  1. public interface UserMapper {  
  2.     // 根據id查詢用戶信息  
  3.     public User findUserById(int id) throws Exception;  
  4. }  

2.編寫mapper.xml(UserMapper.xml)

[java]  view plain  copy
 
  1. <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">  
  2.   
  3.     <!--通過id查詢用戶表的記錄 -->  
  4.     <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">  
  5.         SELECT * FROM USER WHERE id=#{value}  
  6.     </select>  
  7.   
  8. </mapper>  

 

注意:

1)在mapper.xmlnamespace等於mapper接口地址

2mapper.java接口中的方法名和mapper.xmlstatementid一致

3mapper.java接口中的方法輸入參數類型和mapper.xmlstatementparameterType指定的類型一致。

4mapper.java接口中的方法返回值類型和mapper.xmlstatementresultType指定的類型一致。

3.編寫測試類

[java]  view plain  copy
 
  1. public class UserMapperTest {  
  2.   
  3.     private SqlSessionFactory sqlSessionFactory;  
  4.   
  5.     // 此方法是在執行testFindUserById之前執行  
  6.     @Before  
  7.     public void setUp() throws Exception {  
  8.         // 創建sqlSessionFactory  
  9.   
  10.         // mybatis配置文件  
  11.         String resource = "SqlMapConfig.xml";  
  12.         // 得到配置文件流  
  13.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  14.   
  15.         // 創建會話工廠,傳入mybatis的配置文件信息  
  16.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  17.     }  
  18.       
  19.     @Test  
  20.     public void testFindUserById() throws Exception {  
  21.         SqlSession sqlSession=sqlSessionFactory.openSession();  
  22.           
  23.         //創建UserMapper對象,mybatis自動生成mapper代理對象  
  24.         UserMapper userMapper =sqlSession.getMapper(UserMapper.class);  
  25.           
  26.         //調用UserMapper的方法  
  27.         User user=userMapper.findUserById(1);  
  28.           
  29.         System.out.println(user);  
  30.           
  31.         sqlSession.close();  
  32.     }  
  33.   
  34. }  

測試結果:



現在最常用的方法是第二種使用mapper代理的方法,不過第一種也有公司在用所以兩種都要知道。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM