Mybatis_day03:輸入映射和輸出映射
輸入映射和輸出映射
Mapper.xml映射文件中定義了操作數(shù)據(jù)庫(kù)的sql,每個(gè)sql是一個(gè)statement,映射文件是mybatis的核心。
1.parameterType(輸入類型)
- 傳遞簡(jiǎn)單類型
參考第一天內(nèi)容。
傳遞pojo對(duì)象
Mybatis使用ognl表達(dá)式解析對(duì)象字段的值,#{}或者${}括號(hào)中的值為pojo屬性名稱。
傳遞pojo包裝對(duì)象
開(kāi)發(fā)中通過(guò)pojo傳遞查詢條件,查詢條件是綜合的查詢條件,不僅包括用戶查詢條件還包括其它的查詢條件(比如將用戶購(gòu)買商品信息也作為查詢條件),這時(shí)可以使用包裝對(duì)象傳遞輸入?yún)?shù)。
Pojo類中包含pojo。
需求:根據(jù)用戶名查詢用戶信息,查詢條件放到QueryVo的user屬性中。
- public class QueryVo {
- private User user;
- public User getUser() {
- return user;
- }
- public void setUser(User user)
- this.user = user;*
- }
- }
Sql語(yǔ)句
- SELECT * FROM user where username like '%劉%'
Mapper文件
- <!-- 使用包裝類型查詢用戶
- 使用ognl從對(duì)象中取屬性值,如果是包裝對(duì)象可以使用.操作符來(lái)取內(nèi)容部的屬性
- -->
- <select id="findUserByQueryVo" parameterType="queryvo" resultType="user">
- SELECT * FROM user where username like '%${user.username}%'
- </select>
- 接口
- public interface UserMapper {
- User findUserByid(Integer id);
- List<User> findUserByUserName(String name);
- List<User> findUserByUserNameAndSex(String name,String sex);
- Integer insertUser(User user);
- Integer deleteByUserId(Integer id);
- Integer updateUserById(User user);
- List<User> QueryVoByUserList(QueryVo queryVo);
- }
- 測(cè)試方法
- @Test
- public void testFindUserByQueryVo() throws Exception {
- SqlSession sqlSession = sessionFactory.openSession();
- //獲得mapper的代理對(duì)象
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- //創(chuàng)建QueryVo對(duì)象
- QueryVo queryVo = new QueryVo();
- //創(chuàng)建user對(duì)象
- User user = new User();
- user.setUsername("劉");
- queryVo.setUser(user);
- //根據(jù)queryvo查詢用戶
- List<User> list = userMapper.findUserByQueryVo(queryVo);
- System.out.println(list);
- sqlSession.close();
- }
1.resultType(輸出類型)
- 輸出簡(jiǎn)單類型
參考getnow輸出日期類型,看下邊的例子輸出整型:
Mapper.xml文件
- <!-- 獲取用戶列表總數(shù) -->
- <select id="findUserCount" resultType="int">
- select count(1) from user
- </select>
- Mapper接口
- public int findUserCount() throws Exception;
- 調(diào)用:
- Public void testFindUserCount() throws Exception{
- //獲取session
- SqlSession session = sqlSessionFactory.openSession();
- //獲取mapper接口實(shí)例
- UserMapper userMapper = session.getMapper(UserMapper.class);
- //傳遞Hashmap對(duì)象查詢用戶列表
- int count = userMapper.findUserCount();
- //關(guān)閉session
- session.close();
- }
輸出簡(jiǎn)單類型必須查詢出來(lái)的結(jié)果集有一條記錄,最終將第一個(gè)字段的值轉(zhuǎn)換為輸出類型。
使用session的selectOne可查詢單條記錄。
輸出pojo對(duì)象
參考第一天內(nèi)容
輸出pojo列表
參考第一天內(nèi)容。
resultMap
resultType可以指定pojo將查詢結(jié)果映射為pojo,但需要pojo的屬性名和sql查詢的列名一致方可映射成功。
如果sql查詢字段名和pojo的屬性名不一致,可以通過(guò)resultMap將字段名和屬性名作一個(gè)對(duì)應(yīng)關(guān)系,resultMap實(shí)質(zhì)上還需要將查詢結(jié)果映射到pojo對(duì)象中。
resultMap可以實(shí)現(xiàn)將查詢結(jié)果映射為復(fù)雜類型的pojo,比如在查詢結(jié)果映射對(duì)象中包括pojo和list實(shí)現(xiàn)一對(duì)一查詢和一對(duì)多查詢。
Mapper.xml定義
使用resultMap指定上邊定義的personmap。
定義resultMap
由于上邊的mapper.xml中sql查詢列和Users.java類屬性不一致,需要定義resultMap:userListResultMap將sql查詢列和Users.java類屬性對(duì)應(yīng)起來(lái)
<id/>:此屬性表示查詢結(jié)果集的唯一標(biāo)識(shí),非常重要。如果是多個(gè)字段為復(fù)合唯一約束則定義多個(gè)
Property:表示User類的屬性。
Column:表示sql查詢出來(lái)的字段名。
Column和property放在一塊兒表示將sql查詢出來(lái)的字段映射到指定的pojo類屬性上。
Mapper接口定義
- public List<User> findUserListResultMap() throws Exception;