本文内容来自尚硅谷,代码来自Hibernate总结(四)--session缓存中1.4创建的helloworld代码基础上编写代码
目录
7.2.1创建一个新的映射关系文件Worker.hbm.xml
1hibernate-mapping元素属性介绍
1.1总体介绍下所有属性及其用法。
其中红色代表要讲的,蓝色代表暂时不讲。
1.2package用法
2class元素
2.1总体说一下所有属性的
红色的属性前面都已经遇到了,就不一一说了
3id元素
3.1id所有的属性介绍
4generator元素
4.1元素介绍
4.2生成主键的策略选择、
及用不同的方式来生成主键。一般选择native,有系统自动选择哪种生成方式,便于移植代码。
native标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器.
4.3increment 标识符生成器
4.4identity 标识符生成器
4.5sequence 标识符生成器
4.6hilo 标识符生成器
4.7native 标识符生成器
5property元素
5.1各个属性介绍
5.2formula属性介绍
5.2.1映射文件添加配置
这是一个派生属性,及数据库中的news表中没有列明为desc的列
5.2.2pojo中增加desc属性
5.2.3在hibernateTest中添加test方法
能够得到desc的值了
6hibernate映射类型及sql类型之间的对应关系
6.1整体介绍下
6.2单独说一下日期
6.2.1概述
6.2.2实际使用方式
在 Java 中, 代表时间和日期的类型包括: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java.util.Date 类的子类: java.sql.Date, java.sql.Time 和 java.sql.Timestamp, 这三个类分别和标准 SQL 类型中的 DATE, TIME 和 TIMESTAMP 类型对应
<property name="date" type="timestamp">
<column name="DATE" />
</property>
<property name="date" type="data">
<column name="DATE" />
</property>
<property name="date" type="time">
<column name="DATE" />
</property>
6.3以下情况必须显示的指定hibernate映射类型
6.4单独说一下大对象类型
6.4.1修改映射文件
6.4.2在hibernatetest中创建一个test
6.4.3显示效果
点击
通常数据库只保存图片路径,不用来直接保存图片
6.4.4查询存放到数据库的图片信息
@Test
public void testBlob() throws Exception{
News news = (News) session.get(News.class, 1);
Blob image = news.getImage();
InputStream in = image.getBinaryStream();
System.out.println(in.available());
}
7component元素
7.1概念介绍
7.2实例
7.2.1创建一个新的映射关系文件Worker.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-1-2 16:14:33 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="com.atguigu.hibernate.entities">
<class name="Worker" table="WORKER">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<!-- 映射组成关系 -->
<component name="pay" class="Pay">
<!-- 指定组成关系的组件的属性 -->
<property name="monthlyPay" column="MONTHLY_PAY"></property>
<property name="yearPay" column="YEAR_PAY"></property>
<property name="vocationWithPay" column="VOCATION_WITH_PAY"></property>
</component>
</class>
</hibernate-mapping>
7.2.2创建一个Worker的pojo
package com.atguigu.hibernate.entities;
public class Worker {
private Integer id;
private String name;
private Pay pay;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Pay getPay() {
return pay;
}
public void setPay(Pay pay) {
this.pay = pay;
}
}
7.2.3创建一个pay的pojo
package com.atguigu.hibernate.entities;
public class Pay {
private int monthlyPay;
private int yearPay;
private int vocationWithPay;
public int getMonthlyPay() {
return monthlyPay;
}
public void setMonthlyPay(int monthlyPay) {
this.monthlyPay = monthlyPay;
}
public int getYearPay() {
return yearPay;
}
public void setYearPay(int yearPay) {
this.yearPay = yearPay;
}
public int getVocationWithPay() {
return vocationWithPay;
}
public void setVocationWithPay(int vocationWithPay) {
this.vocationWithPay = vocationWithPay;
}
}
7.2.4在hibernatetest中新建一个test
@Test
public void testComponent(){
Worker worker = new Worker();
Pay pay = new Pay();
pay.setMonthlyPay(1000);
pay.setYearPay(80000);
pay.setVocationWithPay(5);
worker.setName("ABCD");
worker.setPay(pay);
session.save(worker);
}
7.2.5效果
这三列值就保存进去了