对象表映射
实体类--数据库表间的转换
由于Hibernate的存储都是建立在对象基础上的,所以映射好实体类对象和数据库表是非常重要的,数据库表的设计也必须按照一定的规范来(冗余字段等就不允许存在?)
本章的目录:
1.简单对象表映射
--搭建JUnit测试环境
附:
搭建JUnit测试环境
1.去官网下载jar包
2.解压,复制junit-4.10.jar(我用的此时是4.10版本)到bin下的jar中
3.在项目名上右键→new→Source Folder→输入名称→finish
4.注意,你对哪个包进行测试,你就在测试下建立和那个包相同的包
5.建立测试类,需要在测试的方法前面加入”@Test”
1.简单对象表映射,(单表无关联)
先把实体类贴出来(本人英文名jake,无需吐槽包名)
package com.jake.hibernate.domain;
import java.util.Date;
public class Person {
private long id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
然后是映射文件:建议与实体类同包,名字为 实体类名.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jake.hibernate.domain">
<class name="Person" table="PERSON">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" />
<property name="birthday" type="timestamp" column="birthday" />
</class>
</hibernate-mapping>
然后是配置文件(参考文档中给的)
<?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 settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernateTest</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</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.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/jake/hibernate/domain/Person.hbm.xml" />
<!--
<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml" />
<mapping resource="org/hibernate/tutorial/domain/Person.hbm.xml" />
-->
</session-factory>
</hibernate-configuration>
接下来是JUnit Test的代码
package com.jake.hibernate.domain;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.jake.hibernate.util.HibernateUtil;
public class TestPerson {
private static SessionFactory sf = null;
@BeforeClass
// 表示Junit此类被加载到内存中就执行这个方法
public static void beforClass() {
sf = HibernateUtil.getSessionFactory();
}
@Test
public void TestPerson() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Person p = new Person();
p.setName("jake");
Date d = new Date();
p.setBirthday(d);
session.save(p);
session.getTransaction().commit();
// session.close();
// 注意,commit后是自动关闭session的,不需要是手动close
}
@AfterClass
public static void afterClass() {
sf.close();
}
}
测试成功。。

