Hibernate 基本类型

这里介绍几个特殊的 Hibernate 类型和属性

一、日期类型

我们的 Student 类有一个成员变量 birthday
  1. private Date birthday;//出生日期
在我们的 Studnet.hbm.xml 对应的是自动生成的 属性
  1. <property name="birthday" type="java.util.Date">
  2.     <column name="BIRTHDAY" />
  3. </property>
type 表示该字段的类型,不同的类型,会让数据表的字段类型也不同
type(映射类型) 描述
java.util.Date 年月日时分秒(2017-07-25 18:20:12)
date 年月日(2017-07-25)
time 时分秒(18:20:12)
timestamp 年月日时分秒(2017-07-25 18:20:12)

二、对象类型

我们这里使用使用 Blob 类型存照片 1、Student 类中 成员变量如下
  1. private int sid;//学号
  2. private String name;//姓名
  3. private int sex;//性别
  4. private Date birthday;//出生日期
  5. private String address;//地址
  6. private Blob picture;//照片   
2、然后删除原来的 Student.hbm.xml  文件,重新生成 3、在测试类添加 testWriteBlob方法
  1. @Test
  2. public void testWriteBlob() throws Exception {
  3.     Student s = new Student(1,"杜甫",1,new Date(),"四川");
  4.     //先获得照片文件
  5.     File f = new File("d:"+File.separator+"boy.jpg");
  6.     //获得照片文件的输入流
  7.     InputStream input = new FileInputStream(f);
  8.     //创建Blob对象
  9.     Blob image = Hibernate.getLobCreator(session).createBlob(input,input.available());
  10.     //设置照片属性
  11.     s.setPicture(image);
  12.     session.save(s);
  13. }
注意:这里 Blob 是 java.sql.Blob 包下 4、然后使用 Junit Test 运行 testWriteBlob 方法 5、为了证明是否真的是写入数据库中,我们重新把照片读出来 在测试类中添加 testReadBlob 方法
  1. @Test
  2. public void testReadBlob() throws Exception {
  3.     Student s = (Student)session.get(Student.class1);
  4.     //获得Blob对象
  5.     Blob image = s.getPicture();
  6.     //获得照片的输入流
  7.     InputStream input = image.getBinaryStream();
  8.     //创建输出流
  9.     File f = new File("d:"+File.separator+"dest.jpg");
  10.     //获得输出流
  11.     OutputStream output = new FileOutputStream(f);
  12.     //创建缓冲区
  13.     byte[] buff = new byte[input.available()];
  14.     input.read(buff);
  15.     output.write(buff);
  16.     input.close();
  17.     output.close();
  18. }
6、使用 Junit Test 运行 testReadBlob 方法 我们可以看到 D 盘,已经生成了一张新照片,dest.jpg  

三、组件属性

实体类中某个属性属于用户自定义的类的对象,下面我们通过一个例子来解释 1、实体类 Student.java 成员变量如下
  1. private int sid;//学号
  2. private String name;//姓名
  3. private int sex;//性别
  4. private Date birthday;//出生日期
  5. //private String address;//地址
  6. private Blob picture;//照片   
  7. private Address address; //地址
我们这里把之前的 String 类型的 address 改成 Address 类型 2、Address 类 部分代码如下
  1. private String postcode;//邮编
  2. private String phone;//手机
  3. private String address;//地址
  4. public Address(String postcode, String phone, String address) {
  5.         this.postcode = postcode;
  6.         this.phone = phone;
  7.         this.address = address;
  8. }
3、修改 Student.hbm.xml 将之前的
  1. <property name="address" type="java.lang.String">
  2.          <column name="ADDRESS" />
  3. </property>
改成
  1. <component name="address" class="Address">
  2.     <property name="postcode" column="POSTCODE"/>
  3.     <property name="phone" column="PHONE"/>
  4.     <property name="address" column="ADDRESS"/>
  5. </component>
注意:单词不要打错 4、修改 测试类 testSaveStudent 代码
  1. @Test
  2.    public void testSaveStudnets() {
  3.     //生成学生对象
  4.     Student s = new Student();
  5.     s.setName("陶渊明");
  6.     s.setSex(1);
  7.     s.setBirthday(new Date());
  8.     //s.setAddress("江西九江");
  9.     Address address = new Address("332000","13512345678","江西九江");
  10.     s.setAddress(address);
  11.     session.save(s);//保存对象进入数据库
  12.    }
5、修改 hibernate.cfg.xml 里的创建表的策略 因为要修改表结构,暂且把 update 改成 create 6、用 Junit Test 运行 testSaveStudent 方法 运行成功,查看数据表 查看 表结构   本文链接:https://liuyanzhao.com/5396.html

发表评论

目前评论:2