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异常

相关文章
相关标签/搜索