POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作。

一,Hibernate框架中主键的生成策略有三种方式:

1,数据库负责生成主键(代理主键)

a,native:表示由设置的方言决定采用什么数据库生成主键方式,例如:在MySQL中会采用自增长的方式,主键字段必须都是整形类型;在Oracle数据库中,会采用序列的增长方式。

b,sequence:表示采用数据库的序列生成主键,适用于Oracle,DB2数据库中。

c,identity:表示采用自增长的主键生成方式,适用于MySQL,SQL Server中。

2,Hibernate框架负责生成主键值(代理主键):

a,increment:表示由框架本身提供计数器,累加数据,获取主键。

b,uuid:由框架根据参数(IP地址,JVM虚拟机启动时间,系统时间,计数器等)生成32位16进制的数字字符串。

3,用户提供主键值(自然主键):

Assigned:业务(自己)提供主键。

当然这里常用的是native,uuid和Assigned三值。在设置POJO类与表映射时,进行主键设置,标签为<id>,在其中的<generator>标签中进行设置,例如:

  1. <!--
  2. id标签用来映射主键字段
  3. name属性表示类的属性
  4. column属性表示表的字段
  5. -->
  6. <id name="usercode" column="usercode" length="32" type="java.lang.String">
  7. <!-- 主键生成策略 -->
  8. <generator class="assigned"/>
  9. </id>

二,Hibernate框架下的POJO对象的三种状态:

1,瞬时状态(临时状态):Transient Object

对象和数据库的数据没有关联,并且没有和框架关联在一起。例如,我们刚刚 new User();

2,持久化状态:Persistent Object

对象和数据库的数据存在关联,并且和框架关联在一起。例如我们刚刚进行保存的session.sava(user);

3,游离状态(离线状态,托管状态)Detached Object

对象和数据库的数据存在关联,但是和框架没有关联。例如保存后session关闭的user。

看一下三种状态POJO对象的转换吧:

三,Hibernate,对三种状态下的POJO的增删改查操作:

瞬时状态

持久化状态

游离状态

增(Save)

可以

不可以(没必要)

不可以(没必要)

改(Update)

不可以

修改后会自动更新,不需手动

可以

删(delete)

不可以

可以

可以

不可以

可以

可以

1,保存(Save):

通过session.save(user);就可以保存数据了,但是这里想提一下,主键的生成策略不同,框架发送sql语句的时间是不同的:

a,native:在调用save方法时发送insert语句。

b,uuid主键生成策略和assigned主键生成策略:在提交事务时发送insert语句。

这是因为主键的生成时机不同,由于native是在数据库中生成的,所以发送的比较早。

2,更新(Update):

这里想说一下对游离对象的更新:

uuid

assigned

native

存在记录

发送upate语句

会查询判断,再更新

发送update语句

记录不存在

发送语句,剖异常

会查询判断,进行插入操作

发送语句,剖异常

3,删除(delete):

这里只要提供主键,可以根据主键id删除,只要id存在即可。

4,查询:

a,主键查询:

get:返回结果可能是:持久化对象或null,所以需要对结果进行非空判断。它利用了缓存,是立即查询。

//get方法查询如果成功,那么返回的对象状态是持久化状态

Objectobj = session.get(User.class, "admin");

load:返回结果可能是:持久化对象或cglib代理对象或异常,利用缓存,默认为延迟加载。

//load方法第一查询结果存放到缓存中,支持延迟加载,效率更高,但是主要

Objectobj = session.load(User.class, "admin");

b,普通查询(面向对象查询):后边会介绍

1,Query:HQL
(HibernateQuery Language),HQL语言是对SQL语言的封装,是面向对象的查询语言。例如:SQL
: select * from t_user(表名) whereusername(字段)="tom"

HQL : from User(类名) where username(属性)="tom"

  1. //分页查询
  2. String hql = "from User u "; //面向对象查询   HQL!!!!!
  3. Query query = session.createQuery(hql);
  4. int pageno = 3 ;
  5. int pagesize = 2 ;
  6. int index = (pageno - 1) * pagesize ;
  7. query.setFirstResult(index);//某页的第一个下标
  8. query.setMaxResults(pagesize);  //页数的大小
  9. //条件查询
  10. String hql = "from User u where u.usercode=? and u.userpswd=?"; //面向对象查询   HQL!!!!!
  11. Query query = session.createQuery(hql);
  12. query.setString(0, "admin"); //索引从0开始
  13. query.setString(1, "admin");

2,   Criteria:将所有的操作都以面向对象的方式进行完成。

  1. //分页查询
  1. Criteria cra = session.createCriteria(User.class);
  2. cra.setFirstResult(0); //开始索引
  3. cra.setMaxResults(2); //每页数量
  4. //排序
  5. Criteria cra = session.createCriteria(User.class);
  6. cra.addOrder(Order.desc("username"));
  7. //条件查询
  8. Criteria cra = session.createCriteria(User.class);
  9. cra.add(Restrictions.eq("username", "aaa"));
  10. cra.add(Restrictions.eq("usercode", "aaa"));

