因为Hibernate是ORM(对象关系映射)的,所以程序员是不需要写Sql语句的。所有的操作都是通过对对象的操作。

1,原生Session

事务管理

Transaction tx = session.beginTransaction();//开启事务
tx.commit();//提交事务

查询数据

查询user表中主键值为1的数据

Object user = session.get(User.class, 1);

插入数据

向数据表中插入一条新数据

User user=new User();
user.setId(4);
user.setName("jordan");
user.setPassword("abc123");
Transaction tx = session.beginTransaction();//开启事务
session.save(user);
tx.commit();//提交

更新全部数据

将数据表中id为4的字段全部赋值,

如果对应的user表中的字段在插入的对象中没有给定值,那么将会赋值为null

User user=new User();
user.setId(4);
user.setName("james");
Transaction tx = session.beginTransaction();
session.update(user);//这个会把id为4的数据,name字段值改为'james' ,password字段值改为null。
tx.commit();

更新部分数据

如果只更新数据表中某行的部分字段,可以按照一下的思路

思路:

先把所有数据查询出来,

然后把需要修改的数据修改掉

再进行一次全部更新。

这样就可以实现部分更新了

User user = (User)session.get(User.class, 4);
user.setPassword("abcdef");
Transaction tx = session.beginTransaction();//开启事务
session.update(user);
tx.commit();//提交事务

删除数据

删除主键为2的数据

User user=new User();
user.setId(2);//以主键作为删除条件
Transaction tx = session.beginTransaction();
session.delete(user);
tx.commit();

2,HQL

使用原生Session进行数据库操作,虽然贯彻了Hibernate的ORM特性,也就是一切都通过对象来实现,但是原生Session的缺点也明显,它只封装了基本的增删查改操作,对于复杂的情况可能就力不从心了。Hibernate提供了更加灵活的HQL语句(Hibernate Query Language),来弥补这个缺板,HQL可以由程序员自己写SQL语句,摆脱了ORM的约束。

查询全部数据

SQL语句:select * from user

HQL操作:

String hql="from User";
Query query = session.createQuery(hql);
List list = query.list();//查询全部数据
for(Object user:list){
System.out.println(user);
}

查找指定条件的数据

SQL语句:select * from user where uid=2;

HQL操作:

String hql="from User where id=?";
Query query = session.createQuery(hql);
query.setInteger(0, 2);//设置参数
Object result = query.uniqueResult();//得到唯一结果
System.out.println(result);

使用预定义函数

SQL语句:select count(*) from user

HQL操作:

String hql="select count(*) from User";
Query query = session.createQuery(hql);
Object result = query.uniqueResult();//结果肯定是整形
System.out.println(result);

分页

SQL语句:select * from user limit 1,2

HQL操作:

String hql="from User";
Query query = session.createQuery(hql);
query.setFirstResult(1);//查询起始位置
query.setMaxResults(2);//指定查询的数量
List list = query.list();
for(Object user:list){
System.out.println(user);
}

更新

SQL语句:update user set uname='honny' where uid=1

HQL操作:

String hql="update User set name=? where id=?";
Query query = session.createQuery(hql);
query.setString(0, "honny");
query.setInteger(1, 1);
Transaction tx = session.beginTransaction();//开启事务
int rows = query.executeUpdate();//得到影响的行数
tx.commit();//提交事务
System.out.println("影响行数:"+rows);

【Hibernate】数据Session对象的常规操作收集的更多相关文章

  1. Hibernate之Session对象的相关方法以及持久化对象的状态

    一.持久化对象的状态        站在持久化的角度, Hibernate 把对象分为 4种状态: 持久化状态,临时状态,游离状态,删除状态.Session 的特定方法能使对象从一个状态转换到另一个状 ...

  2. hibernate之Session对象

    Session对象:数据库的核心对象 增删改查 ...java public class UserDao { public void addUser(User user) { //使用hibernat ...

  3. hibernate的session对象核心方法注意的问题

    1.session.save()方法 1).session.save()方法会使一个对象从临时状态转变为持久化状态. 2).session.save()方法会赋予持久化对象的OID属性一个ID值,以对 ...

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

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

  5. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Hibernate之Session缓存以及操作Session缓存的相关方法

    1.Session概述 A.Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. B. Sessio ...

  7. 第八章 Hibernate数据操作技巧

    第八章   Hibernate数据操作技巧8.1 分组统计数据    语法:[select]... from ...[where] [group by...[having...]] [order by ...

  8. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

  9. hibernate的事务管理和session对象的详解

    //开启事务 transaction=session.beginTransaction(); 上面为开启事务 transaction.commit();这个为提交事务 从session对象中获取事务后 ...

随机推荐

  1. CSS3提交意见输入框样式

    做了个输入框样式,如图: CSS代码例如以下: #button { cursor:pointer; width:30%; margin:5px; padding:8px; border-radius: ...

  2. JAVA Eclipse如何导入已有的项目

    File-Import,然后在弹出的窗口中输入exit,会自动提示下面的选项(已存在的项目)   把项目源代码放到Eclipse的工作目录,然后找到   导入完成    

  3. C#.NET常见问题(FAQ)-构造器constructor有什么用

    所谓的构造器constructor,就是声明类的时候定义一个public 类名的方法,这个方法不需要传递任何数据,这样的话在声明任何类的实例的时候都会无条件执行里面的方法   析构器只在程序销毁的时候 ...

  4. I/O Mutiplexing poll 和 epoll

    上一篇介绍了select的基本用法,接着来学习一下poll和epoll的基本用法.首先来看poll: #include <sys/poll.h> int poll (struct poll ...

  5. iOS 获取APP相关信息 私有API

    /* Generated by RuntimeBrowser Image: /System/Library/Frameworks/MobileCoreServices.framework/Mobile ...

  6. iOS开发技巧 - 使用UIDatePicker来选择日期和时间

    (Swift) import UIKit class ViewController: UIViewController { var datePicker: UIDatePicker! func dat ...

  7. ZH奶酪:CSS中限制span显示字数

    span中的文字是取出于数据库的,不确定文字的个数,由于排版的原因只想让span不超过6个字,如果超过只显示六个,当鼠标悬浮上去的时候tip显示全部内容 Step1.在span中添加title < ...

  8. 【树莓派】服务配置相关3:基于Ubuntu Server的服务配置

    该文接续之前写过的两篇: [树莓派]服务配置相关 [树莓派]服务配置相关2:基于RPi Desktop的服务配置 这是我个人用来进行树莓派盒子安装配置的脚本,对于外部其他博友,可以部分参考,但不需要逐 ...

  9. Python+H5py实现将SVHN样本库转换为FasterRcnn训练样本

    一.上代码 import os import h5py svhnPath = 'D:\\Project\\AIProject\\SVHNClassifier\\data' def loadSvhn(p ...

  10. cocos2d-js V3.0 V3.1使用DragonBones

    DragonBones是Adobe支持的一个开源项目,用于制作和播放骨骼动画,官网地址是:http://dragonbones.effecthub.com/.DragonBones首先在Flash和S ...