使用Hibernate轻松解决java中date与datetime类型不兼容的问题

本文介绍了一次在论坛程序开发过程中,利用Hibernate框架解决Java与MySQL之间的时间类型转换问题的经验。通过创建简单的论坛帖子模型并使用Java.util.Date类型与MySQL的datetime类型进行交互,成功实现了发帖时间的自动记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     今天在没事,跟着尚学堂写一个论坛的程序。在写入时间时,发现了问题。在建立MySQL表使,发帖时间用的datetime类型。并且用系统函数now()来实现。在java实体类中用的java.util.date类型。发现这是犯愁了,众所周至,java中时间类型一直是让人头疼的一个问题。

  硬着头皮上,终于发现原来Hibernate已经帮我们解决了问题。

MySQL简表语句如下: 

create database bbs;

use bbs;

create table article 
(
id 
int primary key auto_increment,
pid 
int,
rootid 
int,
title 
varchar(255),
cont 
text,
pdate 
datetime,
isleaf 
int #1-not leaf 0-leaf
);

insert into article values (null01'蚂蚁大战大象''蚂蚁大战大象', now(), 1);
insert into article values (null11'大象被打趴下了''大象被打趴下了',now(), 1);
insert into article values (null21'蚂蚁也不好过','蚂蚁也不好过', now(), 0);
insert into article values (null21'瞎说''瞎说', now(), 1);
insert into article values (null41'没有瞎说''没有瞎说', now(), 0);
insert into article values (null11'怎么可能''怎么可能', now(), 1);
insert into article values (null61'怎么没有可能''怎么没有可能', now(), 0);
insert into article values (null61'可能性是很大的''可能性是很大的', now(), 0);
insert into article values (null21'大象进医院了''大象进医院了', now(), 1);
insert into article values (null91'护士是蚂蚁''护士是蚂蚁', now(), 0);

 

实体类如下:

 

package database;

import java.util.Date;

/**
 * Article entity.
 * 
 * 
@author smartcat86
 
*/

public class Article implements java.io.Serializable {

    
// Fields

    
private Integer id;
    
private Integer pid;
    
private Integer rootid;
    
private String title;
    
private String cont;
    
private Date pdate;
    
private Integer isleaf;

    
// Constructors

    
/** default constructor */
    
public Article() {
    }

    
/** full constructor */
    
public Article(Integer pid, Integer rootid, String title, String cont,
            Date pdate, Integer isleaf) {
        
this.pid = pid;
        
this.rootid = rootid;
        
this.title = title;
        
this.cont = cont;
        
this.pdate = pdate;
        
this.isleaf = isleaf;
    }

    
// Property accessors

    
public Integer getId() {
        
return this.id;
    }

    
public void setId(Integer id) {
        
this.id = id;
    }

    
public Integer getPid() {
        
return this.pid;
    }

    
public void setPid(Integer pid) {
        
this.pid = pid;
    }

    
public Integer getRootid() {
        
return this.rootid;
    }

    
public void setRootid(Integer rootid) {
        
this.rootid = rootid;
    }

    
public String getTitle() {
        
return this.title;
    }

    
public void setTitle(String title) {
        
this.title = title;
    }

    
public String getCont() {
        
return this.cont;
    }

    
public void setCont(String cont) {
        
this.cont = cont;
    }

    
public Date getPdate() {
        
return this.pdate;
    }

    
public void setPdate(Date pdate) {
        
this.pdate = pdate;
    }

    
public Integer getIsleaf() {
        
return this.isleaf;
    }

    
public void setIsleaf(Integer isleaf) {
        
this.isleaf = isleaf;
    }

}

 

测试类

 

package database;

public class Test {
    
    
public static void main(String[] args){
                      DBOperate dbo 
= new DBOperate(HibernateSessionFactory.getSession());//数据库操作类
     Article a = new Article();    
     a.setId(
null);//Hibernate中使native使其自动增加
     a.setPid(pid);
     a.setRootid(rootId);
     a.setTitle(title);
     a.setCont(cont);      
    a.setPdate(
new Date());
    a.setIsleaf(
0);
    
    dbo.insert(a);
    }
    
}

 

后经过测试,插入时间为:2008-01-029 04:04:36.0,和使用 new java.text.SimpleDateFormat("yy-MM-dd HH:mm:ss").format(new java.util.date())得出的结果一样。

当然从数据库读出来了可以使用SimpleDateFormat类来实现。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值