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

时间: 2024-10-12 16:08:16

使用Mybatis继承特性应对数据库变化的相关文章

maven 之分模块构建web项目 及 聚合与继承特性

说明:一下总结文档 工具为:Eclipse , 框架:spring + springMVC + Mybatis + maven 为什么要分模块开发? 很简单提高代码的清晰和重用. 先给大家看一下分模块项目目录架构(如图) 介绍:如上图有一个父项目(user-parent)聚合很多子项目 (user-dao, user-service, user-web).每个项目,不管是父子,都含有一个pom.xml文件.而且要注意的是,每个模块都标出了打包类型. 注意:父项目是pom,也只能是pom.子项目有

Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性

之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven依赖特性 Maven聚合特性 Maven继承特性

Mybatis高级教程之数据库分页插件

mybatis分页 mybatis的数据库分页是基于内存实现的,这样不符合我们实际的应用场景,所有我们需要自己实现分页. 刚开始和朋友们争论是使用插件实现,还是使用原生的sql实现,最后公说公有理婆说婆有理,也没有争论出什么来. 但是最后想想我们使用mybatis的初衷不就是抛弃原生jdbc的繁琐,让mybatis替我们做了繁杂的步骤, 那么mybatis的分页必须通过mybatis内部的一些机制来实现才能满足我们的需要. Mybatis高级教程之数据库分页插件

MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  mapper根节点下配置ResultMap节点信息 <resultMap type="Student" id="studentMapper"> <result column="sname" property="stunam

C++类的继承特性

    整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分.下面我们简单的来说一下继承的概念,先看下图: 上图是一个抽象描述的特性继承表 交通工具是一个基类(也称做父类),通常情况下所有交通工具所共同具备的特性是速度与额定载人的数量,但按照生活常规,我们来继续给交通工具来细分类的时候,我们会分别想到有汽车类和飞机类等等,汽车类和飞类同样具备速度和额定载人数量这样的特

160411、实时监控mysql数据库变化

对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数据库配置文件my.ini (一般在数据库安装目录)(D:\MYSQL) 2.在数据库的最后一行添加 log=log.txt 代码 3.重启mysql数据库 4.去数据库数据目录 我的是(D:\MYSQL\data) 你会发现多了一个log.txt文件 我的是在C:\Documents and Set

mybatis+oracle 完成插入数据库,并将主键返回的注意事项

mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_NO VARCHAR2(200), UM_CODE VARCHAR2(50), BATCH_STATUS CHAR(1) DEFAULT '0', BATCH_TYPE CHAR(1), CREATED_DATE DATE, CREATED_BY VARCHAR(100), UPDATED_DATE

玩转SpringBoot之整合Mybatis拦截器对数据库水平分表

利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较完善的第三方组件:sharding-jdbc来实现:但是你使用后会发现,貌似对oracle的兼容性不是很好.所以最后我还是决定使用Mybatis拦截器对数据库进行水平分表. 为什么要选用Mybatis拦截器 拦截器:我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可

Mybatis实现简单的数据库增删改查操作

Mybatis实现简单的数据库增删改查操作 框架:mybatis(3.5.2) 数据库:mysql 工具:idea 1.新建一个maven项目,在pom文件中添加mybatis依赖及MySQL依赖 <!-- mybatis核心依赖 --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId&g