使用Mybatis继承特性应对数据库变化

Posted weiwei5987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Mybatis继承特性应对数据库变化相关的知识,希望对你有一定的参考价值。

数据库表结构变化,可以说是在开发过程中一个令人头痛的问题。问题头痛到很多程序员为了不变更表结构,宁愿在代码中写一堆“妥协”的代码也不愿去动表结构,结果造成问题越积越多,等到问题积累到表结构不得不改的时候,发现表结构的问题已经传播到很多其他的系统的模块了,已经不是通过修改一个模块就能简单解决的问题了,所以我的理解是表结构必要做的改动要早作,不要怕麻烦,因为现在一时避免的问题,会在未来引起指数倍增长的问题。

表结构一旦变化,那势必代码要进行大量的修改,这是不可避免的,我们能做的只能是让代码更加灵活来应对数据库的变化。这块Mybatis的继承特性可以一用。

经常使用mybatis-generator来生成对应数据库的model,dao和mapping,然后在上面的基础上修改,这样一旦数据库结构发生变化,想再用generator来重新生成代码会改动比较多,比较麻烦。这个问题可以使用mybatis的继承特性来解决。方案如下。

首先使用generator生成基类的model,dao,mapping: AttachSendTask AttachSendTaskMapper

Mybatis继承使用方式
model: public class AttachSendTaskExtend extends AttachSendTask
dao: public interface AttachSendTaskExtendMapper extends AttachSendTaskMapper
public List<AttachSendTaskExtend> doSelect(); // 使用子类作为查询结果对象

mapping: <mapper namespace="com.aaa.bbb.ccc.ddd.AttachSendTaskExtendMapper">
<resultMap id="BaseResultMap" type="com.aaa.bbb.ccc.ddd..AttachSendTaskExtend" extends="com.aaa.bbb.ccc.ddd.AttachSendTaskMapper.BaseResultMap">
// extends="${namespace}.${resultMap}"

这样表结构发生改变,重新使用generator生成基类的一套代码就行,自定义的虚拟属性和扩展属性,放在子类中,改变基类就应对了数据库表结构的变化。










以上是关于使用Mybatis继承特性应对数据库变化的主要内容,如果未能解决你的问题,请参考以下文章

java的3大特性

mybatis入门:mybatis的基础特性

区块链技术如何有效应对气候变化

如何应对不断变化的 Flyway 迁移?

C#的扩展方法解析

Java的四个基本特性及相关问题