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

来源:互联网 发布:儿童冬季服装淘宝网 编辑:程序博客网 时间:2024/06/05 05:16

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