Mybatis之輸入對映與輸出對映
阿新 • • 發佈:2019-01-10
輸入型別(parameterType)
- 傳遞簡單型別(參考Mybatis入門程式)
- 傳遞POJO物件(Mybatis使用Ognl表示式解析物件欄位的值,#{}佔位符與拼接符 ${}括號內的值為POJO屬性名稱)
- 傳遞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實現一對一查詢和一對多查詢。