zoukankan      html  css  js  c++  java
  • Hibernate_增删改查

    实体类编写规则

      1 实体类里面属性私有的

      2 私有属性使用公开的set和get方法操作

      3 要求实体类有属性作为唯一值(一般使用id值)

      4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类

       (1)八个基本数据类型对应的包装类

         - int – Integer

         - char—Character、

         - 其他的都是首字母大写 比如 double – Double

       (2)比如 表示学生的分数,假如 int score;

         - 比如学生得了0分 ,int score = 0;

         - 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试

         ** 解决:使用包装类可以了, Integer score = 0,表示学生得了0分,

         ** 表示学生没有参加考试,Integer score = null;

    Hibernate主键生成策略

      1 hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略

      2 hibernate主键生成策略有很多的值

       native

         native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。

    <id name="id" column="id">
    
    <generator class="native" />
    
    </id>

         例如MySQL使用identity,Oracle使用sequence

         注意:如果Hibernate自动选择sequence或者hilo,则所有的表的主键都会从Hibernate默认的sequence或hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是很高。

         使用sequence或hilo时,可以加入参数,指定sequence名称或hi值表名称等,如

    <param name="sequence">hibernate_id</param>

         特点:根据数据库自动选择,项目中如果用到多个数据库时,可以使用这种方式,使用时需要设置表的自增字段或建立序列,建立表等。

       uuid

         UUID:Universally Unique Identifier,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字,标准的UUID格式为:

           xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

           其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。

    <id name="id" column="id">
    
    <generator class="uuid" />
    
    </id>

         Hibernate在保存对象时,生成一个UUID字符串作为主键,保证了唯一性,但其并无任何业务逻辑意义,只能作为主键,唯一缺点长度较大,32位(Hibernate将UUID中间的“-”删除了)的字符串,占用存储空间大,但是有两个很重要的优点,Hibernate在维护主键时,不用去数据库查询,从而提高效率,而且它是跨数据库的,以后切换数据库极其方便。

         特点:uuid长度大,占用空间大,跨数据库,不用访问数据库就生成主键值,所以效率高且能保证唯一性,移植非常方便,推荐使用。

          使用uuid生成策略,实体类id属性类型 必须 字符串类型

    实体类操作

      --对实体类crud操作

      添加操作

      根据id查询

        调用session里面的get方法实现

            User user = session.get(User.class, 2);
            System.out.println(user);

        修改操作

        首先查询,修改值

        ***根据id查询,返回对象

            User user = session.get(User.class, 2);
            user.setUsername("欧阳");
            
            session.update(user);
            tx.commit();

      删除操作

        调用session里面delete方法实现

            User user = session.get(User.class, 2);
            session.delete(user);

     

     

    实体类对象状态(概念)

      1 实体类状态有三种

        (1)瞬时态:对象里面没有id值,对象与session没有关联

            User user = new User();
            user.setUsername("qew");
            user.setPassword("12r33");
            user.setAddress("加3q");

        (2)持久态:对象里面有id值,对象与session关联

            User user = session.get(User.class, 2);

        (3)托管态:对象有id值,对象与session没有关联

            User user = new User();
            user.setUid(1);

      2 演示操作实体类对象的方法

        (1)saveOrUpdate方法:实现添加、实现修改

            User user = new User();
            user.setUsername("大大王");
            user.setPassword("123");
            user.setAddress("阿尔巴尼亚");
            
            //实体类对象是瞬时态,做添加
            session.saveOrUpdate(user);
            User user = new User();
            user.setUid(3);
            user.setUsername("2大王");
            user.setPassword("1w23");
            user.setAddress("阿尔巴a");
            
            //实体类对象是托管态,做修改
            session.saveOrUpdate(user);
            User user = session.get(User.class, 4);
            user.setUsername("3大王");
            user.setPassword("qew3");
            user.setAddress("阿qwe巴a");
            
            //实体类对象是持久态,做修改
            session.saveOrUpdate(user);
  • 相关阅读:
    A Tour of Go For continued
    A Tour of Go For
    Request对象的主要方法
    JAVA中的异常疑点解析
    用JDBC如何调用存储过程
    字节流与字符流的区别
    js判断第二个日期比第一个日期大
    JAVA中会存在内存泄露吗
    mysql 建库建表建用户
    mysql 的数据类型
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10047937.html
Copyright © 2011-2022 走看看