近期遇到小知识点总结

一、定时同步器

Timer是一种工具类,在Java.util包中,线程用其安排以后在后台线程中执行的任务,可安排任务执行一次,也可以定期重复执行。它的构造函数如下:

Timer(boolean isDaemon)  
//创建一个新计时器,可以指定其相关的线程作为守护程序运行。  

守护线程:当主线程结束后,该线程也结束的线程。

非守护线程:当主线程结束后,该线程仍然继续执行。

isDaemon为true时为守护线程。Timer类有个schedule方法可以创建一个任务,如下:

void  schedule(TimerTask task, Date firstTime, long period)   
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。  
//第一个参数是指定任务,即TimerTask对象;第二个参数为第一次开启任务时间;第三个参数为时间间隔,即每隔多长时间执行一次  

TimeTask是用来创建一个新的线程任务的,它实现了Runnable接口,如果我们要创建一个新的线程任务,只需要继承TimerTask,并重写run方法即可。

参考此博客,具体使用示例亦可参考此博客---->定时器

二、sql语句

alter table 表名 rename column A to B;//修改字段名

alter table 表名 add 字段名 字段类型;

alter table 表名 drop 字段名;

postgresql中json及array类型的字段相关:

select '[1,2,3]'::json->2;  --3
select '{"a":1,"b":2}'::json->'b';  --2
select '[1,2,3]'::json->>2; --3
select '{"a":1,"b":2}'::json->>'b'; --2
 -> 和 ->> 查询出的结果肉眼看起来是一样的,区别在于后者是返回text
select '{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}';  --3
select '{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'; --5
create table testjson(id serial,data json);
insert into testjson(data) values('{"a":1,"b":2}'::json);
insert into testjson(data) values('{"a":3,"b":4,"c":5}'::json);
insert into testjson(data) values('{"a":6,"c":7}'::json);
select * from testjson;


select * from testjson where(data->>'a')::int>1;
-- ->>是转换成text然后再::int进行比较

insert into testjson(data) values('{"a":"smallfish"}');

CREATE OR REPLACE FUNCTION json_intext(text) RETURNS json AS $$ --要么创建一个新函数,要么替换现有的定义
SELECT json_in($1::cstring); 
$$ LANGUAGE SQL IMMUTABLE;

alter table testjson add arrays double precision[];

insert into testjson(arrays) values('{56.4,45.6}');

insert into testjson(arrays) values(array[3,4,5]);

alter table testjson add twoarray double precision[][];

insert into testjson(twoarray) values(array[[3,4,5],[6,7,8]]);

alter table testjson add source json;

insert into testjson(source) values('{"point1":[1,2],"point2":[3,4],"12":[5,6],"1234":[5,6]}')

三、hibernate save

save方法返回的是Serializable接口,该结果的值就是你插入到数据库后新记录的主键值。如果主键是数值,可以按如下方法:

Serializable result = this.getSession().save(t);
Integer integer = (Integer) result;

Hibernate中Query.uniqueResult();若有多个返回值会抛错,有且只有一个时返回Object,没有值返回null。

四、使用JSONObject.fromObject()、toBean()方法 属性类型为Timestamp时的处理

1.当使用JSONObject.fromObject()及JSONArray.fromObject()而Object中有Timestamp类型的属性时,转换成得json内的时间戳型属性会变成这样:

"createTime":{"date":21,"day":5,"hours":10,"minutes":3,"month":6,"nanos":0,"seconds":51,"time":1500602631000,"timezoneOffset":-480,"year":117}

net.sf.json.JSONObject.fromObject(Object object,JsonConfig jsonConfig)还接受一个JsonConfig对象,我们可以扩展JsonValueProcessor接口,具体解决方法如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/*** 将Bean中的Timestamp转换为json中的日期字符串*/
public class DateJsonValueProcessor implements JsonValueProcessor {
	
    public static final String Default_DATE_PATTERN ="yyyy-MM-dd";
    private DateFormat dateFormat ;
    
    public DateJsonValueProcessor(String datePattern){
        try{
            dateFormat  = new SimpleDateFormat(datePattern);
       }catch(Exception e ){
            dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);
        }
    }
    
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {  
        if(null!=value){  
            return process(value);  
        }else{  
            return "";  
        }  
    	//return process(value); 
    }  
    public Object processObjectValue(String key, Object value,JsonConfig jsonConfig) {  
        if(null!=value){  
            return process(value);  
        }else{  
            return "";  
        }  
    	//return process(value); 
    }  
    
    private Object process(Object value){
        return dateFormat.format((Date)value);
    }
}

使用:

JsonConfig config = new JsonConfig();
		config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
		JSONObject o = JSONObject.fromObject(user,config);
JsonConfig config = new JsonConfig();
		config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
		JSONArray array = JSONArray.fromObject(userList, config);

2.当从Json转换为Bean时会遇到同样的问题,解决方案如下:

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import net.sf.ezmorph.MorphException;
import net.sf.ezmorph.object.AbstractObjectMorpher;

public class TimeStampMorpher extends AbstractObjectMorpher{   
       
	private String[] formats = new String[]{"yyyy-MM-dd hh:mm:ss","yyyy-MM-dd"}; 
	
	public void setFormats(String[] formats) {   
		this.formats = formats;   
	}   
    
	public TimeStampMorpher() {   
	}   
    
	public TimeStampMorpher(String[] formats) {   
		this.formats = formats;   
	}   

	@Override   
	public Object morph(Object dateStr) {   
		if(null == dateStr){  
			return null;  
		}  
		if(Timestamp.class.isAssignableFrom(dateStr.getClass())){  
			return (Timestamp)dateStr;  
		}  
		if(!supports(dateStr.getClass())){  
			throw new MorphException(dateStr.getClass()+"不是支持的类型!");  
		}  
		
		String strValue = (String)dateStr;  
		SimpleDateFormat dateParser = null;  
		
		for(int i=0,k=formats.length;i<k;i++){  
			if(null == dateParser){  
				dateParser = new SimpleDateFormat(formats[i]);  
			}else{  
				dateParser.applyPattern(formats[i]);  
			}  
			try{  
				if(!strValue.equals("")){
					return new Timestamp(dateParser.parse(strValue.toLowerCase()).getTime());  
				}
			}catch(ParseException e){  
				e.printStackTrace();  
			}  
		}  
		return new java.sql.Timestamp(System.currentTimeMillis());//返回默认日期        
	}   

	@Override   
	public Class morphsTo() {   
		return Timestamp.class;   
	}   
	public boolean supports(Class claszz){  
         return String.class.isAssignableFrom(claszz);  
	}  
}   

TimeStampMorpher的作用与DataJsonValueProcessor相反,他在Json转换为Bean时,把指定的时间格式转换为Timestamp

使用:

JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());
		TSysUser u = (TSysUser) JSONObject.toBean(o, TSysUser.class);
JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());
		List<TSysUser> ul = JSONArray.toList(array, TSysUser.class);
		for(TSysUser u:ul){
			System.out.println(u.toString());
		}

参考博客:

number1number2number3number4


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值