1.单一主键
assigned 由java应用程序负责生成(手工赋值)
(2)native 由底层数据库自动生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是sequence,等等
assigned注意:如果实体类中设置的主键id是基本类型int的话,则可以不用赋值,系统默认值为0;如是引用类型Integer话,则默认值为null,不赋值系统则报错。
native注意:系统会自动选择该数据库对应的自动增值方式,从1开始。即使手动给他赋值,也不会起作用,但也不会报错。
2.基本类型
3.对象类型
向数据库中存入一个照片的方法
Students s = new Students(1, "张三丰", "男", new Date(), "武当山");
//先获得照片文件
File f = new File("S:"+File.separator+"1.png");
//获得文件的输入流
InputStream input = new FileInputStream(f);
//创建一个Blob对象
Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available());
//设置照片属性
s.setPicture(image);
//保存学生
session.save(s);
从数据库中读取一个照片的操作
Students s = (Students)session.get(Students.class, 1);
//获得Blob对象
Blob image = s.getPicture();
//获得照片的输入流
InputStream input = image.getBinaryStream();
//创建输出流
File f = new File("S:"+File.separator+"demo.png");
OutputStream output = new FileOutputStream(f);
//创建缓冲区
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;}数据库有一属性为Address,则映射文件中:
<component name="address" class="Address(有时需要加包名)">
<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(查询单个记录)
get与load区别:
在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象,
load方法会在调用后返回一个代理对象,
该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句,
查询数据库中不存在的数据时,get返回null,load抛出异常。
网友评论