Hibernate原理、配置及单表操作

一、Hibernate的配置文档

  其中:hbm2ddl.auto中的create表示每次修改数据的时候都会删除原有的表,生成新的表结构,原有的数据不再存在;update表示在原有数据的基础上进行更新,不会删除原有的数据。 hibernate.default_schema属性设置成数据库的名称,将数据库设置为默认数据库,这样,SQL语句上都会加上默认数据库的前缀。

二、Hibernate的执行流程

 

  注意:在执行session方法进行表操作的时候要开启一个事务transaction,这些方法都需要封装在事务当中,执行完方法之后需要先提交事务,然后关闭session。

     session可以理解为操作数据库的对象。

     把对象保存在数据库中需要调用session的各种方法,如:save(),update(),delete(),createQuery()等。

三、事务transaction

四、session详解

五、hbm配置文档详解(对象关系映射文件)

  1. 单一主键

    其中,id标签下的子标签generator表示主键的生成策略,经常使用的有两种:

    若生成策略使用assigned,但保存对象进数据库时没有对id进行手工赋值,那么它会使用实体化类中id的初始化值0进行赋值,如果数据表中存在id为0的记录,那么会保存失败。如果生成策略是native,则不用手工赋值,它会采用auto_increment的方式对id进行自动增加,就算手工再赋值也会不起作用。

   2. hibernate的基本类型

    在关系映射文档的type属性中,要么写hibernate类型(第一列),要么写java类型(第二列)。

    3. 对象类型

    添加了两个测试方法,对向数据库写入对象和从数据库读取对象进行了测试,代码如下:

 1     @Test
 2     public void testWriteBlob() throws IOException {
 3         Students s = new Students();
 4         s.setSname("张楚");
 5         s.setGender("男");
 6         s.setBrithday(new Date());
 7         s.setAddress("上海");
 8         File file = new File("D://image.jpg");
 9         InputStream is = new FileInputStream(file);
10         Blob image = Hibernate.getLobCreator(session).createBlob(is, is.available());
11         s.setPictrue(image);
12         session.save(s);
13     }
14     
15     @Test
16     public void testReadBlob() throws Exception {
17         Students s = (Students)session.get(Students.class, 1);
18         Blob image = s.getPictrue();
19         InputStream is = image.getBinaryStream();
20         OutputStream os = new FileOutputStream("d:"+File.separator+"dest.jpg");
21         byte[] buff = new byte[is.available()];
22         int temp;
23         while((temp=is.read(buff, 0, is.available())) != -1) {
24             os.write(buff, 0, temp);
25             os.flush();
26         }
27         /*
28          * 或者可以这样传
29          * in.read(buff);
30          * os.write(buff);
31          */
32         is.close();
33         os.close();
34     }

     4. 组件属性

     假如将之前的Students类的代码中的String address属性更改为一个自己定义的一个Address类,这个类中有三个属性分别是postcode,phone,address,那么这个Address类也需要满足JavaBean的要求,并且在hbm文件中增加如上的配置。(Students类和测试类中也要做相应的修改,在此省略。)

  这时的文件目录 和 新生成的表结构 为:

    5. Hibernate对单表的增删改查操作

      调用session的save()方法可以保存一个对象进入数据库,之前已经演示过。

      查询记录可以使用session的 get 和 load 方法,修改可以使用session的update方法,删除可以使用session的delete方法。测试类中有代码如下:

 1     @Test
 2     public void testGetStudents() {
 3         Students s = (Students)session.get(Students.class, 2);
 4         System.out.println(s);
 5     }
 6     
 7     @Test
 8     public void testLoadStudents() {
 9         Students s = (Students)session.load(Students.class, 2);
10         System.out.println(s);
11     }
12     
13     @Test
14     public void testUpdateStudents() {
15         Students s = (Students)session.get(Students.class, 2);
16         s.setGender("女");
17         session.update(s);
18     }
19     
20     @Test
21     public void testDeleteStudents() {
22         Students s = (Students)session.get(Students.class, 2);
23         session.delete(s);
24     }

    查询记录所用到的get方法和load方法的区别:

    

       

 

      

 

 

    

 

posted @ 2017-04-04 17:19  zhaoxingya  阅读(773)  评论(0编辑  收藏  举报