Hibernate入门学习(7)----单表操作总结

本文总结了Hibernate中单表操作的重点,包括如何以Blob类型保存和读取图片,组件属性的设置,以及单表的增删改查操作。详细阐述了save、update、load和get方法的使用,并对比了它们之间的区别。
摘要由CSDN通过智能技术生成

1、以Blob类型保存图片

直接一行代码读懂:

public void testWriteBlob() throws IOException{
            Students s = new Students(2,"jj","男",new Date(),"山大");
            //获得照片文件
            File file = new File("D:"+File.separator+"1.JPG");
            //获得输入流
            FileInputStream input = new FileInputStream(file);
            //创建Blob对象
            Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available());
            //设置照片属性
            s.setPicture(image);
            //保存学生
            session.save(s);
            //前提是在Student类中新建Blob类型的属性picture
        }

2、读取Blob类型的数据

public void testReadBlob() throws SQLException, IOException{
            //获得学生对象,第一个参数学生类的class,第二个参数:主键
            Students s =(Students)session.get(Students.class, 2);
            //获得Blob对象
            Blob image = s.getPicture();
            //获得照片的输入流
            InputStream input = image.getBinaryStream();
            //创建输出流
            File file = new File("D:"+File.separator+"dest.JPG");
            //获得输出流
            FileOutputStream output = new FileOutputStream(file);
            int b;
            while((b = input.read())!=-1){
                output.write(b);
            }
            input.close();
            output.close();
        }

3、组件属性

就是持久化类中的属性有一个是类的对象,这个属性就是组件属性。
组件属性和普通的属性的用法也没有什么不同,唯一不同的连个地方:
1、生成类对象的时候,set这个属性的时候,要先生成这个组件属性的对象,再将这个对象set进去。
2、hbm配置文档:假如之前的adress属性是String类型的,之后的是一个类,然后这个类里有phone、postcode、adress三个属性。

之前的属性:

<property name="address" type="java.lang.String">
          <column name="ADDRESS" />
</property>

之后的属性:

<component name = "address" class="Address">
   <property name ="postcode" column="POSTCODE"></property>
   <property name ="phone" column="PHONE"></property>
   <property name ="address" column="ADDRESS"></property>
</component>

4、单表增删改查的操作

1、 save保存对象

public void testStudents(){
            //生成学生对象
            Students s = new Students(1,"jinjin","男",new Date(),"山科");
            session.save(s);//保存对象到数据库

        }

2、update方法更新表的信息

public void testUpdatestudents(){
//第一个参数是查询表的类类型,第二个参数是主键
Students s =(Students)session.get(Students.class, 2);
s.setName("jiuejie");
session.update(s);
}

3、load方法获取学生对象:

public void testLoadstudents(){
//第一个参数是查询表的类类型,第二个参数是主键
Students s =(Students)session.load(Students.class, 2);
System.out.println(s);

4、Get方法获取学生对象:

public void testGetstudents(){
//第一个参数是查询表的类类型,第二个参数是主键
Students s =(Students)session.get(Students.class, 2);
System.out.println(s);
}

5、delete方法删除学生对象

public void testDeletestudents(){
//第一个参数是查询表的类类型,第二个参数是主键
Students s =(Students)session.get(Students.class, 2);
session.delete(s);
}

6、get方法和load方法的区别

1.在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。
2.load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。
3.查询数据库中不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值