java mybatis入参映射
时间: 2025-05-04 10:59:28 浏览: 22
### MyBatis 中 Java 参数映射的入参配置示例
在 MyBatis 中,参数映射主要用于处理 SQL 查询中的动态输入值。当调用 Mapper 接口方法时,传递给该方法的参数可以通过 `#{}` 占位符绑定到 SQL 语句中[^1]。
#### 基本单参数映射
对于基本类型的参数(如 `int` 或 `String`),可以直接通过 `#{}` 进行占位替换:
```xml
<select id="selectUserById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
```
在此例子中,`#{id}` 表示将传入的方法参数命名为 `id` 并将其值注入到 SQL 的 `WHERE` 子句中[^4]。
#### 复杂对象映射
如果传入的是一个复杂对象(如自定义的 Java 实体类),则需要指定对象属性名称作为键值:
假设有一个名为 `User` 的实体类,其包含两个字段:`username` 和 `password`。
```java
public class User {
private String username;
private String password;
// Getter and Setter methods...
}
```
对应的 XML 配置如下所示:
```xml
<select id="findUserByUsernameAndPassword" parameterType="com.example.User" resultType="com.example.User">
SELECT * FROM users
WHERE username = #{username} AND password = #{password}
</select>
```
这里,`parameterType` 定义了传入的对象类型为 `User` 类型,SQL 使用 `#{username}` 和 `#{password}` 来访问对象内的对应属性[^2]。
#### Map 类型参数映射
除了使用实体类外,还可以利用 `Map` 数据结构来传递多个参数。在这种情况下,`key` 将被用于定位具体的值:
```java
HashMap<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 30);
```
相应的 XML 映射文件应这样编写:
```xml
<select id="getUserByNameAndAge" parameterType="map" resultType="com.example.User">
SELECT * FROM users
WHERE name = #{name} AND age = #{age}
</select>
```
此片段表明,`#{name}` 和 `#{age}` 是基于 `Map` 键名提取的实际参数值。
#### 多参数支持 (推荐方式)
从 MyBatis 3 开始,允许直接向 Mapper 方法提供多个独立参数。为了区分这些参数,在内部会自动赋予它们默认别名,例如第一个参数叫 `_param1`,第二个叫 `_param2` 等等;不过更佳实践是显式标注每个参数的名字,这可通过 `@Param` 注解完成:
```java
public interface UserMapper {
@Select("SELECT * FROM users WHERE username = #{username} AND status = #{status}")
List<User> findUsers(@Param("username") String username, @Param("status") int status);
}
```
上述代码展示了如何借助 `@Param` 注解明确指明各个变量的意义及其关联位置。
---
#### 总结
以上介绍了几种常见的 MyBatis 参数映射形式——单一基础数据类型、复合 POJO 对象以及集合/数组/MAP 形式的多参数情况下的应用实例。每种情形下均需注意合理运用 `#{}` 及其他辅助工具以达成预期效果。
阅读全文
相关推荐















