Mybatis中ResultType和ResultMap的区别

MyBatis中的ResultType和ResultMap都是用来映射查询结果到Java对象的。ResultType适合简单查询结果的映射,而ResultMap适合复杂查询结果及自定义映射关系的情况。

  • ResultType指定了返回值类型,即Sql语句查询结果集中每一行记录对应的Java对象类型。在使用ResultType时,需要保证Sql语句查询结果的列名和Java对象的属性名相同或符合驼峰命名规则。如果列名和属性名不同,可以通过别名解决。使用ResultType可以快速将查询结果集转为Java对象列表,但是无法处理复杂字段的映射关系。

  • ResultMap是通过映射文件(xml)定义的,它能够更加灵活地处理复杂的字段映射关系。ResultMap可以指定java类的属性与数据库查询结果集的列之间的映射关系,也可以指定多个结果集的映射关系。使用ResultMap时,需要在映射文件中定义一个标签,并通过标签明确指定属性和列的映射关系。

以下是使用ResultType和ResultMap实现查询结果映射的示例:

假设有一个学生表(student)和成绩表(score),其中student表包含id、name、age等字段,而score表包含id、student_id、subject、score等字段。现在需要查询所有学生的信息以及每个学生的成绩列表。

  1. 使用ResultType实现映射
<!-- 映射文件 -->
<select id="queryAllStudents" resultType="com.example.Student">
    select * from student
</select>

<!-- Java代码 -->
public class Student {
    private Long id;
    private String name;
    private Integer age;
    private List<Score> scores;
    // getter and setter
}

public class Score {
    private Long id;
    private Long studentId;
    private String subject;
    private Double score;
    // getter and setter
}

List<Student> students = sqlSession.selectList("queryAllStudents");
  1. 使用ResultMap实现映射
<!-- 映射文件 -->
<resultMap id="StudentResultMap" type="com.example.Student">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="age" property="age"/>
    <collection property="scores" ofType="com.example.Score">
        <id column="score_id" property="id"/>
        <result column="subject" property="subject"/>
        <result column="score" property="score"/>
    </collection>
</resultMap>

<select id="queryAllStudents" resultMap="StudentResultMap">
    select s.id, s.name, s.age, sc.id as score_id, sc.subject, sc.score 
    from student s left join score sc on s.id=sc.student_id
</select>

<!-- Java代码与ResultType相同 -->
List<Student> students = sqlSession.selectList("queryAllStudents");

以上两种方式都可以实现查询结果的映射,但是ResultMap可以更加灵活地处理复杂的字段映射关系,如上述例子中的学生信息和成绩列表的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值