更新时间:2022-02-11 11:19:25 来源:极悦 浏览767次
既然要使用Hibernate来开发应用,那么就必须先获取Hibernate的发布包,我们可以从网站http://sourceforge.net/projects/hibernate/files/中下载自己需要的版本,我下载的是hibernate-search-4.4.0.Alpha2。
下载完成,解压后得到以下内容:
创建一个Java Project,建好项目之后,需要添加上Hibernate运行所必须的Jar包,如果不知道哪些可以不添加就直接添加lib\required中的所有Jar包,如果清楚的知道每个包的作用就可以进行相应的删减。
package events;
import java.util.Date;
public class Event {
private Long id;
private String title;
private Date date;
public Event() {
}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
注意:
(1)无参构造函数的作用是用于Hibernate通过反射机制来实例化类对象的时候。
(2)在所有的持久化实体类中都需要一个唯一的标识符属性。
(3)通常不会操作对象的标识(identity),因此它的setter方法的访问级别应该声明private。这样当对象被保存的时候,只有Hibernate可以为它分配标识符值。
映射文件的作用就是告诉Hibernate应该访问哪个数据库(database)中的哪张表(table)的哪些字段(column)。
映射文件应该保存在持久类的源文件目录下,映射文件可随意地命名,但hbm.xml的后缀已成为Hibernate开发者社区的约定。
本例用到的映射文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="events">
<class name="Event" table="EVENTS">
<!-- id用于标示标识符属性,即数据表的主键,name对应实体中的属性名,column对应数据表中的字段名-->
<id name="id" column="EVENT_ID">
<!-- 配置标识符的生成策略 -->
<generator class="native" />
</id>
<!-- property标示实体类中的非标识符属性,
type指定Hibernate 映射类型,它们能使Java数据类型与SQL数据类型相互转换
-->
<property name="date" type="timestamp" column="EVENT_DATE" />
<!-- 若不指定column属性,则表示实体对象的属性名即为数据表中字段的名称 -->
<property name="title" />
</class>
</hibernate-mapping>
通过配置文件将应用程序与数据库连接,配置数据库的相关属性。此外,还要添加映射文件资源,使得Hibernate能够找到映射文件,并将映射文件与实体类关联。
<?xml version="1.0" encoding="UTF-8"?>
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 设置数据库服务器的连接路径 -->
<property name="connection.url">jdbc:mysql://localhost:3306/db</property>
<!-- 设置数据库服务器的连接用户 -->
<property name="connection.username">root</property>
<!-- 设置数据库服务器的连接用户的密码 -->
<property name="connection.password">Lynn0714</property>
<!-- 数据库连接池大小 -->
<property name="connection.pool_size">1</property>
<!-- SQL方言,要根据使用的数据库来配置 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 设置Hibernate的自动session管理 -->
<property name="current_session_context_class">thread</property>
<!-- 设置二级cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 设置运行时是否显示调用的SQL语句 -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- 使用的映射文件 -->
<mapping resource="events/events.hbm.xml" />
</session-factory>
</hibernate-configuration>
上图配置并不是包含所有内容
上图配置了Hibernate的SessionFactory,一个关联于特定数据库全局的工厂(factory)。如果你要使用多个数据库,就要用多个的,通常把它们放在多个配置文件中。(Hibernate如何识别是在何时使用哪个配置文件?)
此处Ant操作全部仿照操作,不知道具体如何使用。
在这个环节中,需要创建一个全局的SessionFactory,通过SessionFactory来创建并打开Session,一个Session代表一个单线程的单元操作,SessionFactory则是个线程安全的全局对象,只需要被实例化一次。
package util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(Throwable ex){
System.err.println("初始化SessionFactory失败"+ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
package events;
import java.util.Date;
import org.hibernate.Session;
import util.HibernateUtil;
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
}
按上述步骤操作完成,运行后出现下面异常:
出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。
出现这个错误,是因为缺少JTA的Jar包,添加上即可,由于我也不知道哪些是必须的就添加了lib\provided目录下的所有Jar包
修正上述两个错误后,运行成功
以上就是关于“学习Hibernate文档笔记”的介绍,如果您想了解更多相关知识,可以关注一下极悦的Java视频,里面的课程内容细致全面,通俗易懂,适合没有基础的朋友学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习