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);
這些傳參方式可以根據具體的需求和場景靈活選擇。