映射基础

(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”就行。

转载于:https://blog.51cto.com/yt0116/1729597

Hibernate学习(三)相关推荐

  1. Hibernate学习总结【比较与Mybatis框架之间的区别】

    经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...

  2. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  3. Hibernate学习记录

     Hibernate是一个关于java方面的ORM(Object/Relation Mapping,对象关系映射)框架. ORM的思想:主要实现的功能就是将关系数据库中表的记录应映射成对象,以对象的形 ...

  4. hibernate学习笔记(总结)

    hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...

  5. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  6. Hibernate学习笔记Session.evict(user)方法

    @[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...

  7. 统计学习三要素 模型+策略+算法

    统计学习方法都是由模型. 策略和算法构成的. 即统计学习方法由三要素构成, 可以简单地表示为:方法=模型+策略+算法 模型 统计学习首要考虑的问题是学习什么样的模型. 在监督学习过程中, 模型就是所要 ...

  8. 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站竟因「太火」而下线...

    机器之心报道 作者:魔王.杜伟 想不想在动画电影中拥有自己的角色?这个网站一键满足你的需求,不过竟因流量太大成本过高而下线. 近期热映的电影<花木兰>总是让人回想起 1998 年上映的同名 ...

  9. 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚

    点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...

  10. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

最新文章

  1. 到底有多火?三家单位争抢发布,谷歌、清华、牛津同时提超越注意力的新机制...
  2. PHPTree——快速生成无限多级分类
  3. 2021重庆黔江中学高考成绩查询,2020年重庆黔江三所高中排名公告
  4. == 和 is 的区别
  5. 前端学习(3006):vue+element今日头条管理--实现基本登录功能
  6. 通向KDE4之路(十一):Amarok2开辟起步
  7. C语言数组及相关函数
  8. 计算机网络应用基础试题6,计算机网络应用基础试题
  9. UniFi AP 5.5.20的基本使用与设置(普通漫游和无缝漫游)
  10. C语言链表详解(通俗易懂)
  11. 好用的轻量级http接口测试工具(替代PostMan)
  12. 马云留给阿里的财富:4个应用场景落地+90个区块链专利
  13. Epicor系统二次开发
  14. unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...
  15. 射频识别技术软硬件系统研制
  16. 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
  17. 再度盈利,搜狐稳了?
  18. PHPWAMP乱码一键解决,PHP乱码通用解决方案/网站乱码的多种原因分析
  19. 读《图解密码技术》(三):密钥、随机数和应用技术
  20. iOS 内购的最新讲解

热门文章

  1. RocketMQ-手把手教你搭建集群
  2. 今天刚学的idea的debug打断点,Ctrl+u进入Evaluate Expression界面,调试程序事半功倍!
  3. 一分钟搞定Java环境变量配置
  4. git切换到旧版本_github上怎么切换到某次提交?
  5. 神策数据:从技术视角看,如何更多、更好、更快地实施A/B试验
  6. 神策数据斩获大数据星河奖,首发用户行为分析标准
  7. 【PPT 下载】神策 2017 数据驱动大会干货限时分享!
  8. Unity重置Animator到初始状态和重复播放同一个Animation
  9. 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解
  10. 《Selenium自动化测试指南》—第1章1.1节自动化测试基础