resultType:先看代码
实体类:
public class Student{
private Integer sid;
private String sname;
private String class;
//省略getter and setter
}
xml文件:
<select id = selectStudentById resultType = "com.demo.model.Student">
select sname, class
from student
where
sid = #{id}
</select>
当实体类的属性名与数据库字段一致时可以采用resultType来配置映射。
resultMap:MyBatis中最重要最强大的元素,可以为复杂的sql语句提供复杂的映射结果(实际上也不会很复杂),先来了解简单的resultMap结构,以下是来自官网的 博客----文章 例子:
<resultMap id="blogResult" type="Blog">
<id property="id" column="blog_id" />
<result property="title" column="blog_title"/>
<collection property="posts" ofType="Post">
<id property="id" column="post_id"/>
<result property="subject" column="post_subject"/>
<result property="body" column="post_body"/>
</collection>
</resultMap>
- id:一个id结果,标记出作为 ID 的结果可以帮助提高整体性能
- type:类的完全限定名, 或者一个类型别名
- 属性id:唯一标识,用于标识一个结果映射
- result: 注入到字段或 JavaBean 属性的普通结果
- proerty:对应实体类中的属性
- colunm:对应数据库中的字段(这与resultType的区别主要之一)
- collection:一对多映射结果集(一个博客有多篇文章)
- association:一对一映射结果(一个博客一个作者)
结构暂且说这么多,有兴趣可以到官网自行了解
现在直接从实际场景中分析
实体类:
public class Blog{
private Integer id;
private String title;
privat Integer authorId;
private List<Post> posts;
//省略getter and setter 方法
}
sql语句:
<select id="selectBlog" resultMap="blogResult">
select
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id,
P.id as post_id,
P.subject as post_subject,
P.body as post_body,
from Blog B
left outer join Post P on B.id = P.blog_id
where B.id = #{id}
</select>
resultMap:
collection 里面的内容是相当于把另一个结构体嵌进来,至于一对一的结果映射等下次再聊。
<resultMap id="blogResult" type="Blog">
<id property="id" column="blog_id" />
<result property="title" column="blog_title"/>
<!--配置文章属性-->
<collection property="posts" ofType="com.demo.model.Post">
<id property="id" column="post_id"/>
<result property="subject" column="post_subject"/>
<result property="body" column="post_body"/>
</collection>
</resultMap>
网友评论