■一、数据库表数据备份

此处的数据库表数据备份指的并不是整个数据库的数据备份,而是针对某些数据量比较大的业务表的历史数据备份。数据库中基础表、用户表、字典表等等表的数据量都是非常小的,只有个别业务表因业务操作频繁数据量巨大。假如我们的业务表并不需要保存过长时间的业务数据时,可以将一定期限前的数据保存到历史表中。这样业务表中数据量就能够保持到一个合理水平,从而提高该业务表的查询效率。

备份数据逻辑图:

■二、数据备份逻辑设计

表定义

接收报文(wdi_receive_msg_01)

No 物理名 逻辑名称 数据类型 主键唯一 非空 默认值 注释
1 id 物理主键 INT4 TRUE TRUE 序列值  
2 msg_text 报文内容 TEXT FALSE TRUE NULL 接收数据内容
3 msg_length 报文大小 INT4 FALSE TRUE NULL  
4 receive_servicecd 接收报文服务编码 VARCHAR(100) FALSE FALSE NULL  
5 connect_add 接收地址 CHAR(30) FALSE TRUE NULL 接收地址
6 create_user 创建者 VARCHAR(50) FALSE TRUE NULL  
7 create_time 创建时间 TIMESTAMP FALSE TRUE NULL  
8 update_user 修改者 VARCHAR(50) FALSE TRUE NULL  
9 update_time 修改时间 TIMESTAMP FALSE TRUE NULL  

接收报文历史(wdi_receive_msg_history_01)

No 物理名 逻辑名称 数据类型 主键唯一 非空 默认值 注释
1 id 物理主键 INT4 TRUE TRUE   业务表数据
2 msg_text 报文内容 TEXT FALSE TRUE NULL 业务表数据
3 msg_length 报文大小 INT4 FALSE TRUE NULL 业务表数据
4 receive_servicecd 接收报文服务编码 VARCHAR(100) FALSE FALSE NULL 业务表数据
5 connect_add 接收地址 CHAR(30) FALSE TRUE NULL 业务表数据
6 create_user 创建者 VARCHAR(50) FALSE TRUE NULL 业务表数据
7 create_time 创建时间 TIMESTAMP FALSE TRUE NULL 业务表数据
8 update_user 修改者 VARCHAR(50) FALSE TRUE NULL 业务表数据
9 update_time 修改时间 TIMESTAMP FALSE TRUE NULL 业务表数据
10 backup_user 备份者 VARCHAR(50) FALSE TRUE NULL 备份时追加数据
11 backup_time 备份时间 TIMESTAMP FALSE TRUE NULL 备份时追加数据

历史数据(wdi_history)

No 物理名 逻辑名称 数据类型 主键唯一 非空 默认值 注释
1 id 物理主键 INT4 TRUE TRUE 序列值  
2 table_name 业务表名称 VARCHAR(100) FALSE TRUE NULL 处理业务表名
3 table_minid 表的最小ID值 INT4 FALSE FALSE NULL 处理日表id的最小值
4 table_maxid 表的最大ID值 INT4 FALSE FALSE NULL 处理日表id的最大值
5 opt_date 处理日期 DATE FALSE TRUE NULL  
6 backup_flag 备份标志 CHAR(1) FALSE TRUE NULL Y:已备份/N:未备份
7 create_user 创建者 VARCHAR(50) FALSE TRUE NULL  
8 create_time 创建时间 TIMESTAMP FALSE TRUE NULL  
9 update_user 修改者 VARCHAR(50) FALSE TRUE NULL  
10 update_time 修改时间 TIMESTAMP FALSE TRUE NULL  

1.在数据备份时我们需要解决以下几个问题。

1)由于我们的数据备份是通过每天的定时任务完成的,如果其中某些天程序没有执行,那么后续的定时任务要把前面没有执行的数据处理掉。
2)业务表的主键ID是通过PostgreSQL的sequence生成的。这就存在一个问题当sequence达到最大值后,他将重新从1开始取值。这个特殊的数据变化也要在程序中处理掉。

2.处理逻辑设计

1)每天需要将业务表中最小id和最大id放入【历史数据(wdi_history)】中。
  每天0点时获取业务表的最大id,并将该id作为昨天的最大id和今天的最小id更新到【历史数据】表中。

插入历史数据表数据有以下几种情况:

2)备份数据只需要处理15天前的业务数据 最小id->最大id。

3)删除历史表中180天以前的数据。

■三、代码实现

1)定时任务配置类

package infosky.wdis.task;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 配置定时任务*/
@Configuration
public class QuartzConfig {/*** 使用jobDetail包装job* @return*/@Beanpublic JobDetail backupJobDetail(){return JobBuilder.newJob(BackupJob.class).withIdentity("backupJob").storeDurably().build();}/*** 把jobDetail注册到Cron表达式的trigger上去* @return*/@Beanpublic Trigger backupJobCronTrigger(){CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("1 0 0 * * ?");return TriggerBuilder.newTrigger().forJob(backupJobDetail()).withIdentity("backupJobCronTrigger").withSchedule(cronScheduleBuilder).build();}
}

2)数据备份类

