mybatis入門基礎(四)----輸入映射和輸出映射

分類:編程 時間:2016-11-07

一:輸入映射 

通過parameterType指定輸入參數的類型,類型可以是簡單類型、hashmap、pojo的包裝類型。

1.1.傳遞pojo的包裝對象

1.1.1.需求描述

完成用戶信息的綜合查詢,需要傳入的查詢條件可能很復雜(可能包括用戶信息,其它信息,比如,商品,訂單等等)。

1.1.2.定義包裝類型的pojo

針對上邊的需求,建議使用自定義的包裝類型pojo,在包裝類型的pojo中將復雜的查詢條件包裝進去。

包裝查詢條件的pojo類UserQueryVo類的代碼:

\

 1 package com.mybatis.entity;
 2 
 3 /**
 4  * 
 5 * @ClassName: UserQueryVo 
 6 * @Description: TODO(包裝類型)
 7 * @author warcaft
 8 * @date 2015-6-30 上午12:00:41 
 9 *
10  */
11 public class UserQueryVo {
12     //這裏包裝其它的查詢條件
13     //用戶查詢條件
14     private UserCustom userCustom;
15 
16     public UserCustom getUserCustom() {
17         return userCustom;
18     }
19 
20     public void setUserCustom(UserCustom userCustom) {
21         this.userCustom = userCustom;
22     }
23     //可以包裝其它查詢條件......
24 
25 }

UserCustom類的代碼

\View Code

UserMapper.xml的代碼

在UserMapper.xml中定義用戶信息綜合查詢(假設查詢條件很復雜,通過高級查詢復雜關聯查詢)

\

1 5     

UserMapper.Java類的代碼

\

 1 /**
 2  * 
 3  * @ClassName: UserMapper
 4  * @Description: TODO(用戶管理mapper接口)
 5  * @author warcaft
 6  * @date 2015-6-30 上午12:14:56
 7  * 
 8  */
 9 public interface UserMapper {
10     // 用戶信息綜合查詢
11     public List findUserList(UserQueryVo userQueryVo);
12 }

Junit單元測試代碼

\

 1 ackage com.mybatis.dao.test;
 2 
 3 import java.io.InputStream;
 4 import java.util.Date;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.Before;
12 import org.junit.Test;
13 
14 import com.mybatis.entity.User;
15 import com.mybatis.entity.UserCustom;
16 import com.mybatis.entity.UserQueryVo;
17 import com.mybatis.mapper.UserMapper;
18 
19 public class UserMapperTest {
20 
21     private SqlSessionFactory sqlSessionFactory;
22 
23     // 此方法是在執行findUserByIdTest之前執行
24     @Before
25     public void setUp() throws Exception {
26         String resource = "SqlMapConfig.xml";
27         InputStream inputStream = Resources.getResourceAsStream(resource);
28         // 創建SqlSessionFcatory
29         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
30     }
31     
32     @Test
33     public void testFindUserList() {
34         SqlSession sqlSession = sqlSessionFactory.openSession();
35         //創造查詢條件
36         UserQueryVo userQueryVo = new UserQueryVo();
37         UserCustom userCustom = new UserCustom();
38         userCustom.setSex("2");
39         userCustom.setUsername("小");
40         userQueryVo.setUserCustom(userCustom);
41         // 創建Usermapper對象,mybatis自動生成mapper代理對象
42         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
43         Listlist=mapper.findUserList(userQueryVo);
44         system.out.println(list);
45         sqlSession.commit();
46         sqlSession.close();
47     }
48 }

回到頂部

二:輸出映射

1.resultType

使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。

如果查詢出來的列名和pojo中的屬性名全部不一致,沒有創建pojo對象。

只要查詢出來的列名和pojo中的屬性有一個一致,就會創建pojo對象。

1.1.輸出簡單類型

需求:用戶信息的綜合查詢列表,通過查詢總數才能實現分頁功能。‘

UserMapper.xml的代碼 

 1 2 
 5 8 12 
13     
16 

UserMapper.java的代碼

1 public interface UserMapper {
2     //用戶信息綜合查詢總數
3     public int findUserCount(UserQueryVo userQueryVo);
4 }

Junit測試代碼

\

 1 package com.mybatis.dao.test;
 2 
 3 import java.io.InputStream;
 4 import java.util.Date;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 import org.junit.Before;
12 import org.junit.Test;
13 
14 import com.mybatis.entity.User;
15 import com.mybatis.entity.UserCustom;
16 import com.mybatis.entity.UserQueryVo;
17 import com.mybatis.mapper.UserMapper;
18 
19 public class UserMapperTest {
20 
21     private SqlSessionFactory sqlSessionFactory;
22 
23     // 此方法是在執行findUserByIdTest之前執行
24     @Before
25     public void setUp() throws Exception {
26         String resource = "SqlMapConfig.xml";
27         InputStream inputStream = Resources.getResourceAsStream(resource);
28         // 創建SqlSessionFcatory
29         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
30     }
31     
32     @Test
33     public void findUserCountTest() {
34         SqlSession sqlSession = sqlSessionFactory.openSession();
35         //創造查詢條件
36         UserQueryVo userQueryVo = new UserQueryVo();
37         UserCustom userCustom = new UserCustom();
38         userCustom.setSex("2");
39         userCustom.setUsername("小");
40         userQueryVo.setUserCustom(userCustom);
41         // 創建Usermapper對象,mybatis自動生成mapper代理對象
42         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
43         int count=mapper.findUserCount(userQueryVo);
44         System.out.println(count);
45         sqlSession.commit();
46         sqlSession.close();
47     }
48 }

小結:查詢出來的結果集只有一行一列,可以使用簡單類型進行輸出映射。

1.2.輸出pojo對象和pojo列表  

不管是輸出的pojo單個對象還是一個列表(list中包括pojo),在mapper.xml中resultType指定的類型是一樣的。

在mapper.java指定的方法返回值類型不一樣。

 1.2.1.輸出單個pojo對象,方法返回值是單個對象類型

1 public interface UserMapper {
2     /** 根據ID查詢用戶信息 */
3     public User findUserById(int id);
4 }

 1.2.2.輸出pojo對象list,方法返回值是List

1 public interface UserMapper {
2     /** 根據用戶名稱模糊查詢用戶信息 */
3     public List findUserByName(String username);
4 }

小結:生成的動態代理對象中是根據mapper.java方法的返回值類型確定是調用selectOne(返回單個對象調用)還是selectList(返回集合對象調用)

1.3.輸出類型resultMap

mybatis中使用resultMap完成高級輸出結果映射。

 1.3.1.resultMap使用方法

(1).定義resultMap

(2).使用resultMap作為statement的輸出映射類型

 1.3.2.demo例子

(1).需求:將下面的sql使用User完成映射

select id id_,username username_ from t_user where id=?

User類中屬性名和上邊的列名不一致。

(2).定義resultMap   

 1 2  
 5   8    12  
13  18  
19      24      
25      30      
31  
32  

 

(3).使用resultMap作為statement的輸出類型映射

1 4 

UserMapper.java代碼

public interface UserMapper {

    /** 根據ID查詢用戶信息,使用resultMap進行輸出 */
    public User findUserByIdResultMap(int id);
}

Junit測試代碼:

\View Code

小結:

用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。

如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關系。


Tags: private package public return 包裝

文章來源:


ads
ads

相關文章
ads

相關文章

ad