zoukankan      html  css  js  c++  java
  • 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方法的区别:

        

           

          

        

  • 相关阅读:
    【JAVASCRIPT】call和apply的用法以及区别
    web开发中的支付宝支付和微信支付
    【input】标签去除默认样式
    npm run build后如何打开index.html跑起项目
    Sass的混合-@mixin,@include
    ios h5 长按时出现黑色透明遮罩
    ios h5 长按放大镜效果关闭
    vue.$nextTick 解决了哪些问题
    原生JS代码封装(将字符串转换为日期 2019.08.24 )
    原生JS代码封装(获取年月日时分秒 )
  • 原文地址:https://www.cnblogs.com/xingyazhao/p/6665522.html
Copyright © 2011-2022 走看看