一:輸入映射
通過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 CodeUserMapper.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 ListfindUserList(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 1213 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 ListfindUserByName(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 1213 18 19 24 3225 30 31
(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 包裝
文章來源: