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学习(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码优化之减少重复代码-实践
- 下一篇: css3中的变形(transform)、