综上为Hibernate对POJO对象的简单操作,主要是做好映射,简单的配置,然后利用Hibernate里边的方法进行配置。这里这是举了几个简单的例子涉及的知识较少,我们可以查看Hibernate的帮助文档中进行查看参考,会帮助我们很多的

Hibernate框架(二)POJO对象的操作的更多相关文章

  1. Hibernate(二)——POJO对象的操作

    POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作.  一,Hibernate框架中主键的生成策略有三种方式: 1,数 ...

  2. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构  说明 ...

  3. hibernate框架学习之对象状态

    lHibernate对象共有三种状态 •瞬时状态:瞬时对象 •持久化状态:持久化对象 •托管状态:托管对象 l瞬时对象(Transient Object),简称TO l瞬时对象指的是应用程序创建出来的 ...

  4. hibernate框架的核心对象和相关知识点

    Hibernate架构下图提供了hibernate体系的高层视图: Hibernate全面解决方案: Hibernate核心APIConfiguration负责管理数据库的配置信息.数据库的配置信息包 ...

  5. selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装

    学习目的: 掌握自动化框架中需要的一些基础web操作 正式步骤: 使用title_contains检查页面是否正确 # -*- coding:utf-8 -*- import time from se ...

  6. hibernate框架(3)---持久化对象

    持久化对象 再讲持久化对象之前,我们先来理解有关session中get方法与 load方法区别: 简单总结: (1)如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库 ...

  7. 使用Hibernate框架来更新对象的注意事项

    Hibernate在更新对象的时候,如果对象的有些属性没有设置,那么在更新的时候,会被默认为空. 特别在更新表单对象的时候. 例子: 如: Department部门类 该部门类有以下属性:  id : ...

  8. Hibernate框架(一)总结介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

  9. Hibernate框架入门

    导读 本文主要介绍hibernate的入门,主要包括以下内容:hibernate介绍.hibernate环境搭建.hibernate简单测试.测试涉及的api详解. 一.hibernate介绍 JDB ...

随机推荐

  1. python3 smtplib发送邮件

    使用smtp包发送邮件还依赖email的一些方法 发送邮件主要分为三步: 1,定义邮箱参数:邮箱服务器地址,邮箱用户名,邮箱密码,邮件发送方,邮件接收方,邮件标题,邮件内容 2,配置发送内容 3,实例 ...

  2. 10.15 wget:命令行下载工具

    wget命令   用于从网络上下载某些资料,该命令对于能够连接到互联网的Linux系统的作用非常大,可以直接从网络上下载自己所需要的文件. wget的特点如下: 支持断点下载功能. 支持FTP和HTT ...

  3. MindSpore激活函数总结与测试

    技术背景 激活函数在机器学习的前向网络中担任着非常重要的角色,我们可以认为它是一个决策函数.举个例子说,我们要判断一个输出的数据是猫还是狗,我们所得到的数据是0.01,而我们预设的数据中0代表猫1代表 ...

  4. 【补档_STM32单片机】脉搏波采集显示硬件设计

    一.脉搏波简介 ​ 脉搏一般情况下指的都是动脉脉搏.每分钟的脉搏次数称为脉率,正常情况下与心率是一致的.心脏的一次收缩和舒张成为一个心动周期.在每个心动周期内,心室的收缩和舒张会引起脉内压力的周期性波 ...

  5. Go语言web开发---Beego的cookie

    1.简介 (1)Http是无状态的协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否是同一个客户端,这样的设计严重阻碍了web程序的设计. (2)Cookie是解决Http协议无 ...

  6. SQL查询要求两个条件同时成立

    SELECT * FROM [TABLE] WHERE CASE WHEN O_State='已处理' AND O_Pay='已付' THEN 0 ELSE 1 END=1

  7. GPU加速计算

    GPU加速计算 NVIDIA A100 Tensor Core GPU 可针对 AI.数据分析和高性能计算 (HPC),在各种规模上实现出色的加速,应对极其严峻的计算挑战.作为 NVIDIA 数据中心 ...

  8. Linux 2 的 Windows 子系统上发布 CUDA

    Linux 2 的 Windows 子系统上发布 CUDA 为响应大众需求,微软 宣布 在 2020 年 5 月的 建造 大会上推出了 建造 ( WSL 2 ) – GPU 加速功能.这一特性为许多计 ...

  9. CVPR2020:基于层次折叠的跳跃式注意网络点云完成

    CVPR2020:基于层次折叠的跳跃式注意网络点云完成 Point Cloud Completion by Skip-Attention Network With Hierarchical Foldi ...

  10. Qt中的内存回收机制

    Qt中的内存回收机制 在Qt中创建对象的时候会提供一个 Parent对象指针(可以查看类的构造函数),下面来解释这个parent到底是干什么的. QObject是以对象树的形式组织起来的.当你创建一个 ...