mybatis如何传参数

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);

这些传参方式可以根据具体的需求和场景灵活选择。

posted @ 2024-04-09 14:15  奥兰王子  阅读(26)  评论(0编辑  收藏  举报