Hibernate学习(三)

映射基础

(1)基本实体映射技术

类和表映射

<hibernate-mapping package="hibernate.test.domain">

<class name="Student" table="student" lazy="true">

</class>

</hibernate-mapping>

主键映射

<id name="id">

<generator class="uuid"/>

</id>

普通字段映射

<property name="sNo" column="sno" not-null="true"  type="java.lang.String"></property>

(2)多个字段作为主键

第一步:建立实体(Book)

多个字段作为主键时,需要重新建一个类,包含作为主键的各个字段。在这里命名为BookName。

//多个字段做主键

//Composite-id class must implement Serializable

public class BookName implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

private String name;

private String author;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public BookName() {

super();

// TODO Auto-generated constructor stub

}

public BookName(String name, String author) {

super();

this.name = name;

this.author = author;

}

}

Book类:

package hibernate.test.domain;

public class Book {

private BookName id;

private String shortShow;

private String picture;

private String content;

public void setId(BookName id) {

this.id = id;

}

public BookName getId() {

return id;

}

public String getShortShow() {

return shortShow;

}

public void setShortShow(String shortShow) {

this.shortShow = shortShow;

}

public String getPicture() {

return picture;

}

public void setPicture(String picture) {

this.picture = picture;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

第二步: 映射文件(Book.hbm.xml)

<?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="hibernate.test.domain">

<class name="Book" table="Book" lazy="true">

<composite-id name="id" class="BookName">

<key-property name="name" type="java.lang.String" column="name"></key-property>

<key-property name="author" type="java.lang.String" column="author"></key-property>

</composite-id>

<property name="shortShow" column="shortShow" type="java.lang.String"></property>

<property name="picture" column="picture" type="java.lang.String"></property>

<property name="content" column="content" type="java.lang.String"></property>

</class>

</hibernate-mapping>

第三步:配置文件

在mapping下添加映射文件位置:

<mapping resource="hibernate/test/xml/Book.hbm.xml"></mapping>

第四部:测试  插入数据

public static void main(String[] args) {

Session session=null;

Transaction tx=null;

try {

session=HibernateUtil.getSession();

tx=session.beginTransaction();

BookName bookName=new BookName("快乐是本","ytt");

Book book=new Book();

book.setId(bookName);

book.setPicture("http://");

book.setShortShow("简单介绍");

book.setContent("介绍内容");

session.save(book);

tx.commit();

} catch (Exception e) {

// TODO: handle exception

if(tx!=null)

tx.rollback();

}

finally{

if(session!=null)

session.close();

}

}

数据库验证,插入成功!

(3)组合关系映射(会产生很多冗余数据,大多还是通过一对多,多对多进行设计)

第一步 类的建立

public class Address {

private String city;

private String street;

private String zipcode;

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getStreet() {

return street;

}

public void setStreet(String street) {

this.street = street;

}

public String getZipcode() {

return zipcode;

}

public void setZipcode(String zipcode) {

this.zipcode = zipcode;

}

public Address(String city, String street, String zipcode) {

super();

this.city = city;

this.street = street;

this.zipcode = zipcode;

}

public Address() {

super();

// TODO Auto-generated constructor stub

}

//组合关系测试

public class Person {

private int id;

private String name;

private Address address;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Address getAddress() {

return address;

}

public void setAddress(Address address) {

this.address = address;

}

}

第二步 映射文件

<?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="hibernate.test.domain">

<class name="Person" table="Person" lazy="true">

<id name="id">

<generator class="native"></generator>

</id>

<property name="name"></property>

<component name="address" class="Address">

<property name="city"></property>

<property name="street"></property>

<property name="zipcode"></property>

</component>

</class>

</hibernate-mapping>

第三步 配置文件

<mapping resource="hibernate/test/xml/Person.hbm.xml"></mapping>

第四步 测试

public static void main(String[] args) {

// TODO Auto-generated method stub

Session session=null;

Transaction tx=null;

try {

session=HibernateUtil.getSession();

tx=session.beginTransaction();

Address address=new Address("郑州", "商都路G107国道", "0371");

Person person=new Person();

person.setName("ytt");

person.setAddress(address);

session.save(person);

tx.commit();

} catch (Exception e) {

// TODO: handle exception

if(tx!=null)

{

tx.rollback();

}

}

finally{

session.close();

}

}

实际上是一张表,插入语句时这个:

Hibernate: insert into Person (name, city, street, zipcode) values (?, ?, ?, ?)

(4)大对象映射

Clob 文本大对象 最长4G

Blob 二进制数据大对象 最长4G

这个也不是很常用,就像其他类型一样使用,在映射文件中,type改为“java.sql.Blob/Clob”就行。

时间: 2024-10-01 04:39:16

Hibernate学习(三)的相关文章

Hibernate学习(三)

一.对象识别 对数据库而言,其实别一条记录唯一性的方式是根据主键的值,如果手上有两条记录,他们拥有相同的主键值,则它们在数据库中代表同一个对象的记录 对于Java而言,要识别两个对象是否为同一个对象有两种方法 内存地址识别("==")识别 根据equals().hasCode()中的定义 ? (默认Object类中的equals(Object o)方法也是按内存地址来比较的),源码如下: public boolean equales(Object obj){ return (this

【Hibernate学习】 ——ORM(三)

前面几种关系我们以前就经常用,对于继承我们也并不陌生,经常接触的类与类之间的继承用extends关键字,那么在表与表的关系中如何表示呢?下面我们来讲继承映射. 继承有三种实现的策略,单表继承,具体表继承,类表继承.下面来分析一下这三种方式 继承关联类关系  单表继承 每棵类继承树使用一个表,可知,这三个类在一张表中.如下表: 这张表包括了父类,子类的所有属性,通过Type来区分是哪个子类. 对象模型映射到关系模型: <classname="com.bjpowernode.hibernat.

Hibernate学习一:Hibernate注解CascadeType

http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hibernate学习一:Hibernate注解CascadeType 博客分类: Hibernate hibernate 一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理.从中抽象出一个多对多的例子user-bar. 主控方user:多对多里面里面会有第三张表user_b

【Hibernate学习】 ——ORM(一)

Hibernate是一种能实现ORM的框架.ORM即Object Relational Mapping,对象关系映射.也就是将关系数据库中表的数据映射成为对象,也就是说将表与表之间的操作映射成对象与对象之间的操作,通过实体类来达到操作表的目的.总之就是把对数据库的操作转化为对对象的操作,从而更体现了面向对象的思想. 一对一关联映射策略包括主键关联和唯一外键关联. 单向一对一 主键关联 让两个对象有相同的主键值,表名它们之间的一对一关系,数据库没有额外的字段来维护它们之间的关系,仅仅通过表的主键来

u-boot学习(三):u-boot源码分析

建立域模型和关系数据模型有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度 Hibernate 把持久化类的属性分为两种: 值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期 实体(entity)类型: 有 OID, 可以被单独持久化, 有独立的生命周期(如果实体类型包含值类型,这个值类型就

[原创]java WEB学习笔记88:Hibernate学习之路-- -Hibernate检索策略(立即检索,延迟检索,迫切左外连接检索)

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

【Hibernate学习】 ——ORM(二)

上篇博客主要介绍了一对一的关系,主要理解单向与双向的区别,主键关联与唯一外键关联的区别.下面继续介绍一对多与多对多关联. 一对多关联映射 一个班级对应多个学生 单向一对多关系 关系表: classes代码 <classname="com.bjpowernode.hibernat.Classes"table="t_classes"> <idname="id"> <generatorclass="native&

Hibernate复习(三)配置文件详解

1.hibernate.cfg.xml 2.映射文件Person.hbm.xml Java的实体类是通过配置文件与数据表中的字段相关联.Hibernate在运行时解析配置文件,根据其中的字段名生成相应的SQL语句 a.id属性 <generator>子元素用来设定标识符生成器.Hibernate提供了多种内置的实现. b.property属性 ? name属性:指定持久化类的属性的名字. ? type属性:指定Hibernate或Java映射类型.Hibernate映射类型是Java类型与SQ

[原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

hibernate学习随记

hibernate学习随记: 一:hibernate的核心类和接口 ①  Configuration 类 它的用处是: 读取hibernate.cfg.xml 管理对象关系映射文件 <mapping resource=””> 加载hibernate 的驱动,url ,用户.. 管理hibernate配置信息 ②  hibernate.cfg.xml ③  对象关系映射文件 ④  SessionFactory (会话工厂) 可以缓存sql语句和数据(称为session级缓存)!! 是一个重量级的