过一下hibernate4-4

一. Hibernate 中四种对象状态
  • 临时状态(transient):刚用 new 语句创建,还没有被持久化,并且不处于 Sesssion 的缓存中。处于临时状态的 Java 对象被称为临时对象。
  • 持久化状态(persistent):已经被持久化,并且加入到 Session 的缓存中。处于持久化状态的 Java 对象被称为持久化对象。
  • 删除状态(removed):不再处于 Session 的缓存中,并且 Session 已经计划将其从数据库中删除。处于删除状态的 Java 对象被称为删除对象。
  • 游离状态(detached):已经被持久化,但不再处于 Session 的缓存中。处于游离状态的 Java 对象被称为游离对象。

在这里插入图片描述

二. Session的常用方法
  1. save()方法,将一个临时对象转变成持久化对象。
  2. load()方法和get()方法:

都是根据 OID 从数据库中加载一个持久化对象。
区别 1:假如数据库中不存在与 OID 对应的记录,load()方法会抛出异常,而get()方法返回 null。
区别 2:load()方法默认采用延迟加载策略(适合用于删除),get()方法采用立即检索策略(适合用于读取属性值)。

  1. update()方法将一个游离对象转变为持久化对象。
  2. saveOrUpdate()方法包含了save()和update()方法。
  3. merge()方法,合并对象。防止session中出现OID相同的对象需要更新的情况。
  4. delete()方法,删除对象。
三. 类型映射
  1. 基本类型映射
Hibernate 映射类型Java 类型标准 SQL 类型
integerjava.lang.IntegerINTEGER
longjava.lang.LongBIGINT
shortjava.lang.ShortSMALLINT
floatjava.lang.FloatFLOAT
doublejava.lang.DoubleDOUBLE
big_decimaljava.math.BigDecimalNUMERIC
characterjava.lang.StringCHAR(1)
stringjava.lang.StringVARCHAR
bytebyte 或 java.lang.ByteTINYINT
booleanboolean 或 java.lang.BooleanBIT
yes_noboolean 或 java.lang.BooleanCHAR(1)(‘Y’或’N’)
true_falseboolean 或 java.lang.BooleanCHAR(1)(‘Y’或’N’)
datejava.util.Date 或 java.sql.DateDATE
timejava.util.Date 或 java.sql.TimeTIME
timestampjava.util.Date 或 java.sql.TimestampTIMESTAMP
calendar_datejava.util.CalendarDATE
binarybyte[]VARBINARY 或 BLOB
textjava.lang.StringCLOB
serializablejava.io.Serializable 实例VARBINARY 或 BLOB
clobjava.sql.ClobCLOB
blobjava.sql.BlobBLOB
classjava.lang.ClassVARCHAR
localejava.util.LocaleVARCHAR
timezonejava.util.TimeZoneVARCHAR
currencyjava.util.CurrencyVARCHAR
  • 实体类
import java.sql.Blob;
import java.util.Date;

public class Book {

	private int id;
	private String bookName; // 图书名称
	private float price; // 图书价格
	private boolean specialPrice; // 是否是特价
	private Date publishDate; // 发布日期
	private String author; // 作者
	private String introduction; // 简介
	private Blob bookPic; // 图书图片
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public boolean isSpecialPrice() {
		return specialPrice;
	}
	public void setSpecialPrice(boolean specialPrice) {
		this.specialPrice = specialPrice;
	}
	public Date getPublishDate() {
		return publishDate;
	}
	public void setPublishDate(Date publishDate) {
		this.publishDate = publishDate;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getIntroduction() {
		return introduction;
	}
	public void setIntroduction(String introduction) {
		this.introduction = introduction;
	}
	public Blob getBookPic() {
		return bookPic;
	}
	public void setBookPic(Blob bookPic) {
		this.bookPic = bookPic;
	}

}
  • 配置文件Book.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.bee.model">

	<class name="Book" table="t_book">
		<id name="id" column="bookId">
			<generator class="native"></generator>
		</id>
		
		<property name="bookName" column="bookName" length="40"></property>
		<property name="price" column="price" type="float"></property>
		<property name="specialPrice" column="specialPrice" type="boolean"></property>
		<property name="publishDate" column="publishDate" type="date"></property>
		<property name="author" column="author" length="20"></property>
		<property name="introduction" column="introduction" type="text"></property>
		<property name="bookPic" column="bookPic" type="blob"></property>
	</class>

</hibernate-mapping>
  • 测试
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务

Book book=new Book();
book.setBookName("java编程思想");
book.setPrice(100);
book.setSpecialPrice(true);
book.setPublishDate(new SimpleDateFormat("yyyy-MM-dd").parse("2013-1-1"));
book.setAuthor("埃克尔");
book.setIntroduction("简介...");

LobHelper lobHelper=session.getLobHelper();
InputStream in=new FileInputStream("c://java编程思想.jpg");
Blob bookPic=lobHelper.createBlob(in, in.available());
book.setBookPic(bookPic);

session.save(book);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
  1. 集合类型映射
类型说明
Set无序,元素不可重复。
List有序,元素可重复。
Bag无序,元素可重复。
Map键值对

class标签中

实体类属性
private Set<String> images; //元素不可重复
对应xml配置
<set name="images" table="t_image">
	<!-- 外键 -->
	<key column="studentId"></key>
	<element column="imageName" type="string"></element>
</set>
---------------------------------------------------------------------
实体类属性
private List<String> images;
对应xml配置
<list name="images" table="t_image2">
	<!-- 外键 -->
	<key column="studentId"></key>
	<list-index column="imageIndex"></list-index> 保证有序
	<element column="imageName" type="string"></element>
</list>
---------------------------------------------------------------------
实体类属性
private List<String> images;
对应xml配置
<idbag name="images" table="t_image3">
	<collection-id type="long" column="imageId">
		<generator class="increment"></generator>
	</collection-id>
	<key column="studentId"></key>
	<element column="imageName" type="string"></element>
</idbag>
---------------------------------------------------------------------
实体类属性
private Map<String,String> images;
对应xml配置
<map name="images" table="t_image4">
	<key column="studentId"></key>
	<map-key column="imageKey" type="string"></map-key>
	<element column="imageName" type="string"></element>
</map>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值