MySQL 日期类型:日期格式、所占存储空间、日期范围 比较。
日期类型 存储空间 日期格式 日期范围
------------ --------- --------------------- -----------------------------------------
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 bytes YYYY 1901 ~ 2155
在 MySQL 中创建表时,对照上面的表格,很容易就能选择到合适自己的数据类型。但是选择 datetime 还是 timestamp,可能会有点犯难。这两个日期时间类型各有优点:datetime 的日期范围比较大;timestamp 所占存储空间比较小,只是 datetime 的一半。另外,timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。
1、date类型
可以在hibernate中对应String数据类型(个人愚见)
2、datetime类型我一般不会选timestamp 类型它对应的存储空间较小
package com.model;
// default package
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 数据库表datetime的实体类
* @author 王校兵
* @version 1.0,2015-11-26
*/
@Entity
@Table(name = "datetime", catalog = "hibernatedemo")
public class Datetime implements java.io.Serializable {
// Fields
private Integer did;
private Timestamp timedatetime;
// Constructors
/** default constructor */
public Datetime() {
}
/** full constructor */
public Datetime(Timestamp timedatetime) {
this.timedatetime = timedatetime;
}
// Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "did", unique = true, nullable = false)
public Integer getDid() {
return this.did;
}
public void setDid(Integer did) {
this.did = did;
}
@Column(name = "timedatetime", nullable = false, length = 19)
public Timestamp getTimedatetime() {
return this.timedatetime;
}
public void setTimedatetime(Timestamp timedatetime) {
this.timedatetime = timedatetime;
}
}
对应的Java测试类
<pre name="code" class="java">package com.dao;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.model.Datetime;
import com.model.Time;
import com.util.HibernateSessionFactory;
/**
* 向数据库中插入数据datetime类型插入测试
* @author 王校兵
* @version 1.0,2015-11-26
* */
public class InsertDateTimeDao {
public static void main(String[] args) {
//当前时间时间戳
/*Timestamp t = new Timestamp(System.currentTimeMillis());
System.out.println("Timestamp---- " + t);*/
//自己创建时间戳
Timestamp t = Timestamp.valueOf("2015-1-26 19:23:18.575");
System.out.println("Timestamp.valueOf(2015-11-26 19:53:18.575)-- " + t);
Session session = HibernateSessionFactory.getSession();
Transaction ts = session.beginTransaction();
Datetime dt = new Datetime();
dt.setTimedatetime(t);
session.save(dt);
org.hibernate.Query query = session.createQuery("from Datetime");
List list = query.list();
ts.commit();
HibernateSessionFactory.closeSession();
for(Object ele:list){
Datetime d = (Datetime)ele;
System.out.println(d.getTimedatetime());
}
}
}
3、year个人感觉还不如String类型好使(个人愚见)