■一、数据库表数据备份
此处的数据库表数据备份指的并不是整个数据库的数据备份,而是针对某些数据量比较大的业务表的历史数据备份。数据库中基础表、用户表、字典表等等表的数据量都是非常小的,只有个别业务表因业务操作频繁数据量巨大。假如我们的业务表并不需要保存过长时间的业务数据时,可以将一定期限前的数据保存到历史表中。这样业务表中数据量就能够保持到一个合理水平,从而提高该业务表的查询效率。
备份数据逻辑图:
■二、数据备份逻辑设计
表定义
接收报文(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
*/
@Bean
public JobDetail backupJobDetail(){
return JobBuilder.newJob(BackupJob.class).withIdentity("backupJob").storeDurably().build();
}
/**
* 把jobDetail注册到Cron表达式的trigger上去
* @return
*/
@Bean
public 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);
@Autowired
WdiHistoryMapper wdiHistoryMapper;
@Autowired
WdiReceiveMsgHistoryMapper wdiReceiveMsgHistoryMapper;
@Autowired
WdiSendMsgHistoryMapper wdiSendMsgHistoryMapper;
@Autowired
WdiBackupDataMapper wdiBackupDataMapper;
/**
* 定时任务处理
* @param jobExecutionContext
* @throws JobExecutionException
*/
@Override
protected 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.获取业务表中最大的id
Integer 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->maxId
backupTable(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->maxId
backupTable(wbd,0,maxId);
// 更新wdi_history表
tmpWdiHistory.setUpdateUser(WdiConstants.SYSTEM_TASK_BACKUPJOB);
tmpWdiHistory.setUpdateTime(new Date());
wdiHistoryMapper.updWdiHistoryByTableNameOptDate(tmpWdiHistory);
}else{
// 获取minId
Integer beforeMinId = wdiHistoryBefore15daysOld.get(i-1).getTableMinid();
// 比较beforeMinId 与 maxId大小关系
if(maxId >= beforeMinId){
// 正常情况
backupTable(wbd,beforeMinId,maxId);
}else{
// 跨越seq最大值情况
// a:beforeMinId->seq最大值(2147483647) b:0->maxId
backupTable(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_history
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from wdi_history
where 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_history
set 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_history
set 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 maxId
from ${tablename} tb
order by create_time desc
limit 1
</select>
<select id="getWdiHistory" parameterType="infosky.wdis.entity.WdiHistory" resultMap="BaseResultMap">
select <include refid="Base_Column_List" />
from wdi_history
where 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_history
where 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_history
set 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_history
set 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_time
from wdi_history
where 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_01
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from wdi_receive_msg_history_01
where 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_01
set 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_01
set 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_01
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from wdi_send_msg_history_01
where 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_01
set 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_01
set 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 maxId
from ${tbnm} tb
where 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} tb
where id <![CDATA[ >= ]]> #{minId}
and id <![CDATA[ <= ]]> #{maxId}
</delete>
<select id="getMaxId" parameterType="String" resultType="java.lang.Integer">
select max(tb.id) as maxId
from ${tableName} tb
</select>
</mapper>