eclipse下配置Hibernate5.2.7

1.Hibernate下载。

在官方网站下载Hibernate:http://hibernate.org/orm/
eclipse下配置Hibernate5.2.7_第1张图片

下载完成后进行解压,其中的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的进行安装即可。

eclipse下配置Hibernate5.2.7_第2张图片

注意:有些是在后台进行的安装,所以当上述对话框全部点击完成时,并不会显示安装过程。可以在右下角发现后台进程,类似这样的:


然后点击进行就可以查看安装进程。


成功安装后,使用NEW进行创建项目的时候就可以找到相关的Hibernate:
eclipse下配置Hibernate5.2.7_第3张图片


3.eclipse导入HibernateJar包。

新建一个Dynamic Web Project。

然后直接将上述中required目录下的Jar包复制到lib目录下就好。

eclipse下配置Hibernate5.2.7_第4张图片


4.eclipse中生成Hibernate配置文件。

hibernate.cfg.xml

这个文件是必须的一个文件,其中保存了相关的Hibernate配置。


		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    
       	
        com.mysql.jdbc.Driver
        
        123456
        
        jdbc:mysql://localhost:3306/test
        
        root
        
        org.hibernate.dialect.MySQLDialect
        
        update
       	
        true
        
        
    



其中除上述property,还有其他的属性,详情可以参考这里:https://wizardforcel.gitbooks.io/hibernate-doc/content/34.html
(这个链接时Hibernate中文文档,所以其中的内容还是比较丰富的。)

可以将上述文件直接复制到src目录下,或者可以使用刚才安装的HibernateTools进行生成该文件。

eclipse下配置Hibernate5.2.7_第5张图片


选择src目录:

eclipse下配置Hibernate5.2.7_第6张图片

填写相关信息:

eclipse下配置Hibernate5.2.7_第7张图片

这些是必填的,剩下的两项选填。

点击Finish之后,会发现在src目录下生成的hibernate.cfg.xml文件与自己创建的一致。

eclipse下配置Hibernate5.2.7_第8张图片


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进行创建:

eclipse下配置Hibernate5.2.7_第9张图片

选择对应的package:

eclipse下配置Hibernate5.2.7_第10张图片


Next直到如下,如果有多个文件可以根据需求勾选相应的Class:

eclipse下配置Hibernate5.2.7_第11张图片


Finish之后,可以发现在src/Hibernate下出现了New.hbm.xml文件:





    
        
            
            
        
        
            
        
        
            
        
    


上述就是对应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文件,修改过后的文件:

		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    
        com.mysql.jdbc.Driver
        jialong1997
        jdbc:mysql://localhost:3306/test
        root
        org.hibernate.dialect.MySQL5Dialect
        update
        true
        
    


其中,mapping resource的路径必须填写正确,如果包名是:com.Hibernate ,那么需要写成com/Hibernate。

运行之前,数据库中并没有任何表。

eclipse下配置Hibernate5.2.7_第12张图片

运行之后,自动生成了new表,并且其中信息正确:



eclipse下配置Hibernate5.2.7_第13张图片


并且从Conlose(控制台)中可以看到所进行的SQL语句操作(因为上述配置中指定了show_sql属性),可以看到,显示进行了表的创建然后插入信息。



eclipse下配置Hibernate5.2.7_第14张图片


但是此刻却抛出了Error,提示解析JNDI错误???
查阅之后得到了解决办法:http://stackoverflow.com/questions/10552362/hibernate-tools-error-parsing-jndi-name
就是将刚才通过HibernateTools生成的hibernate.cfg.xml其中的session-factory的name属性删除掉:



再次运行即可,需要注意运行前将刚才的表格删除或者表中信息删除,否则会抛出一个主键重复的错误,就像下面这样:




成功运行的样子:
eclipse下配置Hibernate5.2.7_第15张图片



整体的目录如下:

eclipse下配置Hibernate5.2.7_第16张图片



6.Hibernate使用注解

除了使用xml文件配置之外,还可以直接在java代码中使用注解来进行使用Hibernate,hibernate.cfg.xml文件如下:



    
        com.mysql.jdbc.Driver
        jialong1997
        jdbc:mysql://localhost:3306/test
        root
        org.hibernate.dialect.MySQLDialect
        update
        true
        
    


这里没有指定,但是指定了,就是所需要持久化的对象类,如果没有添加这个属性的话,会出现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代码与上述一致。

简单的使用就是上述所述,更为复杂的方法可以参考相关文档或教材。

你可能感兴趣的:(Java)