一接触ORM,就开始上手全ORM映射的框架,hibernate,Spring Data API,这次接手的项目,使用的是mybatis.
全orm的时候,我是这样获取外键实体的属性的StudentA.Teacher.name,So Easy
但是从查询效率方面考虑的话,全Orm的效率是远远低于原生sql的。半ORM,位于中间。
使用mybatis,最麻烦的就是配置文件的书写太繁琐,也太复杂,好在mybatis-generater,提供了自动生成工具。生成的xml文件中都是些基本的查询,复杂的查询例如一对一,多对一,一对多的查询,一概没有。这些简单的查询,需要我们稍微加工,才能为我们所用。
先来简单看一下
大家一定注意到了,ByPrimary和ByExample.还有Selective了,第一个根据主键查询都好理解,第二个就体现了mybatis充分为程序员考虑了,因为对数据库的操作,不仅仅只把id作为检索体检的,检索条件会各种各样,所以mybatis还为大家封装了critera类,这个类的用法,会在下一篇的博客中进行讲解。
我们先来看一个一对一的查询,大家可能注意到了,xml文件中有一个节点是resultMap,其中是数据库字段和实体属性对应的集合。resultMap整体又是一个或多个查询,从数据库检索的字段的集合,这些字段组成一个实体。
我们来看一个一对一的查询,是如何查询出来并对应上实体的
<selectid="selectByPrimaryKey"resultMap="ResultMapWithBLOBs"parameterType="java.lang.String">
select
tc.id,tc.interview_id,tc.comments_pid,tc.user_id,tc.work_id,tc.show_id,tc.state,tc.replyNum,
tc.visitNum,tc.clicklikeNum,tc.isFamous
<!--<includerefid="Base_Column_List"/>-->
,
<includerefid="Blob_Column_List"/>
<!--,-->
,
tu.nameuser_name,tu.nicknameuser_nickname,tu.homepage_urluser_homepage_url,tu.photo_urluser_photo_url
,
tw.title
,
twi.path
,
twu.idwu_id,twu.namewu_name,twu.nicknamewu_nickname,twu.homepage_urlwu_homepage_url,twu.photo_url
wu_photo_url
fromt_commentstc,t_usertu,t_workstw,t_works_imagetwi,t_usertwu
wheretc.id=#{id,jdbcType=VARCHAR}andtw.id=tc.work_idandtu.id=tc.user_idandtw.works_image_id=twi.id
</select>
上述的查询语句中,可以看出,查出的所有字段的名称,都不可以相同,如果相同的话,会出现赋值错误。