Hibernate單表映射

1、單一主鍵java

單一主鍵:指表中由某一列來充當主鍵mysql

  assigned 由java應用程序負責生成(手工賦值)sql

  native 由底層數據庫自動生成提示符,若是是MySQL就是increment,若是是Oracle就是sequence,等等。另外,即便手動賦值主鍵,也不會起做用。數據庫

   <generator class="native" />mysql 中爲AUTO_INCREMENT PRIMARY KEY緩存

 

2、基本類型session

  Hibernate基本數據類型 前兩列比較經常使用,例如在配置文檔中的type就常用這些。ide

  date 表示日期:YYYY-MM-ddspa

  time 表示時間:hh:mm:ss代理

  tiemstamp時間戳: yyyy-MM-dd hh:mm:sscode

  另外,映射的數據類型設置會決定最後數據庫中的類型。 好比咱們在Java程序中使用的是java.util.Date類型定義變量Birthday。但在映射關係的配置文檔中對應的type改爲date類型,那麼最後保存在數據庫的Birthday類型就是date,也就是YYYY-MM-dd,而非java.util.Date(或者timestamp)的YYYY-MM-dd hh:mm:ss。

  

  

 

3、對象類型

1.clob和text對應大文本文件,blob對應大的二進制文件,例如視頻音頻圖片

2.java中的clob對應存儲大文本文件,java中的blob對應存儲大二進制文件

MySQL不支持標準SQL的CLOB類型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT類型來表示長度超過255的長文本數據

 

@Test
public void saveImage() throws Exception {
    Student s = new Student(1, "李四", "男", new Date(), "北京");
    File f = new File("d:" + File.separator + "boy.jpg");
    InputStream input = new FileInputStream(f);
    Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available());
    s.setImage(image);
    session.save(s);
}

@Test
public void readImage() throws Exception {
    Student s = (Student) session.get(Student.class, 1);
    Blob image = s.getImage();
    InputStream input = image.getBinaryStream();
    File f = new File("d:" + File.separator + "girl.jpg");
    OutputStream output = new FileOutputStream(f);
    byte[] buff = new byte[input.available()];
    input.read(buff);
    output.write(buff);
    output.close();
    input.close();
}
寫入、讀取照片

 

4、組件屬性

組件屬性:實體類中的某個屬性屬於用戶自定義類的對象;

做用:將兩個實體類合併在一塊兒組建成一個表 在hbm.xml文件中配置:

格式:

  <component name="取的名字" class="類名">

    <property name="類中屬性" column="對應生成數據庫中列屬性名">

   </component>

 

5、get和load和區別

1.在不考慮緩存的狀況下,get調用後當即發出sql語句,並返回對象。load調用後返回代理對象,保存了實體對象id,直到使用了對象的非主鍵屬性時才發出sql語句

2.當查詢到數據爲空時,get返回null,load返回objectNotFound異常

相關文章
相關標籤/搜索