mybatis學習筆記(7)-輸出映射

mybatis學習筆記(7)-輸出映射

標籤: mybatisjava


[TOC]git


本文主要講解mybatis的輸出映射。github

輸出映射有兩種方式sql

  • resultType
  • resultMap

resultType

  • 使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才能夠映射成功。
  • 若是查詢出來的列名和pojo中的屬性名所有不一致,沒有建立pojo對象。
  • 只要查詢出來的列名和pojo中的屬性有一個一致,就會建立pojo對象。

輸出簡單類型

  • mapper.xml
<!-- 用戶信息綜合查詢總數
        parameterType:指定輸入類型和findUserList同樣
        resultType:輸出結果類型
    -->
    <select id="findUserCount" parameterType="com.iot.mybatis.po.UserQueryVo" resultType="int">
        SELECT count(*) FROM user WHERE user.sex=#{userCustom.sex} AND user.username LIKE '%${userCustom.username}%'
    </select>
  • mapper.java
//用戶信息綜合查詢總數
	@Test
	public void testFindUserCount() throws Exception {

		SqlSession sqlSession = sqlSessionFactory.openSession();

		//建立UserMapper對象,mybatis自動生成mapper代理對象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

		//建立包裝對象,設置查詢條件
		UserQueryVo userQueryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		//因爲這裏使用動態sql,若是不設置某個值,條件不會拼接在sql中
		userCustom.setSex("1");
		userCustom.setUsername("小");
		userQueryVo.setUserCustom(userCustom);
		//調用userMapper的方法

		int count = userMapper.findUserCount(userQueryVo);

		System.out.println(count);


	}
  • 小結

查詢出來的結果集只有一行且一列,能夠使用簡單類型進行輸出映射。mybatis

輸出pojo對象和pojo列表

無論是輸出的pojo單個對象仍是一個列表(list中包括pojo),在mapper.xml中resultType指定的類型是同樣的。app

在mapper.java指定的方法返回值類型不同:學習

  • 輸出單個pojo對象,方法返回值是單個對象類型
//根據id查詢用戶信息
public User findUserById(int id) throws Exception;
  • 輸出pojo對象list,方法返回值是List<Pojo>
//根據用戶名列查詢用戶列表
public List<User> findUserByName(String name) throws Exception;

生成的動態代理對象中是根據mapper方法的返回值類型肯定是調用selectOne(返回單個對象調用)仍是selectList (返回集合對象調用 ).測試

resultMap

mybatis中使用resultMap完成高級輸出結果映射。(一對多,多對多)網站

resultMap使用方法

若是查詢出來的列名和pojo的屬性名不一致,經過定義一個resultMap對列名和pojo屬性名之間做一個映射關係。spa

1.定義resultMap

2.使用resultMap做爲statement的輸出映射類型

  • 定義reusltMap
<!-- 定義resultMap
	將SELECT id id_,username username_ FROM USER 和User類中的屬性做一個映射關係
	
	type:resultMap最終映射的java對象類型,能夠使用別名
	id:對resultMap的惟一標識
	 -->
	 <resultMap type="user" id="userResultMap">
	 	<!-- id表示查詢結果集中惟一標識 
	 	column:查詢出來的列名
	 	property:type指定的pojo類型中的屬性名
	 	最終resultMap對column和property做一個映射關係 (對應關係)
	 	-->
	 	<id column="id_" property="id"/>
	 	<!-- 
	 	result:對普通名映射定義
	 	column:查詢出來的列名
	 	property:type指定的pojo類型中的屬性名
	 	最終resultMap對column和property做一個映射關係 (對應關係)
	 	 -->
	 	<result column="username_" property="username"/>
	 
	 </resultMap>
  • 使用resultMap做爲statement的輸出映射類型
<!-- 使用resultMap進行輸出映射
        resultMap:指定定義的resultMap的id,若是這個resultMap在其它的mapper文件,前邊須要加namespace
        -->
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
        SELECT id id_,username username_ FROM USER WHERE id=#{value}
    </select>
  • mapper.java
//根據id查詢用戶信息,使用resultMap輸出
public User findUserByIdResultMap(int id) throws Exception;
  • 測試代碼
@Test
public void testFindUserByIdResultMap() throws Exception {

	SqlSession sqlSession = sqlSessionFactory.openSession();

	//建立UserMapper對象,mybatis自動生成mapper代理對象
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	//調用userMapper的方法

	User user = userMapper.findUserByIdResultMap(1);

	System.out.println(user);


}

小結

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

若是查詢出來的列名和pojo的屬性名不一致,經過定義一個resultMap對列名和pojo屬性名之間做一個映射關係。


做者@brianway更多文章:我的網站 | CSDN | oschina

相關文章
相關標籤/搜索