一丶返回时间格式时差以及格式问题
//表示列名 不为空
@Column(name = "start_date", nullable = true)
//返回前端的字段名称
@JsonProperty("StartDate")
//设置中国区 时间格式 年月日时分秒
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd'T'HH:mm:ss")
//@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Timestamp startDate;
二丶设置某个字段默认为某数据
@Column(nullable = false,name = "is_finish", columnDefinition = "varchar(1) default '0'")
三丶一对多,多对一配置
//一对多关系
//CascadeType.REMOVE 级联删除
//CascadeType.MERGE 级联更新合并
//CascadeType.DETACH 级联托管游离操作
//CascadeType.REFRESH 级联刷新
//orphanRemoval 这个字段本身并没有生效,它表示级联对象之间的关系,要不要都无所谓
//fetch 表示懒加载 提高效率
//mappedBy 表示对应的子表外键字段的实体名称
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE}, orphanRemoval = true, fetch = FetchType.LAZY,mappedBy="taskTwo")
//多对一关系
//targetEntity 制定关联的(实体)对象
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH}, optional = true, targetEntity = TaskTwo.class)
四丶注解
//表示并不与数据库联系 通常指接收前端字段单独进行处理
@Transient
//表示返回前端是一个时间戳
//TIMESTAMP //DATE则是一个年月日时间段
@Temporal(TemporalType.TIMESTAMP)
五丶事务
异常结构图:
可查的异常(checked exceptions):Exception下除了RuntimeException外的异常
不可查的异常(unchecked exceptions):RuntimeException及其子类和错误(Error)
如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。
@Transactional(rollbackFor=Exception.class)
事务只对public方法有效,私有的方法无效。
Spring框架的事务基础架构代码将默认地 只 在抛出运行时和unchecked exceptions时才标识事务回滚。 也就是说,当抛出个RuntimeException 或其子类例的实例时。(Errors 也一样 - 默认地 - 标识事务回滚。)从事务方法中抛出的Checked exceptions将 不 被标识进行事务回滚。
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。
六丶jdbctemplate在执行sql时获得时间问题
1、从结果集中取得日期部分
resultSet.getDate(); --2013-01-07
2、从结果集中取得时间部分
resultSet.getTime() --22:08:09
3、从结果集中同时得到日期和时间
resultSet.getTimestamp(); --2013-01-07 23:08:09
七丶时间格式全局转换
//统一转换日期格式
@InitBinder
protected void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}