標籤: mybatisjava
[TOC]git
本文主要講解mybatis的輸出映射。github
輸出映射有兩種方式sql
resultType
resultMap
resultType
進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才能夠映射成功。<!-- 用戶信息綜合查詢總數 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>
//用戶信息綜合查詢總數 @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單個對象仍是一個列表(list中包括pojo),在mapper.xml中resultType
指定的類型是同樣的。app
在mapper.java指定的方法返回值類型不同:學習
//根據id查詢用戶信息 public User findUserById(int id) throws Exception;
//根據用戶名列查詢用戶列表 public List<User> findUserByName(String name) throws Exception;
生成的動態代理對象中是根據mapper方法的返回值類型肯定是調用selectOne
(返回單個對象調用)仍是selectList
(返回集合對象調用 ).測試
mybatis中使用resultMap完成高級輸出結果映射。(一對多,多對多)網站
若是查詢出來的列名和pojo的屬性名不一致,經過定義一個resultMap對列名和pojo屬性名之間做一個映射關係。spa
1.定義resultMap
2.使用resultMap做爲statement的輸出映射類型
<!-- 定義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進行輸出映射 resultMap:指定定義的resultMap的id,若是這個resultMap在其它的mapper文件,前邊須要加namespace --> <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap"> SELECT id id_,username username_ FROM USER WHERE id=#{value} </select>
//根據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屬性名之間做一個映射關係。