近期遇到小知识点总结
2017-07-21 14:51
204 查看
一、定时同步器
Timer是一种工具类,在Java.util包中,线程用其安排以后在后台线程中执行的任务,可安排任务执行一次,也可以定期重复执行。它的构造函数如下:
守护线程:当主线程结束后,该线程也结束的线程。
非守护线程:当主线程结束后,该线程仍然继续执行。
isDaemon为true时为守护线程。Timer类有个schedule方法可以创建一个任务,如下:
TimeTask是用来创建一个新的线程任务的,它实现了Runnable接口,如果我们要创建一个新的线程任务,只需要继承TimerTask,并重写run方法即可。
参考此博客,具体使用示例亦可参考此博客---->定时器
二、sql语句
alter table 表名 rename column A to B;//修改字段名
alter table 表名 add 字段名 字段类型;
alter table 表名 drop 字段名;
postgresql中json及array类型的字段相关:
三、hibernate save
save方法返回的是Serializable接口,该结果的值就是你插入到数据库后新记录的主键值。如果主键是数值,可以按如下方法:
Hibernate中Query.uniqueResult();若有多个返回值会抛错,有且只有一个时返回Object,没有值返回null。
四、使用JSONObject.fromObject()、toBean()方法 属性类型为Timestamp时的处理
1.当使用JSONObject.fromObject()及JSONArray.fromObject()而Object中有Timestamp类型的属性时,转换成得json内的时间戳型属性会变成这样:
net.sf.json.JSONObject.fromObject(Object object,JsonConfig jsonConfig)还接受一个JsonConfig对象,我们可以扩展JsonValueProcessor接口,具体解决方法如下:
使用:
2.当从Json转换为Bean时会遇到同样的问题,解决方案如下:
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());
}
参考博客:
number1、number2、number3、number4
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());
}
参考博客:
number1、number2、number3、number4
相关文章推荐
- JavaScript URL传值过程中遇到的问题及知识点总结
- 近期遇到的Android问题解决与总结
- C知识点总结(格式以后再整理,近期笔试面试太多)
- 近期学习javascript和jquery遇到一些问题的技巧知识总结
- 10.11笔试时遇到的知识点总结
- C语言知识总结(近期笔试遇到的,锐捷,多米)
- 近期改BUG遇到的小问题及经验总结
- 近期学习javascript和jquery遇到一些问题的技巧知识总结
- Vue开发过程中遇到的疑惑知识点总结
- 近期学习javascript和jquery遇到一些问题的技巧知识总结
- 近期工作中模糊知识点总结
- 【小知识点总结】startActivityForResult 和onActivityResult 的用法及【遇到的问题】
- 项目三遇到的知识点总结
- 自己做的apk遇到的难点及知识点总结
- 在这里记录自己学习中遇到的零碎的容易忽略的知识点,不定时总结更新
- Android Webview知识点和遇到过的坑全总结
- 总结linux学习过程中遇到的细小知识点之Linux帮助文档中各个符号的含义
- 近期遇到的UBUNTU lamp配置问题及总结
- 近期小知识点总结
- 近期一个称重设备微信端开发前端知识点,及使用插件遇到的常见问题