MyBatis(11)- 參數深入

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章