MyBatis 支持哪些传参数的方法?
MyBatis 提供了多种传参数的方式:
- 直接传参:如果我们的SQL语句只有一个参数,那么我们可以直接传递这个参数,然后在SQL语句中使用
#{}
来引用这个参数。例如:
<select id="selectUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM user WHERE id = #{value}
</select>
在上面的例子中,我们传递了一个int类型的参数,然后在SQL语句中通过#{value}
来引用这个参数。
- 使用@Param注解:如果我们的SQL语句有多个参数,那么我们可以使用@Param注解来为每个参数命名,然后在SQL语句中通过这些名字来引用这些参数。例如:
List<User> selectUser(@Param("firstName") String firstName, @Param("lastName") String lastName);
<select id="selectUser" resultType="com.example.User">
SELECT * FROM user WHERE first_name = #{firstName} AND last_name = #{lastName}
</select>
在上面的例子中,我们为两个参数分别命名为firstName
和lastName
,然后在SQL语句中通过#{firstName}
和#{lastName}
来引用这两个参数。
- 使用Map:我们也可以使用Map来传递多个参数,然后在SQL语句中通过Map的键来引用这些参数。例如:
Map<String, Object> params = new HashMap<>();
params.put("firstName", "John");
params.put("lastName", "Doe");
List<User> users = sqlSession.selectList("com.example.UserMapper.selectUser", params);
<select id="selectUser" resultType="com.example.User">
SELECT * FROM user WHERE first_name = #{firstName} AND last_name = #{lastName}
</select>
在上面的例子中,我们创建了一个Map,并将两个参数存放在这个Map中,然后在SQL语句中通过#{firstName}
和#{lastName}
来引用这两个参数。
- 使用POJO:如果我们的SQL语句有很多参数,那么我们可以创建一个POJO(Plain Old Java Object)来封装这些参数,然后在SQL语句中通过POJO的属性名来引用这些参数。例如:
public class UserQuery {
private String firstName;
private String lastName;
// getters and setters...
}
UserQuery query = new UserQuery();
query.setFirstName("John");
query.setLastName("Doe");
List<User> users = sqlSession.selectList("com.example.UserMapper.selectUser", query);
<select id="selectUser" resultType="com.example.User">
SELECT * FROM user WHERE first_name = #{firstName} AND last_name = #{lastName}
</select>
在上面的例子中,我们创建了一个UserQuery
类来封装参数,然后在SQL语句中通过#{firstName}
和#{lastName}
来引用这两个参数。
这些就是MyBatis支持的传参数的方法。