mybatis 传参
Mybatis传参有几种方式。一种是直接在SQL语句中使用占位符,然后在Java代码中使用参数来填充这些占位符。这种方式适用于参数较少的情况。另一种方式是使用@Param注解来指定参数的名称,然后在XML文件中使用这些参数名称来引用参数的值。这种方式适用于参数较多的情况。当接口中只有一个参数时,可以在XML文件中添加参数类型parameterType来指定参数的类型。而当接口中有多个参数时,可以直接使用@Param注解来指定参数的名称,而不需要指定参数的类型。这样在XML文件中就可以直接引用这些参数的值了。[1][2][3]
mybatis传参
传递参数的方式
在 MyBatis 中,可以通过多种方式实现参数的传递。以下是几种常见的传参方式及其具体实现:
1. 单个参数传递
当只需要传递单个参数时,可以直接将其作为方法参数的一部分。MyBatis 会自动识别并绑定该参数。
public interface UserMapper {
List<User> selectUsersByName(String name);
}
对应的 XML 映射文件如下:
<select id="selectUsersByName" resultType="User">
SELECT * FROM users WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
这里 #{name}
表示占位符,用于接收 Java 方法中的参数[^3]。
2. 多个参数传递(使用注解)
如果需要传递多个参数,则可以借助 @Param
注解来区分不同的参数名称。
public interface UserMapper {
List<User> selectUsersByAgeAndName(@Param("age") int age, @Param("name") String name);
}
XML 文件配置如下:
<select id="selectUsersByAgeAndName" resultType="User">
SELECT * FROM users WHERE age = #{age} AND name LIKE CONCAT('%', #{name}, '%')
</select>
这种方式适用于简单的多参数场景。
3. 使用 Map 类型传递参数
对于复杂的查询条件或者不确定数量的参数,可以使用 Map
来封装所有的键值对。
Java 接口定义:
public interface UserMapper {
List<User> selectUsersByConditions(Map<String, Object> params);
}
调用时:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("age", 20);
paramMap.put("name", "John");
List<User> userList = userMapper.selectUsersByConditions(paramMap);
XML 配置:
<select id="selectUsersByConditions" resultType="User">
SELECT * FROM users
<where>
<if test="age != null">AND age = #{age}</if>
<if test="name != null">AND name LIKE CONCAT('%', #{name}, '%')</if>
</where>
</select>
这种动态 SQL 的写法非常灵活,适合复杂查询需求[^4]。
4. 实体类对象传递
另一种常见的方式是将所有参数封装到一个实体类中,并直接将该对象作为参数传递给 Mapper 方法。
实体类定义:
@Data
public class QueryCondition {
private Integer age;
private String name;
}
接口定义:
public interface UserMapper {
List<User> selectUsersByEntity(QueryCondition condition);
}
XML 配置:
<select id="selectUsersByEntity" resultType="User">
SELECT * FROM users
<where>
<if test="condition.age != null">AND age = #{condition.age}</if>
<if test="condition.name != null">AND name LIKE CONCAT('%', #{condition.name}, '%')</if>
</where>
</select>
这种方法不仅结构清晰,还便于维护和扩展[^5]。
示例代码总结
以下是一个完整的例子,展示如何通过不同方式进行参数传递:
// 单参数传递
List<User> singleParamResult = userMapper.selectUsersByName("Alice");
// 多参数传递 (带注解)
List<User> multiParamResult = userMapper.selectUsersByAgeAndName(25, "Bob");
// 使用 Map 传递
Map<String, Object> mapParams = new HashMap<>();
mapParams.put("age", 30);
mapParams.put("name", "Charlie");
List<User> resultMapFromMap = userMapper.selectUsersByConditions(mapParams);
// 使用实体类传递
QueryCondition condition = new QueryCondition();
condition.setAge(35);
condition.setName("David");
List<User> resultMapFromEntity = userMapper.selectUsersByEntity(condition);
总结
MyBatis 提供了丰富的参数传递机制,可以根据实际业务需求选择合适的方式来处理各种复杂度的查询逻辑。无论是简单还是复杂的查询条件,都可以找到一种优雅的解决方案[^1]。
mybatis 传参排序
MyBatis 是一个持久层框架,它允许你在 SQL 映射文件中编写动态 SQL 查询,并通过 XML 或注解的方式配置参数传递。如果你想在查询结果中按照某个字段进行排序,可以在 SQL 语句中添加 ORDER BY
子句。
例如,在 XML 映射文件 .xml
中:
<select id="selectUsers" parameterType="map" resultType="User">
SELECT * FROM users
<if test="sortField != null">
ORDER BY ${sortField} ${sortOrder}
</if>
</select>
在这个例子中,sortField
和 sortOrder
是两个参数,sortField
表示你想按哪个字段排序,sortOrder
可能是 "ASC"(升序)或 "DESC"(降序)。在调用这个查询时,你可以传递一个 Map 类型的对象,比如:
Map<String, Object> params = new HashMap<>();
params.put("sortField", "username"); // 按用户名排序
params.put("sortOrder", "DESC"); // 降序排列
List<User> users = sqlSession.selectList("selectUsers", params);
如果想让 MyBatis 自动处理排序,可以使用 @Param
注解并结合 Java 8 的 Lambda 表达式:
List<User> users = sqlSession.selectList(
"selectUsers",
(Object) map -> map.put("sortField", "username").put("sortOrder", "DESC")
);
相关推荐