package infosky.wdis.task;
import infosky.wdis.common.WdiConstants;
import infosky.wdis.dao.WdiBackupDataMapper;
import infosky.wdis.dao.WdiHistoryMapper;
import infosky.wdis.dao.WdiReceiveMsgHistoryMapper;
import infosky.wdis.dao.WdiSendMsgHistoryMapper;
import infosky.wdis.entity.WdiBackupData;
import infosky.wdis.entity.WdiHistory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
import java.util.List;/*** 定时任务* 数据备份** 2020/01/29*/
@Transactional
public class BackupJob extends QuartzJobBean {private static final Logger logger = LoggerFactory.getLogger(BackupJob.class);@AutowiredWdiHistoryMapper wdiHistoryMapper;@AutowiredWdiReceiveMsgHistoryMapper wdiReceiveMsgHistoryMapper;@AutowiredWdiSendMsgHistoryMapper wdiSendMsgHistoryMapper;@AutowiredWdiBackupDataMapper wdiBackupDataMapper;/*** 定时任务处理* @param jobExecutionContext* @throws JobExecutionException*/@Overrideprotected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {logger.info("########## BackupJob/executeInternal start ##########");// 1.将今天的最小id和昨天的最大id登录到【wdi_history】表中saveIdByTablename("wdi_receive_msg_01");saveIdByTablename("wdi_receive_msg_02");saveIdByTablename("wdi_receive_msg_03");saveIdByTablename("wdi_receive_msg_04");saveIdByTablename("wdi_receive_msg_05");saveIdByTablename("wdi_receive_msg_06");saveIdByTablename("wdi_receive_msg_07");saveIdByTablename("wdi_receive_msg_08");saveIdByTablename("wdi_receive_msg_09");saveIdByTablename("wdi_receive_msg_10");saveIdByTablename("wdi_receive_msg_11");saveIdByTablename("wdi_receive_msg_12");saveIdByTablename("wdi_receive_msg_13");saveIdByTablename("wdi_receive_msg_14");saveIdByTablename("wdi_receive_msg_15");saveIdByTablename("wdi_receive_msg_16");saveIdByTablename("wdi_receive_msg_17");saveIdByTablename("wdi_receive_msg_18");saveIdByTablename("wdi_receive_msg_19");saveIdByTablename("wdi_receive_msg_20");saveIdByTablename("wdi_send_msg_01");saveIdByTablename("wdi_send_msg_02");saveIdByTablename("wdi_send_msg_03");saveIdByTablename("wdi_send_msg_04");saveIdByTablename("wdi_send_msg_05");saveIdByTablename("wdi_send_msg_06");saveIdByTablename("wdi_send_msg_07");saveIdByTablename("wdi_send_msg_08");saveIdByTablename("wdi_send_msg_09");saveIdByTablename("wdi_send_msg_10");saveIdByTablename("wdi_send_msg_11");saveIdByTablename("wdi_send_msg_12");saveIdByTablename("wdi_send_msg_13");saveIdByTablename("wdi_send_msg_14");saveIdByTablename("wdi_send_msg_15");saveIdByTablename("wdi_send_msg_16");saveIdByTablename("wdi_send_msg_17");saveIdByTablename("wdi_send_msg_18");saveIdByTablename("wdi_send_msg_19");saveIdByTablename("wdi_send_msg_20");// 2.将业务表数据备份到历史表中backupData("wdi_receive_msg_01","wdi_receive_msg_history_01");backupData("wdi_receive_msg_02","wdi_receive_msg_history_02");backupData("wdi_receive_msg_03","wdi_receive_msg_history_03");backupData("wdi_receive_msg_04","wdi_receive_msg_history_04");backupData("wdi_receive_msg_05","wdi_receive_msg_history_05");backupData("wdi_receive_msg_06","wdi_receive_msg_history_06");backupData("wdi_receive_msg_07","wdi_receive_msg_history_07");backupData("wdi_receive_msg_08","wdi_receive_msg_history_08");backupData("wdi_receive_msg_09","wdi_receive_msg_history_09");backupData("wdi_receive_msg_10","wdi_receive_msg_history_10");backupData("wdi_receive_msg_11","wdi_receive_msg_history_11");backupData("wdi_receive_msg_12","wdi_receive_msg_history_12");backupData("wdi_receive_msg_13","wdi_receive_msg_history_13");backupData("wdi_receive_msg_14","wdi_receive_msg_history_14");backupData("wdi_receive_msg_15","wdi_receive_msg_history_15");backupData("wdi_receive_msg_16","wdi_receive_msg_history_16");backupData("wdi_receive_msg_17","wdi_receive_msg_history_17");backupData("wdi_receive_msg_18","wdi_receive_msg_history_18");backupData("wdi_receive_msg_19","wdi_receive_msg_history_19");backupData("wdi_receive_msg_20","wdi_receive_msg_history_20");backupData("wdi_send_msg_01","wdi_send_msg_history_01");backupData("wdi_send_msg_02","wdi_send_msg_history_02");backupData("wdi_send_msg_03","wdi_send_msg_history_03");backupData("wdi_send_msg_04","wdi_send_msg_history_04");backupData("wdi_send_msg_05","wdi_send_msg_history_05");backupData("wdi_send_msg_06","wdi_send_msg_history_06");backupData("wdi_send_msg_07","wdi_send_msg_history_07");backupData("wdi_send_msg_08","wdi_send_msg_history_08");backupData("wdi_send_msg_09","wdi_send_msg_history_09");backupData("wdi_send_msg_10","wdi_send_msg_history_10");backupData("wdi_send_msg_11","wdi_send_msg_history_11");backupData("wdi_send_msg_12","wdi_send_msg_history_12");backupData("wdi_send_msg_13","wdi_send_msg_history_13");backupData("wdi_send_msg_14","wdi_send_msg_history_14");backupData("wdi_send_msg_15","wdi_send_msg_history_15");backupData("wdi_send_msg_16","wdi_send_msg_history_16");backupData("wdi_send_msg_17","wdi_send_msg_history_17");backupData("wdi_send_msg_18","wdi_send_msg_history_18");backupData("wdi_send_msg_19","wdi_send_msg_history_19");backupData("wdi_send_msg_20","wdi_send_msg_history_20");// 3.删除180天以上数据deleteBackupData("wdi_receive_msg_history_01");deleteBackupData("wdi_receive_msg_history_02");deleteBackupData("wdi_receive_msg_history_03");deleteBackupData("wdi_receive_msg_history_04");deleteBackupData("wdi_receive_msg_history_05");deleteBackupData("wdi_receive_msg_history_06");deleteBackupData("wdi_receive_msg_history_07");deleteBackupData("wdi_receive_msg_history_08");deleteBackupData("wdi_receive_msg_history_09");deleteBackupData("wdi_receive_msg_history_10");deleteBackupData("wdi_receive_msg_history_11");deleteBackupData("wdi_receive_msg_history_12");deleteBackupData("wdi_receive_msg_history_13");deleteBackupData("wdi_receive_msg_history_14");deleteBackupData("wdi_receive_msg_history_15");deleteBackupData("wdi_receive_msg_history_16");deleteBackupData("wdi_receive_msg_history_17");deleteBackupData("wdi_receive_msg_history_18");deleteBackupData("wdi_receive_msg_history_19");deleteBackupData("wdi_receive_msg_history_20");deleteBackupData("wdi_send_msg_history_01");deleteBackupData("wdi_send_msg_history_02");deleteBackupData("wdi_send_msg_history_03");deleteBackupData("wdi_send_msg_history_04");deleteBackupData("wdi_send_msg_history_05");deleteBackupData("wdi_send_msg_history_06");deleteBackupData("wdi_send_msg_history_07");deleteBackupData("wdi_send_msg_history_08");deleteBackupData("wdi_send_msg_history_09");deleteBackupData("wdi_send_msg_history_10");deleteBackupData("wdi_send_msg_history_11");deleteBackupData("wdi_send_msg_history_12");deleteBackupData("wdi_send_msg_history_13");deleteBackupData("wdi_send_msg_history_14");deleteBackupData("wdi_send_msg_history_15");deleteBackupData("wdi_send_msg_history_16");deleteBackupData("wdi_send_msg_history_17");deleteBackupData("wdi_send_msg_history_18");deleteBackupData("wdi_send_msg_history_19");deleteBackupData("wdi_send_msg_history_20");logger.info("########## BackupJob/executeInternal end ##########");}/*** 获取业务表表最大id,并将该值插入到wdi_history中** @param tablename 业务表名*/public void saveIdByTablename(String tablename){// 1.获取业务表中最大的idInteger maxId = wdiHistoryMapper.getMaxId(tablename);if(maxId == null){maxId = 0;}// 2.将1获取的id保存到wdi_history中,前一天的maxid和今天的minid// 2.1.处理前一天的wdi_history数据WdiHistory wdiHistory = new WdiHistory();// 表名称wdiHistory.setTableName(tablename);// 处理日期Calendar yesterday = Calendar.getInstance();yesterday.add(Calendar.DATE, -1);wdiHistory.setOptDate(yesterday.getTime());// 获取当前日期前一天的wdi_history数据WdiHistory yesterdayWdiHistory = wdiHistoryMapper.getWdiHistory(wdiHistory);// 前一天wdi_history数据不存在if(yesterdayWdiHistory == null){// 如果不存在就插入WdiHistory insWdiHistory = new WdiHistory();// 表名称insWdiHistory.setTableName(tablename);// 表的ID值insWdiHistory.setTableMaxid(maxId);// 处理日期insWdiHistory.setOptDate(yesterday.getTime());// 备份标志insWdiHistory.setBackupFlag("N");// 创建者insWdiHistory.setCreateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);// 创建时间insWdiHistory.setCreateTime(new Date());// 修改者insWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);// 修改时间insWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.insertSelective(insWdiHistory);}else{// 如果存在就更新WdiHistory updWdiHistory = new WdiHistory();// 表名称updWdiHistory.setTableName(tablename);// 处理日期updWdiHistory.setOptDate(yesterday.getTime());// 表的ID值updWdiHistory.setTableMaxid(maxId);// 修改者updWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);// 修改时间updWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.updateByTableNameOptTime(updWdiHistory);}// 2.2.插入当天wdi_history数据WdiHistory todayWdiHistory = new WdiHistory();// 表名称todayWdiHistory.setTableName(tablename);// 表的ID值todayWdiHistory.setTableMinid(maxId);// 处理日期todayWdiHistory.setOptDate(new Date());// 备份标志todayWdiHistory.setBackupFlag("N");// 创建者todayWdiHistory.setCreateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);// 创建时间todayWdiHistory.setCreateTime(new Date());// 修改者todayWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);// 修改时间todayWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.insertSelective(todayWdiHistory);}/*** 备份数据* @param tablename        业务表名* @param historyTablename 历史表名*/public void backupData(String tablename,String historyTablename){Calendar day = Calendar.getInstance();// 获取15天以前的id值day.add(Calendar.DATE, -15);// 设定查询条件WdiHistory wdiHistory = new WdiHistory();wdiHistory.setTableName(tablename);wdiHistory.setOptDate(day.getTime());List<WdiHistory> wdiHistoryBefore15daysOld = wdiHistoryMapper.getWdiHistoryLst(wdiHistory);// 如果15天以前的DiHistory存在,处理继续if(wdiHistoryBefore15daysOld != null && wdiHistoryBefore15daysOld.size() > 0){// ====================================================================//  maxId | minId maxId| minId     |     maxId | minId maxId| minId// 本处理会出现以下几种情况// 1.minId,maxId都存在,当maxId>minId时为正常情况。当maxId<minId时,说明seq跨越了最大值,需要特殊处理// 2.minId存在,但是maxId不存在。这种情况说明定时处理在这一天执行了,插入了minId,但是第二天定时任务//   没有执行,所以没有插入maxId。这种情况不做处理。// 3.minId不存在,但是maxId存在。产生这种情况有2种可能。//   A:当定时任务第一次执行的时候,会插入前一天maxId,但是不会有minId。//   B:本定时任务隔了几天后又开始执行。这个时候我们要找到这一次定时任务前面的执行结果。那个结果中只有minId,//     而没有maxId,我们需要处理从哪个minId开始,到这次的maxId的数据。// ====================================================================for(int i=0;i<wdiHistoryBefore15daysOld.size();i++){WdiHistory tmpWdiHistory = wdiHistoryBefore15daysOld.get(i);WdiBackupData wbd = new WdiBackupData();wbd.setTbnm(tablename);wbd.setTbnm_history(historyTablename);Integer minId = tmpWdiHistory.getTableMinid();Integer maxId = tmpWdiHistory.getTableMaxid();// 判断最大最小id是否存在if(minId != null && maxId != null){// 最大与最小id都存在// 判断最大id与最小id的大小关系if(maxId >= minId){// 正常情况backupTable(wbd,minId,maxId);}else{// 跨越seq最大值情况// a:minId->seq最大值(2147483647)    b:0->maxIdbackupTable(wbd,minId,2147483647);backupTable(wbd,0,maxId);}// 更新wdi_history表tmpWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);tmpWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.updWdiHistoryByTableNameOptDate(tmpWdiHistory);}else if(minId != null && maxId == null){// 最小id存在,最大id不存在 ※无需处理}else if(minId == null && maxId != null){// 最小id不存在,最大id存在  ※2种情况。1.第一次插入数据,没有最小id。2.程序执行中间有些天没有有启动。// 本条DiHistory是表中第一条数据if(i == 0){// 处理数据0->maxIdbackupTable(wbd,0,maxId);// 更新wdi_history表tmpWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);tmpWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.updWdiHistoryByTableNameOptDate(tmpWdiHistory);}else{// 获取minIdInteger beforeMinId = wdiHistoryBefore15daysOld.get(i-1).getTableMinid();// 比较beforeMinId 与 maxId大小关系if(maxId >= beforeMinId){// 正常情况backupTable(wbd,beforeMinId,maxId);}else{// 跨越seq最大值情况// a:beforeMinId->seq最大值(2147483647)    b:0->maxIdbackupTable(wbd,beforeMinId,2147483647);backupTable(wbd,0,maxId);}// 更新wdi_history表 当条数据tmpWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);tmpWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.updWdiHistoryByTableNameOptDate(tmpWdiHistory);// 更新wdi_history表 前一条数据(存在minId的数据)WdiHistory beforeTmpWdiHistory = wdiHistoryBefore15daysOld.get(i-1);beforeTmpWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);beforeTmpWdiHistory.setUpdateTime(new Date());wdiHistoryMapper.updWdiHistoryByTableNameOptDate(beforeTmpWdiHistory);}}else{// 最小最大id都不存在 ※理论上不会出现这种状况}}}}/*** 备份业务表数据到历史表,并删除已备份业务数据** @param wdiBackupData 需备份业务表及历史表信息* @param minId         备份的起始id* @param maxId         备份的终止id*/public void backupTable(WdiBackupData wdiBackupData,Integer minId,Integer maxId){while(true){if(minId + 1000 <= maxId){wdiBackupData.setMinId(minId);wdiBackupData.setMaxId(minId + 1000);// 分批备份数据wdiBackupDataMapper.backUpData(wdiBackupData);// 删除业务表已备份数据wdiBackupDataMapper.deleteData(wdiBackupData);minId = minId + 1000;}else{wdiBackupData.setMinId(minId);wdiBackupData.setMaxId(maxId);// 分批备份数据wdiBackupDataMapper.backUpData(wdiBackupData);// 删除业务表已备份数据wdiBackupDataMapper.deleteData(wdiBackupData);break;}}}/*** 删除历史表数据* @param historyTablename 历史表名*/public void deleteBackupData(String historyTablename){wdiHistoryMapper.deleteHistoryMsgByTableName(historyTablename);}
}

3)SQL  WdiHistoryMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="infosky.wdis.dao.WdiHistoryMapper"><resultMap id="BaseResultMap" type="infosky.wdis.entity.WdiHistory"><id column="id" jdbcType="INTEGER" property="id" /><result column="table_name" jdbcType="VARCHAR" property="tableName" /><result column="table_minid" jdbcType="INTEGER" property="tableMinid" /><result column="table_maxid" jdbcType="INTEGER" property="tableMaxid" /><result column="opt_date" jdbcType="DATE" property="optDate" /><result column="backup_flag" jdbcType="CHAR" property="backupFlag" /><result column="create_user" jdbcType="VARCHAR" property="createUser" /><result column="create_time" jdbcType="TIMESTAMP" property="createTime" /><result column="update_user" jdbcType="VARCHAR" property="updateUser" /><result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /></resultMap><sql id="Example_Where_Clause"><where><foreach collection="oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Update_By_Example_Where_Clause"><where><foreach collection="example.oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Base_Column_List">id, table_name, table_minid, table_maxid, opt_date, backup_flag, create_user, create_time, update_user, update_time</sql><select id="selectByExample" parameterType="infosky.wdis.entity.WdiHistoryExample" resultMap="BaseResultMap">select<if test="distinct">distinct</if>'true' as QUERYID,<include refid="Base_Column_List" />from wdi_history<if test="_parameter != null"><include refid="Example_Where_Clause" /></if><if test="orderByClause != null">order by ${orderByClause}</if></select><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from wdi_historywhere id = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from wdi_historywhere id = #{id,jdbcType=INTEGER}</delete><delete id="deleteByExample" parameterType="infosky.wdis.entity.WdiHistoryExample">delete from wdi_history<if test="_parameter != null"><include refid="Example_Where_Clause" /></if></delete><insert id="insert" parameterType="infosky.wdis.entity.WdiHistory">insert into wdi_history (id, table_name, table_minid, table_maxid, opt_date, backup_flag, create_user, create_time, update_user, update_time)values (#{id,jdbcType=INTEGER}, #{tableName,jdbcType=VARCHAR}, #{tableMinid,jdbcType=INTEGER}, #{tableMaxid,jdbcType=INTEGER}, #{optDate,jdbcType=DATE}, #{backupFlag,jdbcType=CHAR}, #{createUser,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP})</insert><insert id="insertSelective" parameterType="infosky.wdis.entity.WdiHistory">insert into wdi_history<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if><if test="tableName != null">table_name,</if><if test="tableMinid != null">table_minid,</if><if test="tableMaxid != null">table_maxid,</if><if test="optDate != null">opt_date,</if><if test="backupFlag != null">backup_flag,</if><if test="createUser != null">create_user,</if><if test="createTime != null">create_time,</if><if test="updateUser != null">update_user,</if><if test="updateTime != null">update_time,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id != null">#{id,jdbcType=INTEGER},</if><if test="tableName != null">#{tableName,jdbcType=VARCHAR},</if><if test="tableMinid != null">#{tableMinid,jdbcType=INTEGER},</if><if test="tableMaxid != null">#{tableMaxid,jdbcType=INTEGER},</if><if test="optDate != null">#{optDate,jdbcType=DATE},</if><if test="backupFlag != null">#{backupFlag,jdbcType=CHAR},</if><if test="createUser != null">#{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">#{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if></trim></insert><update id="updateByExampleSelective" parameterType="map">update wdi_history<set><if test="record.id != null">id = #{record.id,jdbcType=INTEGER},</if><if test="record.tableName != null">table_name = #{record.tableName,jdbcType=VARCHAR},</if><if test="record.tableMinid != null">table_minid = #{record.tableMinid,jdbcType=INTEGER},</if><if test="record.tableMaxid != null">table_maxid = #{record.tableMaxid,jdbcType=INTEGER},</if><if test="record.optDate != null">opt_date = #{record.optDate,jdbcType=DATE},</if><if test="record.backupFlag != null">backup_flag = #{record.backupFlag,jdbcType=CHAR},</if><if test="record.createUser != null">create_user = #{record.createUser,jdbcType=VARCHAR},</if><if test="record.createTime != null">create_time = #{record.createTime,jdbcType=TIMESTAMP},</if><if test="record.updateUser != null">update_user = #{record.updateUser,jdbcType=VARCHAR},</if><if test="record.updateTime != null">update_time = #{record.updateTime,jdbcType=TIMESTAMP},</if></set><if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByExample" parameterType="map">update wdi_historyset id = #{record.id,jdbcType=INTEGER},table_name = #{record.tableName,jdbcType=VARCHAR},table_minid = #{record.tableMinid,jdbcType=INTEGER},table_maxid = #{record.tableMaxid,jdbcType=INTEGER},opt_date = #{record.optDate,jdbcType=DATE},backup_flag = #{record.backupFlag,jdbcType=CHAR},create_user = #{record.createUser,jdbcType=VARCHAR},create_time = #{record.createTime,jdbcType=TIMESTAMP},update_user = #{record.updateUser,jdbcType=VARCHAR},update_time = #{record.updateTime,jdbcType=TIMESTAMP}<if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByPrimaryKeySelective" parameterType="infosky.wdis.entity.WdiHistory">update wdi_history<set><if test="tableName != null">table_name = #{tableName,jdbcType=VARCHAR},</if><if test="tableMinid != null">table_minid = #{tableMinid,jdbcType=INTEGER},</if><if test="tableMaxid != null">table_maxid = #{tableMaxid,jdbcType=INTEGER},</if><if test="optDate != null">opt_date = #{optDate,jdbcType=DATE},</if><if test="backupFlag != null">backup_flag = #{backupFlag,jdbcType=CHAR},</if><if test="createUser != null">create_user = #{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">update_user = #{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">update_time = #{updateTime,jdbcType=TIMESTAMP},</if></set>where id = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="infosky.wdis.entity.WdiHistory">update wdi_historyset table_name = #{tableName,jdbcType=VARCHAR},table_minid = #{tableMinid,jdbcType=INTEGER},table_maxid = #{tableMaxid,jdbcType=INTEGER},opt_date = #{optDate,jdbcType=DATE},backup_flag = #{backupFlag,jdbcType=CHAR},create_user = #{createUser,jdbcType=VARCHAR},create_time = #{createTime,jdbcType=TIMESTAMP},update_user = #{updateUser,jdbcType=VARCHAR},update_time = #{updateTime,jdbcType=TIMESTAMP}where id = #{id,jdbcType=INTEGER}</update><!-- =================================== 以下为手动追加方法 =================================== --><select id="getMaxId" parameterType="String" resultType="java.lang.Integer">select tb.id as maxIdfrom ${tablename} tborder by create_time desclimit 1</select><select id="getWdiHistory" parameterType="infosky.wdis.entity.WdiHistory" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from wdi_historywhere table_name = #{tableName}and opt_date =  #{optDate}</select><select id="getWdiHistoryLst" parameterType="infosky.wdis.entity.WdiHistory" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from wdi_historywhere table_name = #{tableName}and opt_date <![CDATA[  <= ]]> #{optDate}and backup_flag = 'N'order by create_time asc</select><update id="updateByTableNameOptTime" parameterType="infosky.wdis.entity.WdiHistory">update wdi_historyset table_maxid=#{tableMaxid},update_user=#{updateUser},update_time=#{updateTime}where table_name=#{tableName}and opt_date=#{optDate}</update><delete id="deleteHistoryMsgByTableName" parameterType="java.lang.String">delete from ${tablename}where update_time <![CDATA[ < ]]>(current_timestamp - interval'180 day')</delete><update id="updWdiHistoryByTableNameOptDate" parameterType="infosky.wdis.entity.WdiHistory">update wdi_historyset backup_flag='Y',update_user=#{updateUser},update_time=#{updateTime}where table_name=#{tableName}and opt_date=#{optDate}</update><select id="getWdiHistoryBefore" parameterType="infosky.wdis.entity.WdiHistory" resultMap="BaseResultMap">select id,table_name,table_minid,table_maxid,opt_date,backup_flag,create_user,create_time,update_user,update_timefrom wdi_historywhere id = (select max(id) from wdi_history where table_name = #{tableName} and opt_date <![CDATA[ < ]]> #{optDate})</select></mapper>

WdiReceiveMsgHistoryMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="infosky.wdis.dao.WdiReceiveMsgHistoryMapper"><resultMap id="BaseResultMap" type="infosky.wdis.entity.WdiReceiveMsgHistory"><id column="id" jdbcType="INTEGER" property="id" /><result column="msg_text" jdbcType="VARCHAR" property="msgText" /><result column="msg_length" jdbcType="INTEGER" property="msgLength" /><result column="receive_servicecd" jdbcType="VARCHAR" property="receiveServicecd" /><result column="connect_add" jdbcType="CHAR" property="connectAdd" /><result column="create_user" jdbcType="VARCHAR" property="createUser" /><result column="create_time" jdbcType="TIMESTAMP" property="createTime" /><result column="update_user" jdbcType="VARCHAR" property="updateUser" /><result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /><result column="backup_user" jdbcType="VARCHAR" property="backupUser" /><result column="backup_time" jdbcType="TIMESTAMP" property="backupTime" /></resultMap><sql id="Example_Where_Clause"><where><foreach collection="oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Update_By_Example_Where_Clause"><where><foreach collection="example.oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Base_Column_List">id, msg_text, msg_length, receive_servicecd, connect_add, create_user, create_time, update_user, update_time, backup_user, backup_time</sql><select id="selectByExample" parameterType="infosky.wdis.entity.WdiReceiveMsgHistoryExample" resultMap="BaseResultMap">select<if test="distinct">distinct</if>'true' as QUERYID,<include refid="Base_Column_List" />from wdi_receive_msg_history_01<if test="_parameter != null"><include refid="Example_Where_Clause" /></if><if test="orderByClause != null">order by ${orderByClause}</if></select><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from wdi_receive_msg_history_01where id = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from wdi_receive_msg_history_01where id = #{id,jdbcType=INTEGER}</delete><delete id="deleteByExample" parameterType="infosky.wdis.entity.WdiReceiveMsgHistoryExample">delete from wdi_receive_msg_history_01<if test="_parameter != null"><include refid="Example_Where_Clause" /></if></delete><insert id="insert" parameterType="infosky.wdis.entity.WdiReceiveMsgHistory">insert into wdi_receive_msg_history_01 (id, msg_text, msg_length, receive_servicecd, connect_add, create_user, create_time, update_user, update_time, backup_user, backup_time)values (#{id,jdbcType=INTEGER}, #{msgText,jdbcType=VARCHAR}, #{msgLength,jdbcType=INTEGER}, #{receiveServicecd,jdbcType=VARCHAR}, #{connectAdd,jdbcType=CHAR}, #{createUser,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{backupUser,jdbcType=VARCHAR}, #{backupTime,jdbcType=TIMESTAMP})</insert><insert id="insertSelective" parameterType="infosky.wdis.entity.WdiReceiveMsgHistory">insert into wdi_receive_msg_history_01<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if><if test="msgText != null">msg_text,</if><if test="msgLength != null">msg_length,</if><if test="receiveServicecd != null">receive_servicecd,</if><if test="connectAdd != null">connect_add,</if><if test="createUser != null">create_user,</if><if test="createTime != null">create_time,</if><if test="updateUser != null">update_user,</if><if test="updateTime != null">update_time,</if><if test="backupUser != null">backup_user,</if><if test="backupTime != null">backup_time,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id != null">#{id,jdbcType=INTEGER},</if><if test="msgText != null">#{msgText,jdbcType=VARCHAR},</if><if test="msgLength != null">#{msgLength,jdbcType=INTEGER},</if><if test="receiveServicecd != null">#{receiveServicecd,jdbcType=VARCHAR},</if><if test="connectAdd != null">#{connectAdd,jdbcType=CHAR},</if><if test="createUser != null">#{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">#{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if><if test="backupUser != null">#{backupUser,jdbcType=VARCHAR},</if><if test="backupTime != null">#{backupTime,jdbcType=TIMESTAMP},</if></trim></insert><update id="updateByExampleSelective" parameterType="map">update wdi_receive_msg_history_01<set><if test="record.id != null">id = #{record.id,jdbcType=INTEGER},</if><if test="record.msgText != null">msg_text = #{record.msgText,jdbcType=VARCHAR},</if><if test="record.msgLength != null">msg_length = #{record.msgLength,jdbcType=INTEGER},</if><if test="record.receiveServicecd != null">receive_servicecd = #{record.receiveServicecd,jdbcType=VARCHAR},</if><if test="record.connectAdd != null">connect_add = #{record.connectAdd,jdbcType=CHAR},</if><if test="record.createUser != null">create_user = #{record.createUser,jdbcType=VARCHAR},</if><if test="record.createTime != null">create_time = #{record.createTime,jdbcType=TIMESTAMP},</if><if test="record.updateUser != null">update_user = #{record.updateUser,jdbcType=VARCHAR},</if><if test="record.updateTime != null">update_time = #{record.updateTime,jdbcType=TIMESTAMP},</if><if test="record.backupUser != null">backup_user = #{record.backupUser,jdbcType=VARCHAR},</if><if test="record.backupTime != null">backup_time = #{record.backupTime,jdbcType=TIMESTAMP},</if></set><if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByExample" parameterType="map">update wdi_receive_msg_history_01set id = #{record.id,jdbcType=INTEGER},msg_text = #{record.msgText,jdbcType=VARCHAR},msg_length = #{record.msgLength,jdbcType=INTEGER},receive_servicecd = #{record.receiveServicecd,jdbcType=VARCHAR},connect_add = #{record.connectAdd,jdbcType=CHAR},create_user = #{record.createUser,jdbcType=VARCHAR},create_time = #{record.createTime,jdbcType=TIMESTAMP},update_user = #{record.updateUser,jdbcType=VARCHAR},update_time = #{record.updateTime,jdbcType=TIMESTAMP},backup_user = #{record.backupUser,jdbcType=VARCHAR},backup_time = #{record.backupTime,jdbcType=TIMESTAMP}<if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByPrimaryKeySelective" parameterType="infosky.wdis.entity.WdiReceiveMsgHistory">update wdi_receive_msg_history_01<set><if test="msgText != null">msg_text = #{msgText,jdbcType=VARCHAR},</if><if test="msgLength != null">msg_length = #{msgLength,jdbcType=INTEGER},</if><if test="receiveServicecd != null">receive_servicecd = #{receiveServicecd,jdbcType=VARCHAR},</if><if test="connectAdd != null">connect_add = #{connectAdd,jdbcType=CHAR},</if><if test="createUser != null">create_user = #{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">update_user = #{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">update_time = #{updateTime,jdbcType=TIMESTAMP},</if><if test="backupUser != null">backup_user = #{backupUser,jdbcType=VARCHAR},</if><if test="backupTime != null">backup_time = #{backupTime,jdbcType=TIMESTAMP},</if></set>where id = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="infosky.wdis.entity.WdiReceiveMsgHistory">update wdi_receive_msg_history_01set msg_text = #{msgText,jdbcType=VARCHAR},msg_length = #{msgLength,jdbcType=INTEGER},receive_servicecd = #{receiveServicecd,jdbcType=VARCHAR},connect_add = #{connectAdd,jdbcType=CHAR},create_user = #{createUser,jdbcType=VARCHAR},create_time = #{createTime,jdbcType=TIMESTAMP},update_user = #{updateUser,jdbcType=VARCHAR},update_time = #{updateTime,jdbcType=TIMESTAMP},backup_user = #{backupUser,jdbcType=VARCHAR},backup_time = #{backupTime,jdbcType=TIMESTAMP}where id = #{id,jdbcType=INTEGER}</update>
</mapper>

WdiSendMsgHistoryMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="infosky.wdis.dao.WdiSendMsgHistoryMapper"><resultMap id="BaseResultMap" type="infosky.wdis.entity.WdiSendMsgHistory"><id column="id" jdbcType="INTEGER" property="id" /><result column="receive_msg_table_name" jdbcType="VARCHAR" property="receiveMsgTableName" /><result column="receive_msg_id" jdbcType="INTEGER" property="receiveMsgId" /><result column="receive_connect_add" jdbcType="CHAR" property="receiveConnectAdd" /><result column="msg_text" jdbcType="VARCHAR" property="msgText" /><result column="msg_length" jdbcType="INTEGER" property="msgLength" /><result column="receive_servicecd" jdbcType="VARCHAR" property="receiveServicecd" /><result column="send_connect_add" jdbcType="CHAR" property="sendConnectAdd" /><result column="operation_finish" jdbcType="CHAR" property="operationFinish" /><result column="create_user" jdbcType="VARCHAR" property="createUser" /><result column="create_time" jdbcType="TIMESTAMP" property="createTime" /><result column="update_user" jdbcType="VARCHAR" property="updateUser" /><result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /><result column="backup_user" jdbcType="VARCHAR" property="backupUser" /><result column="backup_time" jdbcType="TIMESTAMP" property="backupTime" /></resultMap><sql id="Example_Where_Clause"><where><foreach collection="oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Update_By_Example_Where_Clause"><where><foreach collection="example.oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Base_Column_List">id, receive_msg_table_name, receive_msg_id, receive_connect_add, msg_text, msg_length, receive_servicecd, send_connect_add, operation_finish, create_user, create_time, update_user, update_time, backup_user, backup_time</sql><select id="selectByExample" parameterType="infosky.wdis.entity.WdiSendMsgHistoryExample" resultMap="BaseResultMap">select<if test="distinct">distinct</if>'true' as QUERYID,<include refid="Base_Column_List" />from wdi_send_msg_history_01<if test="_parameter != null"><include refid="Example_Where_Clause" /></if><if test="orderByClause != null">order by ${orderByClause}</if></select><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from wdi_send_msg_history_01where id = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from wdi_send_msg_history_01where id = #{id,jdbcType=INTEGER}</delete><delete id="deleteByExample" parameterType="infosky.wdis.entity.WdiSendMsgHistoryExample">delete from wdi_send_msg_history_01<if test="_parameter != null"><include refid="Example_Where_Clause" /></if></delete><insert id="insert" parameterType="infosky.wdis.entity.WdiSendMsgHistory">insert into wdi_send_msg_history_01 (id, receive_msg_table_name, receive_msg_id, receive_connect_add, msg_text, msg_length, receive_servicecd, send_connect_add, operation_finish, create_user, create_time, update_user, update_time, backup_user, backup_time)values (#{id,jdbcType=INTEGER}, #{receiveMsgTableName,jdbcType=VARCHAR}, #{receiveMsgId,jdbcType=INTEGER}, #{receiveConnectAdd,jdbcType=CHAR}, #{msgText,jdbcType=VARCHAR}, #{msgLength,jdbcType=INTEGER}, #{receiveServicecd,jdbcType=VARCHAR}, #{sendConnectAdd,jdbcType=CHAR}, #{operationFinish,jdbcType=CHAR}, #{createUser,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{backupUser,jdbcType=VARCHAR}, #{backupTime,jdbcType=TIMESTAMP})</insert><insert id="insertSelective" parameterType="infosky.wdis.entity.WdiSendMsgHistory">insert into wdi_send_msg_history_01<trim prefix="(" suffix=")" suffixOverrides=","><if test="id != null">id,</if><if test="receiveMsgTableName != null">receive_msg_table_name,</if><if test="receiveMsgId != null">receive_msg_id,</if><if test="receiveConnectAdd != null">receive_connect_add,</if><if test="msgText != null">msg_text,</if><if test="msgLength != null">msg_length,</if><if test="receiveServicecd != null">receive_servicecd,</if><if test="sendConnectAdd != null">send_connect_add,</if><if test="operationFinish != null">operation_finish,</if><if test="createUser != null">create_user,</if><if test="createTime != null">create_time,</if><if test="updateUser != null">update_user,</if><if test="updateTime != null">update_time,</if><if test="backupUser != null">backup_user,</if><if test="backupTime != null">backup_time,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id != null">#{id,jdbcType=INTEGER},</if><if test="receiveMsgTableName != null">#{receiveMsgTableName,jdbcType=VARCHAR},</if><if test="receiveMsgId != null">#{receiveMsgId,jdbcType=INTEGER},</if><if test="receiveConnectAdd != null">#{receiveConnectAdd,jdbcType=CHAR},</if><if test="msgText != null">#{msgText,jdbcType=VARCHAR},</if><if test="msgLength != null">#{msgLength,jdbcType=INTEGER},</if><if test="receiveServicecd != null">#{receiveServicecd,jdbcType=VARCHAR},</if><if test="sendConnectAdd != null">#{sendConnectAdd,jdbcType=CHAR},</if><if test="operationFinish != null">#{operationFinish,jdbcType=CHAR},</if><if test="createUser != null">#{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">#{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if><if test="backupUser != null">#{backupUser,jdbcType=VARCHAR},</if><if test="backupTime != null">#{backupTime,jdbcType=TIMESTAMP},</if></trim></insert><update id="updateByExampleSelective" parameterType="map">update wdi_send_msg_history_01<set><if test="record.id != null">id = #{record.id,jdbcType=INTEGER},</if><if test="record.receiveMsgTableName != null">receive_msg_table_name = #{record.receiveMsgTableName,jdbcType=VARCHAR},</if><if test="record.receiveMsgId != null">receive_msg_id = #{record.receiveMsgId,jdbcType=INTEGER},</if><if test="record.receiveConnectAdd != null">receive_connect_add = #{record.receiveConnectAdd,jdbcType=CHAR},</if><if test="record.msgText != null">msg_text = #{record.msgText,jdbcType=VARCHAR},</if><if test="record.msgLength != null">msg_length = #{record.msgLength,jdbcType=INTEGER},</if><if test="record.receiveServicecd != null">receive_servicecd = #{record.receiveServicecd,jdbcType=VARCHAR},</if><if test="record.sendConnectAdd != null">send_connect_add = #{record.sendConnectAdd,jdbcType=CHAR},</if><if test="record.operationFinish != null">operation_finish = #{record.operationFinish,jdbcType=CHAR},</if><if test="record.createUser != null">create_user = #{record.createUser,jdbcType=VARCHAR},</if><if test="record.createTime != null">create_time = #{record.createTime,jdbcType=TIMESTAMP},</if><if test="record.updateUser != null">update_user = #{record.updateUser,jdbcType=VARCHAR},</if><if test="record.updateTime != null">update_time = #{record.updateTime,jdbcType=TIMESTAMP},</if><if test="record.backupUser != null">backup_user = #{record.backupUser,jdbcType=VARCHAR},</if><if test="record.backupTime != null">backup_time = #{record.backupTime,jdbcType=TIMESTAMP},</if></set><if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByExample" parameterType="map">update wdi_send_msg_history_01set id = #{record.id,jdbcType=INTEGER},receive_msg_table_name = #{record.receiveMsgTableName,jdbcType=VARCHAR},receive_msg_id = #{record.receiveMsgId,jdbcType=INTEGER},receive_connect_add = #{record.receiveConnectAdd,jdbcType=CHAR},msg_text = #{record.msgText,jdbcType=VARCHAR},msg_length = #{record.msgLength,jdbcType=INTEGER},receive_servicecd = #{record.receiveServicecd,jdbcType=VARCHAR},send_connect_add = #{record.sendConnectAdd,jdbcType=CHAR},operation_finish = #{record.operationFinish,jdbcType=CHAR},create_user = #{record.createUser,jdbcType=VARCHAR},create_time = #{record.createTime,jdbcType=TIMESTAMP},update_user = #{record.updateUser,jdbcType=VARCHAR},update_time = #{record.updateTime,jdbcType=TIMESTAMP},backup_user = #{record.backupUser,jdbcType=VARCHAR},backup_time = #{record.backupTime,jdbcType=TIMESTAMP}<if test="_parameter != null"><include refid="Update_By_Example_Where_Clause" /></if></update><update id="updateByPrimaryKeySelective" parameterType="infosky.wdis.entity.WdiSendMsgHistory">update wdi_send_msg_history_01<set><if test="receiveMsgTableName != null">receive_msg_table_name = #{receiveMsgTableName,jdbcType=VARCHAR},</if><if test="receiveMsgId != null">receive_msg_id = #{receiveMsgId,jdbcType=INTEGER},</if><if test="receiveConnectAdd != null">receive_connect_add = #{receiveConnectAdd,jdbcType=CHAR},</if><if test="msgText != null">msg_text = #{msgText,jdbcType=VARCHAR},</if><if test="msgLength != null">msg_length = #{msgLength,jdbcType=INTEGER},</if><if test="receiveServicecd != null">receive_servicecd = #{receiveServicecd,jdbcType=VARCHAR},</if><if test="sendConnectAdd != null">send_connect_add = #{sendConnectAdd,jdbcType=CHAR},</if><if test="operationFinish != null">operation_finish = #{operationFinish,jdbcType=CHAR},</if><if test="createUser != null">create_user = #{createUser,jdbcType=VARCHAR},</if><if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if><if test="updateUser != null">update_user = #{updateUser,jdbcType=VARCHAR},</if><if test="updateTime != null">update_time = #{updateTime,jdbcType=TIMESTAMP},</if><if test="backupUser != null">backup_user = #{backupUser,jdbcType=VARCHAR},</if><if test="backupTime != null">backup_time = #{backupTime,jdbcType=TIMESTAMP},</if></set>where id = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="infosky.wdis.entity.WdiSendMsgHistory">update wdi_send_msg_history_01set receive_msg_table_name = #{receiveMsgTableName,jdbcType=VARCHAR},receive_msg_id = #{receiveMsgId,jdbcType=INTEGER},receive_connect_add = #{receiveConnectAdd,jdbcType=CHAR},msg_text = #{msgText,jdbcType=VARCHAR},msg_length = #{msgLength,jdbcType=INTEGER},receive_servicecd = #{receiveServicecd,jdbcType=VARCHAR},send_connect_add = #{sendConnectAdd,jdbcType=CHAR},operation_finish = #{operationFinish,jdbcType=CHAR},create_user = #{createUser,jdbcType=VARCHAR},create_time = #{createTime,jdbcType=TIMESTAMP},update_user = #{updateUser,jdbcType=VARCHAR},update_time = #{updateTime,jdbcType=TIMESTAMP},backup_user = #{backupUser,jdbcType=VARCHAR},backup_time = #{backupTime,jdbcType=TIMESTAMP}where id = #{id,jdbcType=INTEGER}</update>
</mapper>

WdiBackupDataMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="infosky.wdis.dao.WdiBackupDataMapper"><resultMap id="DiBackupData" type="infosky.wdis.entity.WdiBackupData"><result column="minId" property="minId"/><result column="maxId" property="maxId"/></resultMap><select id="getMinMaxID" parameterType="infosky.wdis.entity.WdiBackupData" resultMap="DiBackupData">select min(tb.id) as minId,max(tb.id) as maxIdfrom ${tbnm} tbwhere tb.update_time <![CDATA[ < ]]> (current_timestamp - interval '15 day')</select><insert id="backUpData"  parameterType="infosky.wdis.entity.WdiBackupData">insert into ${tbnm_history} (select *,'SYSTEM_TASK_BACKUPJOB' as backup_user,current_timestamp as backup_time from ${tbnm} where id <![CDATA[ >= ]]> #{minId} and id <![CDATA[ <= ]]> #{maxId})</insert><delete id="deleteData" parameterType="infosky.wdis.entity.WdiBackupData">delete from ${tbnm} tbwhere id <![CDATA[ >= ]]> #{minId} and id <![CDATA[ <= ]]> #{maxId}</delete><select id="getMaxId" parameterType="String" resultType="java.lang.Integer">select max(tb.id) as maxIdfrom ${tableName} tb</select>
</mapper>

数据库表历史数据备份(定时任务)相关推荐

  1. 使用Navicat Premium 12进行数据库定期自动备份(定时任务)

    使用Navicat Premium 12进行数据库定期自动备份(定时任务) 上一篇我们刚刚安装好破解版的navicat,这一篇我们就做一个数据库的定时备份任务吧 首先我们连接数据库,这里我使用mysq ...

  2. mysql备份表数据库表_mysql 备份数据库中的一张表

    方案一: 备份db1里的t7表[root@stu1 mysql]#  mysqldump -u root -p123 db1 t7 > t7.sql 恢复db1里的t7表[root@stu1 m ...

  3. ORACLE数据库表空间备份方案

    首先是注意事项:待迁移的表空间必须自包含,EXP.IMP工具版本必须与ORACLE数据库版本一致(不是相同),其次是要严格按照如下操作步骤进行,并请留意提示内容.       以下是操作步骤,1~5步 ...

  4. mysql数据库表复制备份_mysql数据库的备份以及表格数据之间的复制

    #####-------------mysql数据备份以及表间数据的复制-------------------##### ##----------------我的mysql学习(二)--------- ...

  5. Winform中使用mysqldump实现选择部分表定期备份mysql数据库

    场景 Winform中实现与Mysql8建立连接并获取所有的表,然后勾选指定的表,定时进行数据库备份导出为sql文件.并且可以设定覆盖备份的次数,比如设置为7,则备份到第8次时就会将第一次备份的sql ...

  6. 如何实现php自动备份数据库,使用php自动备份数据库表的实现方法

    1.前言 mysql数据库的备份方式有很多: 例如: 1.使用mysqldump函数 mysqldump -u username -p dbname table1 table2 ... > Ba ...

  7. Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份

    一  Oracle数据库查看表空间sql语句 1.oracle查看表空间当前用户 SQL>  select  username,default_tablespace  from user_use ...

  8. 一个sqlserver数据库表查看与备份软件

    一个sqlserver数据库表查看与备份软件 先连接:点击获取,列出全部数据库名:点击某个数据库名,列出全部表名:点击表名,获取内容:如果表的行数过多,万以上,获取时间会长: 点击 导出为excel ...

  9. java对mysql数据库进行单表筛选备份、还原操作

    最近在做的一个项目需要对mysql数据库中的单个表格进行备份 其中,一部分表格需要进行筛选备份(例如对最近插入的1000条记录进行备份) 思路:java调用系统命令完成备份操作 假设现在有数据库tes ...

  10. db2数据库与表空间备份

    db2数据库与表空间备份 数据库与表空间的备份语法概述 备份语法 ​ database-alias:指定要备份的数据库的别名 ​ username/using password:指定备份数据库所使用的 ...

最新文章

  1. 【直播】陈信达:零基础计算机视觉之机器学习基础
  2. mysql安装的根目录_MySql安装及基础配置(一)
  3. 推荐9款优秀的 HTML5 音乐播放器
  4. 面试官再问高并发,求你把这篇发给他!
  5. oracle雾化试图_Oracle 物化视图 说明
  6. oracle thread日志查看,请教归档日志的视图v$archived_log里的thread#的问题
  7. NC51272 棋盘覆盖
  8. phpcmsV9 邮箱配置(含图文教程) - 案例篇
  9. Windows10配置Git远程连接到github(全网简单教程)
  10. php iis session 超时设置,如何配置IIS Session超时时间
  11. LeetCode题库7:反转整数——JavaScript解答
  12. 虚拟资源拳王公社:小白从0到1搭建个人私域流量池的实操方法,6招玩转流量裂变法
  13. 【转】Android之apk文件签名——keytool 和 jarsigner
  14. 下载源码并打包生成war包(自己打包dubbo-admin)
  15. 【学生信息管理系统】-优化篇1
  16. 日期时间公式计算机,‎App Store 上的“多少天-重要日期时间计算器”
  17. 《应用商务统计分析》第五章 定序回归
  18. SQLserver中勒索病毒或严重损坏后的恢复数据方法
  19. 八、python爬虫伪装 [免费伪装ip伪装请求头]
  20. preg_replace函数去除字符串中的空格,逗号(,)等

热门文章

  1. Chrome插件 - FireShot捕捉网页截图(可截取完整页面)
  2. 计算机工作表中按升序排列,表格打乱顺序怎么按顺序排列_怎么把表格内容按顺序排列图文步骤...
  3. wince +C#拼音码形成代码
  4. android 模拟器加速,android开发怎么设置加速模拟器如真机运行
  5. 12.测试字体的练习
  6. 找一下不男不女 ?。。?
  7. matplotlib 绘制直方图和拟合正态曲线
  8. Ubuntu中报错:failed to create hard link
  9. O365(世纪互联)SharePoint 之使用列表库发布新闻
  10. 应对CentOS 停服,麒麟信安迁移方案已就绪