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”就行。
转载于:https://blog.51cto.com/yt0116/1729597
Hibernate学习(三)相关推荐
- Hibernate学习总结【比较与Mybatis框架之间的区别】
经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...
- Hibernate学习之Hibernate注解总结
Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...
- Hibernate学习记录
Hibernate是一个关于java方面的ORM(Object/Relation Mapping,对象关系映射)框架. ORM的思想:主要实现的功能就是将关系数据库中表的记录应映射成对象,以对象的形 ...
- hibernate学习笔记(总结)
hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...
- 马士兵Hibernate学习笔记
马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...
- Hibernate学习笔记Session.evict(user)方法
@[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...
- 统计学习三要素 模型+策略+算法
统计学习方法都是由模型. 策略和算法构成的. 即统计学习方法由三要素构成, 可以简单地表示为:方法=模型+策略+算法 模型 统计学习首要考虑的问题是学习什么样的模型. 在监督学习过程中, 模型就是所要 ...
- 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站竟因「太火」而下线...
机器之心报道 作者:魔王.杜伟 想不想在动画电影中拥有自己的角色?这个网站一键满足你的需求,不过竟因流量太大成本过高而下线. 近期热映的电影<花木兰>总是让人回想起 1998 年上映的同名 ...
- 2020届 AAAI Fellow名单新鲜出炉!!!深度学习三巨头终于齐聚
点击上方"深度学习技术前沿",选择"星标"公众号 资源干货,第一时间送达 AAAI 是国际人工智能领域最权威的学术组织,Fellow 是该学会给予会员的最高荣誉 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
最新文章
- 到底有多火?三家单位争抢发布,谷歌、清华、牛津同时提超越注意力的新机制...
- PHPTree——快速生成无限多级分类
- 2021重庆黔江中学高考成绩查询,2020年重庆黔江三所高中排名公告
- == 和 is 的区别
- 前端学习(3006):vue+element今日头条管理--实现基本登录功能
- 通向KDE4之路(十一):Amarok2开辟起步
- C语言数组及相关函数
- 计算机网络应用基础试题6,计算机网络应用基础试题
- UniFi AP 5.5.20的基本使用与设置(普通漫游和无缝漫游)
- C语言链表详解(通俗易懂)
- 好用的轻量级http接口测试工具(替代PostMan)
- 马云留给阿里的财富:4个应用场景落地+90个区块链专利
- Epicor系统二次开发
- unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...
- 射频识别技术软硬件系统研制
- 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
- 再度盈利,搜狐稳了?
- PHPWAMP乱码一键解决,PHP乱码通用解决方案/网站乱码的多种原因分析
- 读《图解密码技术》(三):密钥、随机数和应用技术
- iOS 内购的最新讲解
热门文章
- RocketMQ-手把手教你搭建集群
- 今天刚学的idea的debug打断点,Ctrl+u进入Evaluate Expression界面,调试程序事半功倍!
- 一分钟搞定Java环境变量配置
- git切换到旧版本_github上怎么切换到某次提交?
- 神策数据:从技术视角看,如何更多、更好、更快地实施A/B试验
- 神策数据斩获大数据星河奖,首发用户行为分析标准
- 【PPT 下载】神策 2017 数据驱动大会干货限时分享!
- Unity重置Animator到初始状态和重复播放同一个Animation
- 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解
- 《Selenium自动化测试指南》—第1章1.1节自动化测试基础