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);

猜你喜欢

转载自www.cnblogs.com/kpsmile/p/10047937.html