1. 程式人生 > >【mybatis】【mapper介面代替dao類】【對映檔案的引數】

【mybatis】【mapper介面代替dao類】【對映檔案的引數】

簡介

在操作物件的增刪改時候,


//第一個形參:表示要呼叫的sql語句
//第二個形參:表示要傳遞才引數
session.insert("對映檔案的名稱空間.sql的id值",new User());

如此長度的字串,不適合用.

mapper介面代替dao類

1.介面

  • UserMapper建立一個介面
  • 介面中的方法簽名==名稱空間+sql標籤的id
  • 介面中的返回 ==sql標籤的返回型別 resultType
  • 介面中的引數== sql標籤中的引數型別 paramterType
public interface UserMapper {

    void add(User user);
}

2.對映檔案

<mapper namespace="UserMapper的全限名">

    <insert id="add" keyColumn="id" keyProperty="id" useGeneratedKeys="true" parameterType="User">
        insert into user(name,age,birthday) values ( #{name},#{age},#{birthday})    
    </insert>
</mapper>

3.測試

通過動態代理,獲取擁有介面方法的物件.

    //獲取mapper物件
    UserMapper mapper = session.getMapper(UserMapper.class);
    //進行增刪改查
    mapper.add(new User());

對映檔案的引數

1.對映檔案中只有一個引數,就是root.

2.Mapper方法中,一個形參,

  • 先在傳遞的引數的屬性尋找,
    • 比如傳遞一個User物件,使用#{name}, 表示從傳遞的引數中找name屬性.
  • 找不到對應屬性,嘗試直接使用引數,
    • 比如傳遞一個Long id, 使用#{id}, 表示先從引數中找id屬性,沒找到直接用引數
  • 配合UserMapper介面使用, 一般不需要在sql表中寫 parameterType屬性.
  • 如果需要多個引數,可以封裝到一個物件,或者一個map中.將map傳入,map作為root物件

    //方式1,傳遞一個id到對映檔案
    
    #{任意值} ==id值
    
    //方式2,傳遞一個物件/map到對映檔案
    
    #{key} ==物件對應的屬性的值
    
    

3.Mapper方法中,多個形參,

好處:在呼叫方法時候,可以傳遞多個引數.
實質:mybatis將多個引數封裝成一個map物件.傳遞到對映檔案中.所以每個引數都是root的一個屬性.

1.傳遞username和password,返回一個user物件的方法

User login(@Param("username")String username,
            @Param("password")String password)
//此時, mybatis自己建立一個map,存放username和password.需要用#{username}提取

2.一個引數和多個引數的區別

void upadte(User user);
//該方式,user是一個root
//提取姓名: #{name}


void update(@Param("user")User user);
//該方式,user是root的一個屬性
//提取姓名:#{user.name}