本文讲述的是Hibernate对数据库的建立以及插入数据。至于Eclipse中配置hibernate,之前hibernate基础中已经提及过,若有问题的可以查看我之前写的关于hinernate基础的一篇博客,下面是博客链接。
接下来我直接对在Eclipse中基于Hibernate对数据库简单操作的应用进行逐步讲解。
1.新建hibernate项目
1.建立一个java项目,名为HibernateDemo
2.引入相关的JAR包
2.配置hibernate.cfg.xml
本文采用全配置的形式,进行映射,所以,配置文件的配置十分重要。首先是hibernate.cfg.xml。整个应用涉及的一些xml文件以及一些数据库相关的信息等都需要在其中配置清楚。它相当于一个应用的总的架构。
本应用的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
</session-factory>
</hibernate-configuration>
以上是主要对driver、url等信息进行配置,至于其余xml文件在后面等后面完成持久类配置之后再添加到hibernate.cfg.xml中
3.建立实体类
hibernate相当于是将一个实体类映射到数据库底层操作的框架,所以开发应用中,首先需要建立实体类,本应用的实体类为User
代码如下:
package per;
import java.util.Date;
public class User {
private String id; //编号
private String name; //姓名
private String password; //密码
private String createTime; //创建日期
private String 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 String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getExpireTime() {
return expireTime;
}
public void setExpireTime(String expireTime) {
this.expireTime = expireTime;
}
}
上面的User类是一个典型的Javabean,每个变量都有setter和getter函数。这也是hibernate框架中的实体类的特点。
4.配置实体类的hbm.xml文件
因为这里不采用注释的方式进行映射,而是采用配置文件的方式进行映射。因此对应每一个实体类都需要配置一个hbm.xml文件。而前面已经有了实体类User.java,所以这里需要配置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>
<!-- 将会在数据库中建立一个User表,默认名称与User类名相同,也可以用table属性对表名进行重命名 -->
<class name="per.User">
<!-- 给表提供一个标识,也就是主键,同样需要提供生成策略,是数据库自增,还是手动增 -->
<id name="id">
<!-- 生成器,自动生成主键 -->
<generator class="uuid"/>
</id>
<!-- 该表的其它字段,默认列名为name的属性值,也可以用column属性对字段进行重命名 -->
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
之前说过,每个实体类对应一个hbm.xml配置文件,而最终需要将所有的hbm.xml文件都配置到hibernate.cfg.xml文件当中。
配置结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<mapping resource="per/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
与之前的hibernate.cfg.xml文件相比,多了一行<mapping resource="per/User.hbm.xml"/>;这行将User.hbm.xml文件配置到了hibernate.cfg.xml文件中,如果有其它的实体类对应的hbm.xml文件,只需要在后面添加<mapping.../>即可。
5.建立工具类,将User实体类映射成表
这里建立工具类UserTest,首先先建立表,然后向表中插入数据,整个过程只需要面向User对象编程即可,无须对底层数据库进行操作,整个过程都是hibernate框架对java类对象进行映射,将其映射到底层数据库,这里的hibernate框架类似于一个转接口的作用。以下是工具类UserTest。
代码:
package test;
import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.service.*;
import org.hibernate.boot.registry.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import per.*;
import java.*;
public class UserTest {
public static void main(String[] args) {
//默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
//将ddl打印到控制台,输入到数据库
export.create(true, true);
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sf=cfg.buildSessionFactory(serviceRegistry);
Session sess=sf.openSession();
Transaction tx=sess.beginTransaction();
String[] name= {"a","b","c","d","e","f","g","h","i","j",};
String[] password= {"12","22","11","33","44","55","34","66","67","88"};
String[] createtime= {"2005-04-04","2004-04-04","2006-06-04","2005-09-04","2005-04-08","2009-10-04","2005-11-04","2015-04-27","2008-07-07","2013-11-04"};
String[] expiretime= {"2013-04-05","2009-05-05","2011-10-05","2008-07-18","2009-11-24","2013-08-17","2014-06-05","2018-05-05","2017-06-06","2016-12-05"};
//循环写入逐条记录
for(int i=0;i<10;i++)
{
User user=new User();
user.setId(i+"");
user.setName(name[i]);
user.setPassword(password[i]);
user.setCreateTime(createtime[i]);
user.setExpireTime(expiretime[i]);
sess.save(user);
}
//提交事务
tx.commit();
//关闭session
sess.close();
//关闭SessionFactory
sf.close();
//Commandline tool to export table schema to the database. This class may also be called from inside an application.
}
}
以上的步骤基本满足进行持久化的步骤:
1)开发持久类,由POJO+持久化注解组成
2)获取Configuration
3)获取SessionFactory
4)获取Session,打开事务
5)用OO方式操作数据库
6)关闭事务,关闭Session
按照如上代码操作结果如下图所示,生成了一个user数据表:
下图是创建之后的user数据表的内容:
以上代码中SchemaExport export = new SchemaExport(cfg);export.create(true, true);目的是将ddl打印到控制台,输入到数据库,以下是运行这两句出现的结果,是sql建立table的语句:
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
则还可以获得进行crud操作的sql语句,如下图所示:
以上便是在eclipse上利用hibernate框架进行简单数据库建立table,插入数据等操作,如果需要更复杂的操作,建立多个table,甚至进行多表查询,都是同样的原理基础上进行的。