上篇已经简单介绍了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框架学习之旅。
在这个过程中,遇到了一个经常遇到的问题,关于时间格式问题,具体解决过程见下篇。