Hibernate介绍及环境搭建:http://blog.csdn.net/ljheee/article/details/52475798
Hibernate操作一对一关系:http://blog.csdn.net/ljheee/article/details/52593662
Hibernate操作一对多关系:http://blog.csdn.net/ljheee/article/details/52599447
使用Hibernate简化了开发流程,但是使用Hibernate需要了解创建工程的细节。通过一段时间的学习,发现使用Hibernate创建工程有很多注意点,而且对于初学者来说,很容易出错,今儿特总结一下。
一、环境搭建
1、首先默认是需要Java环境支持的,还需要安装数据库,可参阅http://blog.csdn.net/ljheee/article/details/50810570配置好Java JDK等基础环境。
2、下载Hibernate库(jar包)
http://download.csdn.net/detail/ljheee/9625583
3、准备数据库驱动
http://download.csdn.net/detail/ljheee/9625612
4、Eclipse版本
eclipse-jee-mars-2-win32-x86_64.zip这个版本的Eclipse是支持动态Web工程的,如果要使用Hibernate,还需要在Eclipse中安装一个插件。这个步骤很简单,在有网 络条件下,打开Eclipse,选择工具栏菜单help---->Eclipse Marketplace,然后在搜索框搜索Hibernate,选JBoss Tools,点击安装即可自动完成。
二、Hibernate正向工程
1、新建一个普通Java工程。
2、右击工程,选工程路径:添加Hibernate相关类库jar
3、右击工程,选工程路添加数据库驱动
4、创建一个数据库连接DataBaseConnection
先在自己电脑的数据库上创建一个数据库,以作测试。
Eclipse成功安装插件后,会增加几个图标,如下图1 红色箭头指示的一个显蓝色“数据库”图案:
图1
若你的Eclipse右上角没有这个,可以点击搜索框右边那个矩形按钮,选DataBase Development,如下图2:
图2
选择DataBase Development后,Eclipse界面视图就会切换,此时左侧导航如下图3:
图3
右击第一个文件夹DataBase Connections,点击New,转到创建数据库连接界面,如下图4:
图4
我用的是MySQL数据库,可以根据自己安装的数据库,选择相应的。下面的Name指定数据库连接名MySQL2test,这个命名自定义。点击Next。
数据库都支持创建用户和授予权限。我用MySQL创建了abc用户,输入用户密码。红色矩形框中的是已存在的数据库名。点击Test Connection,测试一下数据库连接是否成功,如图5 代表Ping成功,即已成功连接到数据库mysql,这是使用Hibernate做对象持久化操作的基础。
图5
点击Finish完成—数据库连接的创建。
5、创建Hibernate配置文件(hibernate.cfg.xml)
右击工程,点击new--->Other,找到Hibernate选项,并展开,如下图6:
图6
选第一个Hibernate Configuration File。点击Next如下图7:
图7
点击红色椭圆“Get values from Connection”弹出小对话框,选择刚才创建好的数据库连接MySQL2test,点OK后部分内容已从数据库连接中获取帮你填好了。其中数据库方言DataBase dialect选相应的数据库类型,我使用的是MySQL。如下图8:
图8
最后,把下面的一个选项勾选了---Create a consoleconfiguration同时创建一个控制台配置文件。如下图9:
图9
点击Next,如下图10:其中版本号选4.3。点击Finish完成。
图10
6、编写POJO:Plain Ordinary JavaObject普通的Java类。
packagecom.ljheee.hello;
importjava.util.Date;
/**
* 实体类
* @author ljheee
*
*/
public class Event {
private long id;
private String title;
private Date time;
public Event() {
}
public Event(String title, Date time) {
super();
this.title = title;
this.time = time;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
@Override
public String toString() {
return "Event [id=" + id + ",title=" + title + ", time=" + time + "]";
}
}
7、给这个实体类创建映射文件(classname.hbm.xml)
右击Event类,点击new--->Other,找到Hibernate选项,并展开,选HibernateXML Mapping File。点击Next,AddClass选中Event类,Finish完成。
Event类是映射文件解析:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--Generated 2016-9-20 21:50:39 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.ljheee.hello.Event"table="EVENT">
<id name="id" type="long">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE"/>
</property>
<property name="time" type="java.util.Date">
<column name="TIME" />
</property>
</class>
</hibernate-mapping>
因为数据库连接MySQL2test已经指定了数据库连接的用户、要连接的哪一个数据库等信息。此映射文件,就是把一个Java实体类映射到指定数据库中的一张关系表,那么这个类的一个个字段,也会相应的成为表中的一列;一个Java对象就对应表中一条记录。
说明:
(1、<class name="com.ljheee.hello.Event"table="EVENT">
Event类映射到EVENT表,如果表不存在,会自动创建。
(2、<id name="id"type="long">
<column name="ID" />
<generator class="native" />
</id>
Event类中的字段id作为表的主键。Generator主键生成器指定生成方式数据库native原生方式。
(3、<property name="title"type="java.lang.String">
<column name="TITLE"/>
Event类中的title字段作为表中一列TITLE。
8、编辑Hibernate配置文件
如下图11,增加类的映射文件。
图11
9、编写测试类,增删改查数据
package com.ljheee.hello;
importjava.util.Date;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.boot.MetadataSources;
importorg.hibernate.boot.registry.StandardServiceRegistry;
importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;
publicclass Test {
public static void main(String[] args) {
//注册
StandardServiceRegistry registry =new StandardServiceRegistryBuilder().configure().build();
//会话工厂
SessionFactory factory = newMetadataSources(registry).buildMetadata().buildSessionFactory();
Session session =factory.openSession();//获得会话工厂
session.beginTransaction();//开启事务
//存储对象
session.save(newEvent("A", new Date()));//一行搞定
session.save(newEvent("B", new Date()));
session.getTransaction().commit();
session.close();
}
}
因为类的映射文件中Generator主键生成器指定生成方式数据库native原生方式。MySQL支持主键递增,一次创建一个Event对象,可以不赋值id。