【Hibernate】数据Session对象的常规操作收集
因为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对象的常规操作收集的更多相关文章
- Hibernate之Session对象的相关方法以及持久化对象的状态
一.持久化对象的状态 站在持久化的角度, Hibernate 把对象分为 4种状态: 持久化状态,临时状态,游离状态,删除状态.Session 的特定方法能使对象从一个状态转换到另一个状 ...
- hibernate之Session对象
Session对象:数据库的核心对象 增删改查 ...java public class UserDao { public void addUser(User user) { //使用hibernat ...
- hibernate的session对象核心方法注意的问题
1.session.save()方法 1).session.save()方法会使一个对象从临时状态转变为持久化状态. 2).session.save()方法会赋予持久化对象的OID属性一个ID值,以对 ...
- Hibernate(二)——POJO对象的操作
POJO对象其实就是我们的实体,这篇博客总结一下框架对POJO对象对应数据库主键的生成策略,和一些对POJO对象的简单增删改查的操作. 一,Hibernate框架中主键的生成策略有三种方式: 1,数 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate之Session缓存以及操作Session缓存的相关方法
1.Session概述 A.Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. B. Sessio ...
- 第八章 Hibernate数据操作技巧
第八章 Hibernate数据操作技巧8.1 分组统计数据 语法:[select]... from ...[where] [group by...[having...]] [order by ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- hibernate的事务管理和session对象的详解
//开启事务 transaction=session.beginTransaction(); 上面为开启事务 transaction.commit();这个为提交事务 从session对象中获取事务后 ...
随机推荐
- Sql控制反转小尝试
假想用配置Sql语句的方式来完毕一个处理逻辑,而且映射到一个Url,这样当请求这个url的时候,运行前面配置的sql. 以下的一段详细配置,比如 当请求pagerlistdept.do的时候,会传入參 ...
- mongodb最大连接数、最大连接数修改
mongodb最大连接数是20000. 所以业界流传一段话,千万级以下的用mysql.千万级以上的用mongodb,亿级以上的用hadoop. 查看mongodb最大连接数 mongodb ...
- [Algorithm] Check if a binary tree is binary search tree or not
What is Binary Search Tree (BST) A binary tree in which for each node, value of all the nodes in lef ...
- Discuz常见小问题-如何人为地添加用户并分配小组
进入后台,在用户-添加用户中可以人为添加用户并分配权限
- message sent to deallocated instance
在XCode的以前版本中,如果遇到了 [代码]c#/cpp/oc代码: 1 message sent to deallocated instance 0x6d564f0 我们可以使用info mall ...
- 009-Go 读取写入CSV文件
package main import( "encoding/csv" "fmt" "os" "strconv" ) t ...
- ARM的ADS汇编器和GCC汇编器
一:ads下的一段汇编程序: __main EXPORT BootReset BootReset B resetvec_reqset ...
- 算法笔记_228:信用卡号校验(Java)
目录 1 问题描述 2 解决方案 1 问题描述 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证 ...
- 【Zookeeper】源码分析之持久化(二)之FileSnap
一.前言 前篇博文已经分析了FileTxnLog的源码,现在接着分析持久化中的FileSnap,其主要提供了快照相应的接口. 二.SnapShot源码分析 SnapShot是FileTxnLog的父类 ...
- iOS下Symbol not found: ___sincosf_stret错误
在调试一个带第三方库的多媒体应用中,发如今iOS6.1.2的版本号上必定crash.显示Symbol not found: ___sincosf_stret错误,这个错误非常少见. watermark ...