文档章节

数据迁移

AK灬
 AK灬
发布于 2015/10/14 10:40
字数 627
阅读 183
收藏 0
点赞 0
评论 0

思路:比如现在10月份,需要把10月份之前的数据放入到另一张表中.

步骤:

A.查询出10月份之前的数据.

B.利用insert into 表(字段) values (值);将数据插入到新的表中.

C.删除10月份之前的数据,在旧表中.

代码如下:

JSP页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script src="admin/addPageInit.js?${JSCSS}" type="text/javascript"></script>
<form name="form1" method="post" action="exportBills" id="form1">
	<table class="table table-bordered">
		<tr>
			<td class="w50 tc"><h2>导出电话账单日期:</h2></td>
			<td class="w50 tc"><input class="form-control" name="addTime" id="datetimepicker" type="text" /></td>
		</tr>
	</table>
	<div class="form-group">
		<input type="submit" value="提交" id="Button1"
			class="form-control btn btn-success" />
	</div>
</form>
<%@include file="datePicker.jsp"%>//时间控件

当点击submit的时候,调用exportBills方法

Action:

// 导出电话账单
	@Action(value = "exportBills")
	public String manageExportBills() throws Exception {
		// 查询此日期的电话账单
		billService.exportBills(getParameter("addTime", "0"), map);
		return SUCCESS;
	}

service(实现类):

        @Override
	@Transactional(propagation = Propagation.REQUIRED)//开启事务
	public void exportBills(String addTime, Map<String, Object> map) throws Exception {
		// 查询此日期的电话账单
		List<Bill> models = findByHql("from Bill where addTime<=:addTime and flag>:flag", DataUtils.getMap("addTime", addTime,"flag","-1000"));
		for(Bill bill:models){
			map = YTTools.getFieldAndValue(bill);
			map.put("uid", bill.getUser().getId());
			map.put("id", bill.getId());
			map.put("flag", bill.getFlag());
			map.put("addTime", bill.getAddTime());
			StringBuilder fields = new StringBuilder();
			for (Entry<String, Object> entry : map.entrySet()) {
				fields.append(","+entry.getKey());
			}
			if(map.size()>0){
				String values = fields.toString().replaceAll(",", ",:");
				String sql = "insert into Billhistory("+fields.toString().substring(1, fields.length())+")"
						+ " values("+values.substring(1,values.length())+")";
				// 新增操作
				executeBySql(sql, map);
			}
		}
		// 删除操作
		executeByHql("delete Bill where addTime<=:addTime and flag>:flag", DataUtils.getMap("addTime", addTime,"flag","-1000"));
		
	}

工具类:

package cn.yitongworld.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class YTTools {
	public static Map<String,Object> getFieldAndValue(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
	Map<String,Object> map = new HashMap<String,Object>();
	//获取实体类的所有属性,返回Field数组  
        Field[] fields = model.getClass().getDeclaredFields();
        //遍历所有属性
        for(Field field:fields){    
        		//获取属性的名字
                String oldName = field.getName();    
                Object value = null;
                String name = oldName.substring(0,1).toUpperCase()+oldName.substring(1); //将属性的首字符大写,方便构造get,set方法
                String type = field.getGenericType().toString();    //获取属性的类型
                if(type.equals("class java.lang.String")||type.equals("class java.lang.Integer")
                		||type.equals("class java.lang.Double")||type.equals("class java.lang.Boolean")){   //如果type是类类型,则前面包含"class ",后面跟类名
                    Method m = model.getClass().getMethod("get"+name);
                    value = m.invoke(model);    //调用getter方法获取属性值
                    map.put(oldName, value);
                }
               
            }
        return map;
    }

}

参考文献:

1.java的反射机制,通过class找到java:http://blog.csdn.net/liujiahan629629/article/details/18013523

2.遍历map的两种方法:http://blog.163.com/fw_long/blog/static/51771186201392982041337/

3.java Class getDeclaredFields()与getFields()的区别:http://hw1287789687.iteye.com/blog/1942056

补充:hql语句不支持"insert into 表 (字段) values (值)",所以需要用sql语句执行.


© 著作权归作者所有

共有 人打赏支持
AK灬

AK灬

粉丝 46
博文 326
码字总数 137976
作品 0
朝阳
后端工程师

暂无相关文章

Qt中的坑--QTreeWidget添加item 不能显示出来

QTreeWidget* pTree = ui.TreeCheckList; QTreeWidgetItem* item = new QTreeWidgetItem(pTree) ;item->setText ( 0, "test" );pTree->addTopLevelItem (item ); 原因是因为创建一个......

k91191 ⋅ 26分钟前 ⋅ 0

使用Guava的RateLimiter做限流

场景: 1. 在日常生活中,我们肯定收到过不少不少这样的短信,“京东最新优惠卷…”,“天猫送您…”。这种类型的短信是属于推广性质的短信。这种短信一般群发量会到千万级别。然而,要完成这...

wind2012 ⋅ 26分钟前 ⋅ 0

QSlider重新enterEvent

#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QW......

xxdd ⋅ 27分钟前 ⋅ 0

生产环境redis备份与恢复

生产环境redis备份与恢复 Tyrant0532 0人评论 1563人阅读 2018-02-01 20:34:10 redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。生产中我们主...

rootliu ⋅ 29分钟前 ⋅ 0

nginx中出现403forbidden错误

nginx “403 Forbidden” 错误 出现这个错误一般是因为以下原因: 网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问。 访问禁止目录浏览的目录,例:设置autoindex off后访问目录。 ...

河图再现 ⋅ 29分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

猫耳m ⋅ 34分钟前 ⋅ 0

docker 基本操作

docker介绍 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具。其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖。Docker通过Docker容器,一个安全...

haoyuehong ⋅ 35分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

阿里云云栖社区 ⋅ 38分钟前 ⋅ 0

安装与配置hadoop

一、CentOS7安装 java8,参考centos7.0 安装java1.8,tomcat 二、安装hadoop 版本V3.03 1、下载并解压hadoop # mkdir /usr/local/app# mkdir /usr/local/app/hadoop# cd /usr/local/app/had......

iturtle ⋅ 39分钟前 ⋅ 0

Idea设置Serializable自动生成

File --> Settings --> Editor --> Inspections ->Serialization issues,在该项下找到“Serializable class without 'serialVersionUID' ”并勾选...

Gmupload ⋅ 42分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部