2013年8月25日 星期日

MyBatis - 如何一次取得SELECT 的大量資料

參考:Result Maps
需求:我們常常會有SELECT Query回傳大量資料列的情形,與之前指定userid只回傳單一User不同,該如何做呢?

方式很簡單,首先我們新增一個新的function getAllUsers:


  • UserMapper.xml
    
     
      
       
       
      
    
    
      < select id="getAllUsers" resultMap="userMap">
        SELECT 
          userid , 
          email , 
          Password, 
          name
         FROM USER 
     < select>
    
    

    (原有getUserById在這邊先拿掉)請注意其中我們使用的屬性為resultMap而不是先前getUserById中使用的resultType,依照官方說明,resultMap與resultType只能選其中一個使用


  • UserDAO.java
    public class UserDAO {
       //...
        public static List getAllUsers(SqlSessionFactory sqlSessionFactory) {
     SqlSession sqlSession = sqlSessionFactory.openSession();
     try {
      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
      return userMapper.getAllUsers();
     } finally {
      sqlSession.close();
     }
        }
    }
    

    跟之前使用getUserById()沒甚麼差異,唯一差別就是回傳型態變成了 List<user>
  • 呼叫方式如下:
     private static void getAllUsers(SqlSessionFactory sqlSessionFactory){
      List list = UserDAO.getAllUsers(sqlSessionFactory);
      for(User user : list)
       System.out.println(user);
     }
    
  • 使用方式非常簡單呢,比起以往自己寫JDBC API為了接收大量資料寫了一大堆Code又不好用,ResultMap的機制真的非常簡易又方便呢!

    沒有留言:

    張貼留言