最近刚开始用MyBatis,之前也没有接触过,但项目急得很,没办法。但现在遇到了一个问题:
我有三个类都继承同一个父类,然后三个类使用同一张表。现在我需要写Mybatis的mapper.xml文件,我有一种思路就是为每一个类单独写,但那样的话有很多公共字段都要重复,所以我想问下,有没有其他简单的方式?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在MyBatis中,针对您描述的情况,确实存在一种更高效的方式来避免重复定义SQL语句。当多个类(实体)共享同一张表,并且这些类继承自同一个父类时,可以通过以下策略来简化mapper.xml的编写:
使用ResultMap继承: 在MyBatis中,可以定义一个基础的ResultMap来映射共用的字段,然后让其他ResultMap继承这个基础ResultMap。这样,公共字段只需定义一次。
示例代码如下:
<resultMap id="BaseResultMap" type="com.test.BaseClass">
<id column="id" property="id"/>
<!-- 其他公共字段映射 -->
</resultMap>
<resultMap id="Child1ResultMap" type="com.test.Child1" extends="BaseResultMap">
<!-- Child1特有的字段映射 -->
</resultMap>
<resultMap id="Child2ResultMap" type="com.test.Child2" extends="BaseResultMap">
<!-- Child2特有的字段映射 -->
</resultMap>
使用<sql>
标签定义为可重用的代码片段,然后在具体的操作中通过<include>
标签引用。
示例代码:
<sql id="CommonSelectFields">SELECT id, gmt_create, gmt_modified, ...</sql>
<select id="getByPK" resultMap="Child1ResultMap">
<include refid="CommonSelectFields"/>
FROM your_table WHERE id=#{pk}
</select>
结合这两种方法,您可以有效减少mapper.xml文件中的重复代码,提高维护性和可读性。