【mybatis】【mapper介面代替dao類】【對映檔案的引數】
阿新 • • 發佈:2019-01-08
簡介
在操作物件的增刪改時候,
//第一個形參:表示要呼叫的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}