zoukankan      html  css  js  c++  java
  • 使用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生成基类的一套代码就行,自定义的虚拟属性和扩展属性,放在子类中,改变基类就应对了数据库表结构的变化。

  • 相关阅读:
    POJ2155 Matrix
    POJ3469 Dual Core CPU
    洛谷P1469找筷子
    CodeForces 97D. Robot in Basement
    UVa11542 Square
    清澄 A1485. Catch The Penguins 抓企鹅
    Bzoj2595: [Wc2008]游览计划
    HDU4085 Peach Blossom Spring
    CodeForces 333E. Summer Earnings
    洛谷P3389 【模板】高斯消元法
  • 原文地址:https://www.cnblogs.com/wendelhuang/p/7243701.html
Copyright © 2011-2022 走看看