1. 程式人生 > 實用技巧 >Mybatis對映檔案中的引數傳遞

Mybatis對映檔案中的引數傳遞

一、介面中只有一個引數

1.引數是基本型別or基本型別的包裝類or字串型別

這種情況下對映檔案中#{}裡的內容可以是任意的,你可以使用#{xxx} 或 #{abc} .....因為此時#{}相當於一個佔位符。

public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
}
介面
<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmpById" resultType="com.xj.domain.Employee"
> select * from employee where id = #{xxx} </select> </mapper>
對映檔案

2.引數是物件型別

這種情況下直接通過 #{物件屬性名} 即可取值。

public interface EmployeeMapper {
    public void saveEmp();
}
介面
<mapper namespace="com.xj.mapper.EmployeeMapper">
    <insert id="saveEmp">
        INSERT INTO employee(id,lastName,email,gender,d_id) values(#{id},#{lastName},#{email},#{gender},#{dId})
    
</insert> </mapper>
對映檔案

3.引數是Map型別

這種情況下可以直接跟據map的key進行取值。

public interface EmployeeMapper {
    public Employee getEmp(Map<String,Object> map);
}
介面
<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmp" resultType="com.xj.domain.Employee">
        SELECT * FROM employee WHERE id = #{id} AND lastName = #{lastName}
    
</select> </mapper>
對映檔案

4.引數是Conlection、陣列型別的

方式一:使用mybatis預設提供的方式

這種情況下mybatis也會幫我們對引數進行特殊處理,mybtis同樣把Conlection、陣列型別的引數封裝為Map,如果是Collection型別則Map的key為collection,如果是Array型別則Map的key為array。特殊的如List,他的key為list,但是由於List也屬於Collection,所以key也可以用collection。

public interface EmployeeMapper {
    public Employee getEmpById(List<Integer> ids);
}
介面

<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmpById" resultType="com.xj.domain.Employee">
        select * from employee where id = #{list[0]}
    </select>
</mapper>
對映檔案

方式二:使用@Param註解

我們可以在介面的引數上標註@Param註解,指定引數的名稱,然後對映檔案中就可以直接通過#{註解指定的引數名}進行取值

public interface EmployeeMapper {
    public Employee getEmpById(@Param("idList") List<Integer> ids);
}
介面

<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmpById" resultType="com.xj.domain.Employee">
        select * from employee where id = #{idList[0]}
    </select>
</mapper>
對映檔案

二、介面中有兩個及兩個以上引數

1.多個引數都是基本型別or基本型別的包裝類orString型別

方式一:使用mybatis預設提供的方式

有多個引數時,mybatis會把這多個引數封裝為Map型別,這個Map中的key為param1,param2,....,paramN。所以我們要取出第一個引數就可以用#{param1}取出,要取第N個引數就用#{paramN}。

public interface EmployeeMapper {
    public Employee getEmp(String lastName,Integer id);
}
介面
<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmp" resultType="com.xj.domain.Employee">
        SELECT * FROM employee WHERE id = #{param2} AND lastName = #{param1}
    </select>
</mapper>
對映檔案

方式二:使用@Param註解

我們可以在介面的引數上標註@Param註解,指定引數的名稱,然後對映檔案中就可以直接通過#{註解指定的引數名}進行取值

public interface EmployeeMapper {
    public Employee getEmp(@Param("name") String lastName,@Param("id") Integer id);
}
介面

<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmp" resultType="com.xj.domain.Employee">
        SELECT * FROM employee WHERE id = #{id} AND lastName = #{name}
    </select>
</mapper>
對映檔案

2.多個引數中既有物件型別,又有引數是基本型別or基本型別的包裝類or字串型別

public interface EmployeeMapper {
    public Employee getEmp(@Param("id") Integer id,@Param("emp") Employee employee);
}
介面
<mapper namespace="com.xj.mapper.EmployeeMapper">
    <select id="getEmp" resultType="com.xj.domain.Employee">
        SELECT * FROM employee WHERE id = #{id} AND lastName = #{emp.lastName}
    </select>
</mapper>
對映檔案