1.Hibernate下载。
在官方网站下载Hibernate:http://hibernate.org/orm/
下载完成后进行解压,其中的lib目录下的就是我们开发所需要的jar包,其中required是我们所必须需要的包。
2.eclipse安装HibernateTools(非必须)。
可以在官网下载安装包,然后在本地进行安装:http://tools.jboss.org/downloads/jbosstools/neon/4.4.2.Final.html#zips
或者直接在eclipse中进行:
Add the following URL to your Eclipse Neon 4.6.1 installation, via:
Help > Install New Software… > Work with:
http://download.jboss.org/jbosstools/neon/stable/updates/
Then select the individual features that you want to install:
这里的JBoss和HibernateTools整合到一起了,所以可以选择只安装HibernateTools即可。
在这里进行搜索,然后将显示的有关HibernateTools的进行安装即可。
注意:有些是在后台进行的安装,所以当上述对话框全部点击完成时,并不会显示安装过程。可以在右下角发现后台进程,类似这样的:
然后点击进行就可以查看安装进程。
成功安装后,使用NEW进行创建项目的时候就可以找到相关的Hibernate:
3.eclipse导入HibernateJar包。
新建一个Dynamic Web Project。
然后直接将上述中required目录下的Jar包复制到lib目录下就好。
4.eclipse中生成Hibernate配置文件。
hibernate.cfg.xml
这个文件是必须的一个文件,其中保存了相关的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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 数据库URL,其中前面格式固定,后面的test是数据库名字 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<!-- 数据库账号 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库方言,每个数据库有自己的方言,以方便告知底层将使用哪种数据库 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否自动建立数据库表,有四个值可选,validate、update、create、create-drop -->
<property name="hbm2ddl.auto">update</property>
<!-- 是否在控制台显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 需要持久化对象的信息 -->
<mapping resource="Hibernate/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
其中除上述property,还有其他的属性,详情可以参考这里:https://wizardforcel.gitbooks.io/hibernate-doc/content/34.html
(这个链接时Hibernate中文文档,所以其中的内容还是比较丰富的。)
可以将上述文件直接复制到src目录下,或者可以使用刚才安装的HibernateTools进行生成该文件。
选择src目录:
填写相关信息:
这些是必填的,剩下的两项选填。
点击Finish之后,会发现在src目录下生成的hibernate.cfg.xml文件与自己创建的一致。
5.eclipse中使用Hibernate(使用xml文件)。
创建一个Hibernate包,新建一个名字为News的Class:
package Hibernate;
public class News {
private Integer id;
private String title;
private String content;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return this.id;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return this.content;
}
}
设置相关的setter和getter。
然后需要生成News.hbm.xml文件(也可以使用注解)。
可以手动创建相关文件。
也可以使用HibernateTools进行创建:
选择对应的package:
Next直到如下,如果有多个文件可以根据需求勾选相应的Class:
Finish之后,可以发现在src/Hibernate下出现了New.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">
<!-- Generated 2017-2-14 22:01:23 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="Hibernate.News" table="NEWS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="content" type="java.lang.String">
<column name="CONTENT" />
</property>
</class>
</hibernate-mapping>
上述就是对应New对象在数据库中的信息。
可以看到,class的名字就是刚才的News,然后对应数据库中的表就是NEWS(如果在上述配置hibernate.cfg.xml中没有指定hbm2ddl.auto的属性为update的话,需要手动创建该表,如果指定的话则会自动创建该表),其中id自动为主键。
然后创建一个NewsManager进行操作该News对象:
package Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class NewsManager {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();//包含基本配置信息(hibernate.cfg.xml)和对象映射关系信息(News.hb,.xml)
SessionFactory sessionFactory = configuration.buildSessionFactory();//创建SessionFactory,用来生成Session
Session session = sessionFactory.openSession();//生成一个session
Transaction transaction = session.beginTransaction();//开始一个事务
News news = new News();//创建一个要进行持久化的对象
news.setId(1);
news.setContent("测试内容");
news.setTitle("标题");
session.save(news);//进行保存
transaction.commit();//提交事务
session.close();//关闭Session
sessionFactory.close();//关闭SessionFactory
}
}
修改hibernate.cfg.xml,添加对应的New.hb,.xml文件,修改过后的文件:
<?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 name="Hibernate">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">jialong1997</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<mapping resource="Hibernate/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
其中,mapping resource的路径必须填写正确,如果包名是:com.Hibernate ,那么需要写成com/Hibernate。
运行之前,数据库中并没有任何表。
运行之后,自动生成了new表,并且其中信息正确:
并且从Conlose(控制台)中可以看到所进行的SQL语句操作(因为上述配置中指定了show_sql属性),可以看到,显示进行了表的创建然后插入信息。
但是此刻却抛出了Error,提示解析JNDI错误???
查阅之后得到了解决办法:http://stackoverflow.com/questions/10552362/hibernate-tools-error-parsing-jndi-name
就是将刚才通过HibernateTools生成的hibernate.cfg.xml其中的session-factory的name属性删除掉:
再次运行即可,需要注意运行前将刚才的表格删除或者表中信息删除,否则会抛出一个主键重复的错误,就像下面这样:
成功运行的样子:
整体的目录如下:
6.Hibernate使用注解
除了使用xml文件配置之外,还可以直接在java代码中使用注解来进行使用Hibernate,hibernate.cfg.xml文件如下:
<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">jialong1997</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<mapping class="test.News"/>
</session-factory>
</hibernate-configuration>
这里没有指定<mapping resource>,但是指定了<mapping class>,就是所需要持久化的对象类,如果没有添加这个属性的话,会出现Unknown entity: test.News的错误提示。
然后由于不需要New.hbm.xml文件,所以应该在New类中使用注解:
package test;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="news_inf")
public class News {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return this.id;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return this.content;
}
}
@Entity注解声明该类是一个Hibernate的持久化类。
@Table指定该类映射的表,此处是news_inf表。(同样的如果不指定自动创建表的话,需要先创建该表)
@Id用于指定该类的表标识属性。所谓标识属性,就是可以唯一标识该对象的属性,标识属性通常映射到数据库表的主键。
@GeneratedValue用于指定主键生成策略,其中strategy属性指定了主键生成策略为IDENTITY策略,也就是采用自动增长的主键生成策略。
然后NewsManager代码与上述一致。
简单的使用就是上述所述,更为复杂的方法可以参考相关文档或教材。
本文介绍Hibernate的基本使用方法,包括下载、安装、配置等步骤,并演示如何使用XML和注解方式进行对象关系映射。

2599

被折叠的 条评论
为什么被折叠?



