一、单一主键
单一主键:指表中由某一列来充当主键
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异常