有一点出乎意料的地方是,数据库生成的是datetime型的,不是timestamp。
目前未解决。。
接下来是annotation版本的了。。
实体类
package com.jake.hibernate.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "t_person")
public class Person {
private long id;
private String name;
private Date birthday;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
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;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(updatable = false)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
配置文件
<?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 settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernateTest</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</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.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping class="com.jake.hibernate.model.Person"/>
</session-factory>
</hibernate-configuration>
刚开始漏掉了
<mapping class="com.jake.hibernate.model.Person"/>
可把我整惨了,以为是实体类哪里写错了,唉。久没写了。
这个是HibernateUtil-----实验证明AnnotationConfiguration已经过时了
package com.jake.hibernate.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
JUnitTest 的代码也贴了吧~~
package com.jake.hibernate.model;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import com.jake.hibernate.util.HibernateUtil;
public class PersonTest {
static SessionFactory sf = null;
@BeforeClass
public static void beforeClass() {
sf = HibernateUtil.getSessionFactory();
}
@org.junit.Test
public void PersonTest() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Person p = new Person();
Date birthday = new Date();
p.setBirthday(birthday);
p.setName("jake");
session.save(p);
session.getTransaction().commit();
}
@AfterClass
public static void afterClass() {
sf.close();
}
}
OK。测试成功。。。
分享到:
相关推荐
【标题】:“Hibernate知识复习二:组合映射” 在Java Web开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,将数据库中的表映射为Java对象,使得开发者可以像操作普通对象一样操作...
在Hibernate中,可以通过在实体类上添加`@OneToMany`注解来实现这种映射。 2. 实现方式:可以通过外键(FK)或者关联映射表来实现。外键方式直接在多方实体中添加对一方的引用,而关联映射表则是在两个表之间创建一...
**hibernate+spring复习大纲** 在Java Web开发领域,Hibernate和Spring是两个至关重要的框架。Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,而Spring则是一个全面的企业级应用框架,提供了依赖...
本文将深入探讨 Hibernate 中的多对多关联映射,这是一个复杂但常见的数据模型关系,适用于那些两个实体之间存在多个对应关系的情况。 首先,我们需要理解多对多关联的基本概念。在数据库设计中,多对多关联意味着...
通过这五天的复习,读者将能够全面了解Hibernate的工作原理,熟练掌握其配置、对象映射和查询操作,为实际项目开发中的数据持久化工作打下坚实基础。此外,学习过程中结合实践案例和问题分析,有助于深化理解和应用...
本复习旨在深入理解Hibernate的核心概念、配置及常用API,帮助开发者提高开发效率。 一、Hibernate概述 Hibernate是Java领域中流行的ORM(Object-Relational Mapping)框架,它通过映射关系数据库与Java类,实现了...
提供的三份上课笔记《上课笔记t1.txt》、《上课笔记.txt》和《上课笔记t3.txt》可能是课堂讲解的精华总结,包含了关键点和实例,是复习和巩固知识的好帮手。 通过学习这些资料,你将能够有效地掌握Hibernate框架,...
1. **对象关系映射(ORM)**:Hibernate是ORM框架的代表之一,它的主要任务是将Java类与数据库表进行映射,使得开发者可以使用面向对象的方式来操作数据库,避免了传统的SQL语句编写,提高了开发效率。 2. **配置文件...
3. **实体类与数据表映射**:在Hibernate中,Java类代表数据库中的表,类的属性对应表的列。例如,一个User类可以映射到users表,User类的属性如id、name和email分别对应users表的ID、NAME和EMAIL字段。 4. **...
- **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法用于删除实体,`merge`方法用于合并实体,`beginTransaction`方法用于开始事务处理。 - **HQL查询创建**:通过`createQuery`方法创建HQL查询接口,`...
11. **Hibernate工具**:如Hibernate逆向工程,可以自动生成实体类和映射文件,简化开发过程。 通过这四天的学习,读者将全面了解Hibernate的核心概念,掌握其基本操作,并具备在实际项目中应用Hibernate的能力。...
在Hibernate中,业务对象被定义为Java实体类,而实体类与数据库表之间的关系则通过映射文件(通常是XML或注解形式)进行描述。例如,`@Entity`表示这是一个实体类,`@Table`指定对应的数据库表,`@Id`标记主键字段,...
**标题:“Hibernate_使用示例代码”** **描述:** 这篇资源主要提供了关于Hibernate框架的实战应用示例,作者在iteye...对于初学者,这是一个很好的起点,对于有经验的开发者,也是复习和巩固Hibernate技能的好材料。
### Hibernate 3.6.0.Final 参考手册知识点概览 #### 1. 教程 **1.1 第一部分—第一...这些知识点不仅对初学者了解Hibernate的基本用法非常有帮助,对于已经有一定经验的开发者来说也是很好的复习和深入学习的机会。
HBM(Hibernate Mapping)文件用于定义实体类与数据库表之间的映射,而DDL(Data Definition Language)用于自动生成数据库表结构。通过配置`hbm2ddl.auto`属性,可以控制是否在启动时自动生成或更新数据库表。 ###...
2. 创建映射文件(Hibernate Mapping File):XML文件用于定义实体类与数据库表的映射关系。 3. 配置Hibernate:设置数据库连接信息、SessionFactory等。 4. 实现持久化操作:保存、查询、更新和删除实体。 003---...
"SVSE-S3冲刺题-Hibernate笔试题"这个标题表明这是一个针对SVSE(可能是软件版本、课程阶段或某个特定考试体系的缩写)第三阶段的冲刺复习资料,重点是Hibernate相关的笔试题目。Hibernate是一个开源的对象关系映射...
Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑的实现,而非繁琐的SQL语句编写。本资源包“hibernate学习必用”正是针对Hibernate的学习...
接下来,Hibernate是一个对象关系映射(ORM)框架,它使得开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL语句。Hibernate通过实体类和数据库表进行关联,通过SessionFactory创建Session,再通过...
通过学习这个"hibernate操作视频",你将能够熟练配置Hibernate,理解其基本操作,并能在实际项目中运用。对于初学者来说,这是一个很好的起点,而对于有经验的开发者,也是一个复习和巩固知识的好资源。希望你在观看...