因为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. Mysql 创建表时错误:Tablespace for table `tablexx` exists. Please DISCARD the tablespace before IMPORT.

    在本地的一个数据库创建表时意外的出现了以下错误,说是表已经存在了 但通过desc 查看表信息时又说表不存在 在本地系统搜索表名却发现一个.ibd文件[InnoDB File] 在删除了该.ibd文件文 ...

  2. Tensorflow高速入门2--实现手写数字识别

    Tensorflow高速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow 版本号:0.12.0(仅使用cpu下) Tensorflow安装见: http://b ...

  3. SpringBoot开发详解(六)-- 异常统一管理以及AOP的使用

    https://blog.csdn.net/qq_31001665/article/details/71357825

  4. apache 反向代理的时候,通过域名访问是,出现跳转到ip或者无权访问的情况

    解决方法很简单,在配置反向代理的时候加上一行: ProxyPreserveHost On 例如:ProxyPass / http://202.112.0.1/ProxyPassReverse / ht ...

  5. iOS 获取设备型号 ip6更新

    //获得设备型号 + (NSString *)getCurrentDeviceModel:(UIViewController *)controller { ]; size_t len; char *m ...

  6. Iterator接口用法

    1.所有实现Collection接口的容器类都有一个iteractor方法,用于返回一个实现了Iteractor接口的对象, 2.Iteractor对象成为迭代器,用以实现对容器内元素的遍历操作 3. ...

  7. Keepalived系列一:安装Keepalived

    1:简介 它是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(B ...

  8. vue框架整体流程

    1.整体流程 (1)模板解析成render函数 (2)响应式监听 (3)首次渲染,显示页面,绑定依赖 (4)data属性变化,触发rerender 2.模板解析为render函数 参考上一篇博客. 模 ...

  9. HTTPS与HTTP协议区别

    1.主要区别 (1)超文本传输协议HTTP,HTTP下加入SSL层(位于传输层)的安全协议. (2)HTTP端口为80,HTTPS端口是443. 2.HTTPS通信过程 https 通信传输过程:

  10. postgresql修改配置生效方法

    对于配置服务器,,太多时候我们在Linux中做的操作是,配置*.conf文件,然后重启服务.而很多服务都具有reload功能,而但是具体到某个配置,有时候直接说出需不需要重启服务而使得配置生效,这并不 ...