mybatis如何傳引數

奥兰王子發表於2024-04-09

MyBatis 提供了多種傳參方式,以適應不同的查詢需求。以下是一些常用的傳參方法:

1. 單個引數

當查詢只需要一個引數時,可以直接傳遞該引數。

Mapper XML:

xml<select id="findUserById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>

Java 介面:

javaUser findUserById(int id);

2. 多個引數

當需要傳遞多個引數時,可以使用以下幾種方法:

使用 Map

傳遞一個 Map 物件,其中鍵是引數名,值是引數值。

Mapper XML:

xml<select id="findUserByNameAndAge" resultType="User">
SELECT * FROM user WHERE name = #{name} AND age = #{age}
</select>

Java 介面:

javaUser findUserByNameAndAge(Map<String, Object> params);

Java 呼叫:

javaMap<String, Object> params = new HashMap<>();
params.put("name", "Alice");
params.put("age", 30);
userMapper.findUserByNameAndAge(params);

使用 @Param 註解

在介面方法引數上使用 @Param 註解來指定引數名。

Mapper XML:

xml<select id="findUserByNameAndAge" resultType="User">
SELECT * FROM user WHERE name = #{name} AND age = #{age}
</select>

Java 介面:

javaUser findUserByNameAndAge(@Param("name") String name, @Param("age") int age);

Java 呼叫:

javauserMapper.findUserByNameAndAge("Alice", 30);

3. 複雜物件

當需要傳遞一個複雜物件作為引數時,可以直接傳遞該物件。

Java 類:

javapublic class UserQuery {
private String name;
private int age;
// getters and setters
}

Mapper XML:

xml<select id="findUserByQuery" resultType="User">
SELECT * FROM user WHERE name = #{query.name} AND age = #{query.age}
</select>

Java 介面:

javaUser findUserByQuery(UserQuery query);

Java 呼叫:

javaUserQuery query = new UserQuery();
query.setName("Alice");
query.setAge(30);
userMapper.findUserByQuery(query);

4. 使用 @Param 註解傳遞複雜物件

當傳遞複雜物件時,也可以使用 @Param 註解來指定引數名。

Mapper XML:

xml<select id="findUserByQuery" resultType="User">
SELECT * FROM user WHERE name = #{userQuery.name} AND age = #{userQuery.age}
</select>

Java 介面:

javaUser findUserByQuery(@Param("userQuery") UserQuery userQuery);

Java 呼叫:

javaUserQuery userQuery = new UserQuery();
userQuery.setName("Alice");
userQuery.setAge(30);
userMapper.findUserByQuery(userQuery);

這些傳參方式可以根據具體的需求和場景靈活選擇。

相關文章