1.單一主鍵
assigned?由java應(yīng)用程序負(fù)責(zé)生成(手工賦值)
(2)native 由底層數(shù)據(jù)庫自動(dòng)生成標(biāo)示符,如果是MySQL就是auto_increment并徘,如果是Oracle就是sequence遣钳,等等
assigned注意:如果實(shí)體類中設(shè)置的主鍵id是基本類型int的話,則可以不用賦值饮亏,系統(tǒng)默認(rèn)值為0耍贾;如是引用類型Integer話,則默認(rèn)值為null路幸,不賦值系統(tǒng)則報(bào)錯(cuò)荐开。
native注意:系統(tǒng)會(huì)自動(dòng)選擇該數(shù)據(jù)庫對應(yīng)的自動(dòng)增值方式,從1開始简肴。即使手動(dòng)給他賦值晃听,也不會(huì)起作用,但也不會(huì)報(bào)錯(cuò)砰识。
2.基本類型
3.對象類型
向數(shù)據(jù)庫中存入一個(gè)照片的方法
? Students s = new Students(1, "張三豐", "男", new Date(), "武當(dāng)山");
??//先獲得照片文件
??File f = new File("S:"+File.separator+"1.png");
??//獲得文件的輸入流
??InputStream input = new FileInputStream(f);
??//創(chuàng)建一個(gè)Blob對象
??Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available());
??//設(shè)置照片屬性
??s.setPicture(image);
??//保存學(xué)生
??session.save(s);
從數(shù)據(jù)庫中讀取一個(gè)照片的操作
? Students s = (Students)session.get(Students.class, 1);
??//獲得Blob對象
??Blob image = s.getPicture();
??//獲得照片的輸入流
??InputStream input = image.getBinaryStream();
??//創(chuàng)建輸出流
??File f = new File("S:"+File.separator+"demo.png");
??OutputStream output = new FileOutputStream(f);
??//創(chuàng)建緩沖區(qū)
??byte[] buff = new byte[input.available()];
??input.read(buff);
??output.write(buff);
??input.close();
??output.close();
4.組鍵屬性
有類如下:
public class Address {
?????????private String postcode;
???????? private String phone;
???????? private String address;}數(shù)據(jù)庫有一屬性為Address能扒,則映射文件中:
<component name="address" class="Address(有時(shí)需要加包名)">
<property name="postcode" column="POSTCODE"></property>
<property name="phone" column="PHONE"></property>
?<property name="address" column="ADDRESS"></property>?</component>
5.單表CRUD操作
增加(Create)、讀取查詢(Retrieve)辫狼、更新(Update)和刪除(Delete)初斑,增刪改查CRUD
save
update
delete
get / load(查詢單個(gè)記錄)
get與load區(qū)別:
在不考慮緩存的情況下,get方法會(huì)在調(diào)用之后立即向數(shù)據(jù)庫發(fā)出sql語句膨处,返回持久化對象见秤,
load方法會(huì)在調(diào)用后返回一個(gè)代理對象,
該代理對象只保存了實(shí)體對象的id真椿,直到使用對象的非主鍵屬性時(shí)才會(huì)發(fā)出sql語句鹃答,
查詢數(shù)據(jù)庫中不存在的數(shù)據(jù)時(shí),get返回null突硝,load拋出異常测摔。