Hibernate单表映射

一、单一主键

单一主键:指表中由某一列来充当主键

  assigned 由java应用程序负责生成(手工赋值)

  native 由底层数据库自动生成提示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。另外,即使手动赋值主键,也不会起作用。

   <generator class="native" />mysql 中为AUTO_INCREMENT PRIMARY KEY

 

二、基本类型

  Hibernate基本数据类型 前两列比较常用,例如在配置文档中的type就经常使用这些。

  date 表示日期:YYYY-MM-dd

  time 表示时间:hh:mm:ss

  tiemstamp时间戳: yyyy-MM-dd hh:mm:ss

  另外,映射的数据类型设置会决定最后数据库中的类型。 比如我们在Java程序中使用的是java.util.Date类型定义变量Birthday。但在映射关系的配置文档中对应的type改成date类型,那么最后保存在数据库的Birthday类型就是date,也就是YYYY-MM-dd,而非java.util.Date(或者timestamp)的YYYY-MM-dd hh:mm:ss。

  

  

 

三、对象类型

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();
}
写入、读取照片

 

四、组件属性

组件属性:实体类中的某个属性属于用户自定义类的对象;

作用:将两个实体类合并在一起组建成一个表 在hbm.xml文件中配置:

格式:

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

    <property name="类中属性" column="对应生成数据库中列属性名">

   </component>

 

五、get和load和区别

1.在不考虑缓存的情况下,get调用后立即发出sql语句,并返回对象。load调用后返回代理对象,保存了实体对象id,直到使用了对象的非主键属性时才发出sql语句

2.当查询到数据为空时,get返回null,load返回objectNotFound异常

 

 

 

posted @ 2018-12-05 16:16  silence丶秋枫  阅读(154)  评论(0编辑  收藏  举报