1. 程式人生 > >Mybatis之輸入對映與輸出對映

Mybatis之輸入對映與輸出對映

輸入型別(parameterType)

  1. 傳遞簡單型別(參考Mybatis入門程式)
  2. 傳遞POJO物件(Mybatis使用Ognl表示式解析物件欄位的值,#{}佔位符與拼接符 ${}括號內的值為POJO屬性名稱)
  3. 傳遞POJO包裝物件

    開發中通過POJO傳遞查詢條件,查詢條件是綜合的查詢條件,不僅包括使用者查詢條件還包括其他的查詢條件(如使用者購買商品資訊或訂單號等),這是可以使用包裝物件傳遞輸入引數。

  • QueryVo.java 包裝User類
public class QueryVo {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

  • SQL語句
SELECT * FROM `user` WHERE username LIKE '%%' and sex = 
  • 對映檔案 UserMapper.xml
 </insert>
 <!--使用包裝型別查詢使用者
 使用ognl從物件中去屬性值,如果是包裝物件可以使用.操作符來取其內部的屬性
-->
    <select id="findUserbyVo" parameterType="cn.zst.domain.QueryVo" resultType="cn.zst.domain.User">
        SELECT * from `user` WHERE username LIKE '%${user.username}%' and sex=#{user.sex}

    </select>
  • 介面
public interface UserMapper {
    public User findUserById(Integer id);
    //動態代理情況中,如果返回結果集為list,那麼Mybatis會在生成實現類的時候,會自動呼叫selectList()方法
    public List<User> findUserByName(String userName);
    public void insertUser(User user);
    public void delUserById(Integer id);

    public List<User> findUserbyVo(QueryVo vo);
}
  • 測試方法
    @Test
    public void testFindUserByVo()throws Exception{
    
        SqlSession openSession = factory.openSession();
        //獲得Mapper的代理物件
        UserMapper mapper = openSession.getMapper(UserMapper.class);
        //建立QueryVo物件
        QueryVo vo = new QueryVo();
        //建立user物件
        User user = new User();
        user.setUsername("王");
        user.setSex("1");
        vo.setUser(user);
        //根據queryvo查詢使用者
        List<User> userbyVo = mapper.findUserbyVo(vo);
        System.out.println(userbyVo);
    }

輸出對映(resultType)

  • 輸出POJO物件(參考Mybatis入門程式)

  • 輸出POJO列表(參考Mybatis入門程式)

  • 輸出簡單(基本)型別

  • SQL語句

SELECT COUNT(*) FROM `user`
  • 對映檔案
<!--返回結果集是基本型別,只有返回結果為一行一列時,返回值型別才能指定成基本型別-->
    <select id="findUserCount" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM `user`
    </select>
  • 介面
public interface UserMapper {
    public User findUserById(Integer id);
    //動態代理情況中,如果返回結果集為list,那麼Mybatis會在生成實現類的時候,會自動呼叫selectList()方法
    public List<User> findUserByName(String userName);
    public void insertUser(User user);
    public void delUserById(Integer id);

    public List<User> findUserbyVo(QueryVo vo);
    public Integer findUserCount();
}
  • 測試方法
    @Test
    public void testFindUserCount() throws Exception{
        SqlSession openSession = factory.openSession();
        UserMapper mapper = openSession.getMapper(UserMapper.class);
        Integer count = mapper.findUserCount();
        System.out.println(count);
    }

resultMap

resutlType 可以指定POJO將查詢結果對映為POJO,但需要POJO的屬性名和SQL查詢的列名一致才能對映成功。
如果SQL查詢欄位名和POJO的屬性名不一致,可以通過resultMap將欄位名和屬性名作為一個對應關係,resultMap實質上還需要將查詢結果對映到POJO物件中。
resultMap可以實現將查詢結果對映為複雜型別的POJO,比如在查詢結果對映物件中包含POJO和list實現一對一查詢和一對多查詢。