上篇已经简单介绍了Hibernate的基础知识,对一些文字上的内容,理解起来也许并不是那么的容易。下面就以一个小例子来开始Hibernate的学习之旅。本实例是应用Java程序来创建数据表,并且实现数据的简单添加。
首先创建一个普通的Java程序,引入基本的jar包和创建基本类,具体如下:
hibernate.cfg.xml的配置信息如下:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<!-- 配置驱动 -->
<property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
<!-- 配置连接库 表示连接本地库,库名为hibernate_demo1-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_demo1</property>
<!-- 连接数据库的登录名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 数据库的转换配置,适配器 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置在控制台显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 配置映射 ,对应所建的User映射-->
<mapping resource="com/tgb/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
上述配置主要是对数据库的连接建立关联,使用MySQL数据库。并且与我们的映射文件建立联系
用户实体类:User.java
package com.tgb.hibernate;
import java.util.Date;
/**
* 用户实体类
* @author victor
*
*/
public class User {
private String id; //主键
private String name; //姓名
private String password; //密码
private Date createTime; //创建时间
private Date expireTime; //失效时间
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
}
映射文件信息:User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 建立数据表映射 -->
<!-- name值表示是所建的实体类路径,会在数据库中创建相对应的表 -->
<class name="com.tgb.hibernate.User">
<!-- id标签表示主键,name的值是字段名。此处表示以id为主键。 -->
<!-- 若想要另取名,使用colum属性来赋值。
例如:column="user_id",则数据表中存的是user_id,但是实体类仍然是id,他们之间自动创建映射关系 -->
<id name="id">
<!-- generator标签表示主键是自动生成 -->
<generator class="uuid" />
</id>
<!-- property标签是指表的其他属性,name值表示字段名 -->
<property name="name" />
<property name="password" />
<property name="createTime" />
<property name="expireTime" />
</class>
</hibernate-mapping>
创建表的类代码如下:ExportDB.java
package com.tgb.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* 创建表类
* @author victor
*
*/
public class ExportDB {
/**
* @param args
*/
public static void main(String[] args) {
/*默认读取hibernate.cfg.xml*/
Configuration cfg=new Configuration().configure();
SchemaExport export=new SchemaExport(cfg);
//进行创建表,第一个表示将值打印到控制台,第二个表示创建到数据库
export.create(true, true);
}
}
添加数据的类:ImportData.java
package com.tgb.hibernate;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ImportData {
/**
* @param args
*/
public static void main(String[] args) {
// 读取配置
Configuration cfg=new Configuration().configure();
// 创建sessionFactory
SessionFactory factory=cfg.buildSessionFactory();
// 获取session
Session session=null;
try{
session=factory.openSession();
// 开启事务
session.beginTransaction();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
User user=new User();
user.setName("victor");
user.setPassword("123");
/*user.setCreateTime(new Date());
user.setExpireTime(new Date());*/
user.setCreateTime(formatter.parse( formatter.format(new Date())));
user.setExpireTime(formatter.parse(formatter.format(new Date())));
System.out.println(new Date());
System.out.println(formatter.parse((formatter.format(new Date()))));
// 保存数据
session.save(user);
// 提交事务,获取当前的事务并提交
session.getTransaction().commit();
}
catch(Exception e){
e.printStackTrace();
// 回滚
session.getTransaction().rollback();
}finally{
// 关闭session
if(session !=null){
if(session.isOpen()){
session.close();
}
}
}
}
}
至此,功能所需要的文件建立完毕,首先我们需要在数据库中建立一个与hibernate.cfg.xml中配置的库名一致的数据库,名为hibernate_demo1。然后运行ExportDB.java类,创建数据表。最后运行ImportData.java来添加数据。
此过程是一个简单的 Hibernate框架应用,通过简单的功能实现,能够初步了解Hibernate框架的使用过程,知道了这几种核心文件的使用方式与关联的方法。接下来就要开启更加系统而又细致的Hibernate框架学习之旅。
在这个过程中,遇到了一个经常遇到的问题,关于时间格式问题,具体解决过程见下篇。