现在的位置: 首页 > 综合 > 正文

hibernate helloworld

2017年10月24日 ⁄ 综合 ⁄ 共 5075字 ⁄ 字号 评论关闭
文章目录

首先,导入包:包含hibernate/lib/required下的所有包和对应数据库连接驱动。

1.  创建数据库

Create database hibernate;
Use hibernate;
Create table student(id intprimary key auto_increment, name varchar(25) not null, age int);
Create table admin(id int primarykey auto_increment, name varchar(25) not null, age int);

2.  创建域对象

1)Student.java——编写hbm.xml

注意:为了创建对象方便,可以写一个带参的构造器,写带参的构造器一定要写无参的构造器。为了测试方便可以写一个toString()方法。这些都可以由eclipse自动生成。

public class Student {
	private Long id;
	private String name;
	private Integer age;
	public Long getId() {		return id;	}
	public void setId(Long id) {		this.id = id;	}
	public String getName() {		return name;	}
	public void setName(String name) {this.name = name;	}
	public Integer getAge() {		return age;	}
	public void setAge(Integer age) {	this.age = age;	}
}

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="edu.zhku.cian.model">
	<class name="Student" table="student">
		<id name="id" column="id">
			<generator class="increment"/>
		</id>
        <property name="name" column="name"/>
        <property name="age" column="age"/>
	</class>
</hibernate-mapping>

其中的: http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

要想提示,需要在Eclipse中关联这个文件,hibernate-mapping-3.0.dtd 可以在hibernate发布的包中搜索到,然后在Eclipse中,preference->xml->category添加映射:

如下图:

2)Admin.java——使用Annotation

Admin.java

@Entity
@Table(name="admin")
public class Admin {
	private Long id;
	private String name;
	private Integer age;
	@Id
    @GeneratedValue()
	public Long getId() {		return id;	}
	public void setId(Long id) {		this.id = id;	}
	public String getName() {	return name;	}
	public void setName(String name) {	this.name = name;}
	public Integer getAge() {		return age;	}
	public void setAge(Integer age) {	this.age = age;}
}

其中

@Entity 
表示该对象是对应与数据库中的表,是实体对象

@Table(name="admin") 表示对应于数据库中的admin表

@Id   放在get方法上面,表示是主键

@GeneratedValue() ID自增

3   编写hibernate.cfg.xml文件

关于这个文件,可以在开发文档中国找到例子,当然你也可以查看解压后projects/etc目录下的hibernate.cfg.xml文件。

另外,您还需要参见hibernate-configuration-3.0.dtd, 可以利用windows的搜索功能找到这个文件,然后关联到Eclipse中让其能够提示。

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>
		<!-- 
		<!-- database connection setting -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
		<property name="connection.username">root</property>
		<property name="connection.password">admin</property>
		
		<!-- SQL dialect -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        
        <!-- JDBC connection pool (use the built-in) -->
        <!-- <property name="connection.pool_size">1</property> -->
        
        <!-- Enable Hibernate's automatic session context management -->
        <!-- <property name="current_session_context_class">thread</property> -->
        
        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">
              org.hibernate.cache.internal.NoCacheProvider
        </property>
        
        <mapping resource="edu/zhku/cian/model/Student.hbm.xml"/>
        <mapping class="edu.zhku.cian.model.Admin"/>
		
	</session-factory>
</hibernate-configuration>

在上面我们也看到了:

这个是以两种方式加载这个配置,Hibernate需要通过这个配置来对实体类进行反射以及相关的操作。

数据库链接配置:

<!-- database connection setting -->		
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="connection.username">root</property>		
<property name="connection.password">admin</property>

当然我们也可以通过另一种方式来配置这些项:

使用hibernate.properties文件:

hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://127.0.0.1:3306/hibernate
hibernate.connection.username root
hibernate.connection.password admin

将此文件置于classpath的根目录下。

4   编写测试用例

1)HibernateUtil.java

本类是一个单例对象,专门用于产生session factory, 由于Session Factory对象很大,要加载hibernate相关的配置文件,因此只需要在系统启动的时候创建一份实例就行了。

public class HibernateUtil {
	private static final SessionFactory sessionFactory = buildSessionFactory();
	/**
	 * build the session factory with the hibernate.cfg.xml
	 * @return
	 */
	private static SessionFactory buildSessionFactory() {
		try {
			// Create the SessionFactory from hibernate.cfg.xml
			Configuration cfg = new Configuration(); 
// This is necessary, no setting of dialect will be warned
			cfg.configure();     
			ServiceRegistry  sr = new ServiceRegistryBuilder()
                              .applySettings(
                                cfg.getProperties()
                              ).buildServiceRegistry();           
			SessionFactory sf = cfg.buildSessionFactory(sr);  
			return sf;
		} catch (Throwable ex) {
			System.err.println("Initial SessionFactory creation failed!" + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}
	public synchronized static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

注意:ServiceRegistry对象:hibernate 4.x 新增加的对象,hibernate的任何配置和服务都需要在该对象中注册中才能有效。

2)测试实例

public class AllTests {
	@Test
	public void testSave() {
		Student student = new Student();
		student.setId(1L);
		student.setName("诸葛亮");
		student.setAge(22);
		
		SessionFactory sf = 
                    HibernateUtil.getSessionFactory(); 
		Session session = sf.openSession();
		session.beginTransaction();
		session.save(student);
		session.getTransaction().commit();
	}
}

5   运行测试实例

点击运行Junit测试实例,如果没抛异常就行了。

项目的目录结构如下:

抱歉!评论已关闭.