1 MyBatis 參數
1.1 傳遞 pojo 對象
MyBatis 使用 OGNL 表達式解析對象字段的值,#{}
或者 ${}
括號中的值爲 pojo 屬性名稱。
- OGNL (Object Graphic Navigation Language),對象 圖 導航 語言
它是通過對象的取值方法來獲取數據,寫法上把 get 省略了。
類中的寫法 : user.getUserName()
OGNL : user.username
- mybatis 爲什麼可以直接寫 username, 而不用 user.
因爲在 parameterType 中已經提供了屬性所屬的類,所以此時不需要寫對象名。
1.2 傳遞 pojo 包裝對象
package com.tzb.domain;
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
- IUserDao
List<User> findUserByVo(QueryVo vo);
- IUserDao.xml
<select id="findUserByVo" parameterType="com.tzb.domain.QueryVo" resultType="com.tzb.domain.User">
select * from user where username like #{user.username}
</select>
- 單元測試
@Test
public void testFindByVo() {
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("%趙%");
vo.setUser(user);
List<User> users = userDao.findbyName("%趙%");
System.out.println(users);
}
2 mybatis 輸出結果封裝
- resultType屬性可以指定結果集的類型,它支持基本類型和實體類類型。
- 我們在前面的CRUD案例中已經對此屬性進行過應用了。 需要注意的是,它和parameterType一樣,如果註冊過類型別名的,可以直接使用別名。沒有註冊過的必須使用全限定類名。例如:我們的實體類此時必須是全限定類名。
- 同時,當是實體類名稱是,還有一個要求,實體類中的屬性名稱必須和查詢語句中的列名保持一致,否則無法實現封裝。
2.1 解決實體類屬性和數據列名不對應的兩種方法
2.1.1 查詢時起別名
2.2.2 配置的方法
<resultMap id="userMap" type="com.tzb.domain.User">
<!--主鍵字段對應-->
<id property="userId" column="id"></id>
<!--非主鍵字段的對應-->
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
<!--配置查詢所有-->
<select id="findAll" resultMap="userMap">
select * from user
</select>