温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis怎么映射结果

发布时间:2026-09-23 08:03:33 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java + MyBatis 中,“映射结果”通常指把 SQL 查询结果 映射成 Java 对象(POJO / DTO / Map 等)。下面从常见方式、示例、注意点系统讲一下。


一、MyBatis 结果映射的几种方式

1️⃣ 自动映射(最常用)

前提:数据库列名与 Java 属性名 一致(或符合命名规则)

public class User {
    private Long id;
    private String username;
    private Integer age;
    // getter / setter
}
<select id="selectUser" resultType="com.example.User">
    SELECT id, username, age FROM user
</select>

✅ 字段名 username → 属性 username
✅ 下划线自动转驼峰(需开启配置)

mybatis:
  configuration:
    map-underscore-to-camel-case: true

2️⃣ resultType(简单对象 / Map)

<select id="getUserMap" resultType="map">
    SELECT * FROM user
</select>

返回:

Map<String, Object>

⚠️ 适合临时查询,不推荐业务核心逻辑


3️⃣ resultMap(推荐,灵活强大)

用于:

  • 字段名 ≠ 属性名
  • 复杂对象(一对一、一对多)
  • 继承、类型转换
<resultMap id="userMap" type="com.example.User">
    <id column="user_id" property="id"/>
    <result column="user_name" property="username"/>
    <result column="user_age" property="age"/>
</resultMap>

<select id="selectUser" resultMap="userMap">
    SELECT user_id, user_name, user_age FROM user
</select>

二、关联映射(重点)

1️⃣ 一对一(association)

public class Order {
    private Long id;
    private User user;
}
<resultMap id="orderMap" type="Order">
    <id column="order_id" property="id"/>
    <association property="user" javaType="User">
        <id column="user_id" property="id"/>
        <result column="user_name" property="username"/>
    </association>
</resultMap>

2️⃣ 一对多(collection)

public class User {
    private Long id;
    private List<Order> orders;
}
<resultMap id="userOrderMap" type="User">
    <id column="user_id" property="id"/>
    <collection property="orders" ofType="Order">
        <id column="order_id" property="id"/>
    </collection>
</resultMap>

三、注解方式(不用 XML)

@Select("SELECT id, username FROM user")
@Results({
    @Result(column = "user_name", property = "username")
})
List<User> listUsers();

✅ 适合小项目
❌ 复杂映射不如 XML 清晰


四、常见问题 & 坑

✅ 1. 字段没映射上?

  • 没开驼峰
  • resultMap 写错
  • SQL 没查该字段

✅ 2. 返回 List 还是对象?

<select id="getUser" resultType="User">
  • 返回 单行 → User
  • 返回 多行 → List

✅ 3. NULL 问题

  • 基本类型(int)不能接 NULL
  • 用 Integer

五、总结一句话

简单映射用 resultType,复杂映射用 resultMap,字段不一致必须 resultMap

如果你有:

  • 具体 SQL
  • 实体类
  • 报错信息

可以直接贴出来,我可以帮你精确改 ✅

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手