Hibernate插入、查询、删除操作 HQL or SQL
http://adoze.bokee.com/viewdiary.25672393.html
Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory(); 2:通过SessionFactory 得到一个Session Session session=sessionFactory.openSession(); 3:通过session进行插入,删除,修改以及查询. 插入例子:(1)声明一个事务;(2)Session执行save()操作;(3)事务提交;(4)关闭Session,可选. public void update(Person p){ Transaction tran=session.beginTransaction(); session.update(p); tran.commit(); // session.close(); } 删除例子(主键删除,推荐使用):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执行Query的executeUpdate()操作;(5)Session事务提交 public void delete(int id){ String hql="delete Person as p where p.id=?"; Query query=session.createQuery(hql); query.setInteger(0,id); query.executeUpdate(); session.beginTransaction().commit(); } 删除例子(对象删除):(1)声明一个事务;(2)Session执行delete()操作;(3)事务提交;(4)关闭Session,可选. Transaction tran = session.beginTransaction(); session.delete(p); session.close(); 查询例子:(跟删除差不多) 查询语句不需要事务提交 (1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数; public Persion queryById(int id){ String hql="from Person as p where p.id=?"; Query query=session.createQuery(); List rsList=query.list(); iterator it=rsList.iterator(); Person person=null; while(it.haseNext()){ person=(Person)it.next(); } return person; } 这两种情况都是允许的,hibernate都会发送一条delete语句给数据库。 delete执行之后,如果调用了session.load(), 又可以分为两种情况: 2)在session.flush()之后,如: tx.beginTransaction(); delete执行之后,如果调用了session.save(obj): delete执行之后,如果对obj对象属性的修改,tx.commit()时不会进行dirtyChecking。 |
=====
public Collection findBySQL(String sql){
Session session = null;
Transaction tran = null;
Collection list = null;
try {
session = sessionFactory.openSession();
tran = session.beginTransaction();
SQLQuery sq = session.createSQLQuery(sql);
sq.addEntity(Student.class);
list = sq.list();
tran.commit();
} catch (HibernateException e) {
e.printStackTrace();
tran.rollback();
}finally{
if(session!=null)
session.close();
}
return list;
}
直接用SqlQuery好像不能直接执行 增 删 改 操作,不过,我找了一下,下面的方法可以的。
trans = session.beginTransaction();
Connection conn = session.connection();
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.executeUpdate();
stmt.execute();
trans.commit();
Hibernate插入、查询、删除操作 HQL or SQL相关推荐
- 多表(三个表)插入与删除操作
业务需求: 新增和删除分类信息,以category为主表,category_detail和image为副表,在不额外编写Sql.mapper.xml文件的前提下,利用mybatis-plus中的内置函 ...
- c语言二叉排序树的创建与查找,C语言实现二叉查找树的插入和删除操作问题求教...
使用C语言实现二叉查找树的插入和删除操作,但在 return searchBST( T->rchild, val, f, p);出错.这里应该使用了双指针,求教应该怎么改才正确. /* +--- ...
- 彻底理解面试难点之rb-tree(红黑树)续--对红黑树的插入和删除操作的一些理解!!!
这里主要讲一下对红黑树的插入和删除操作的一些理解 对于红黑树的一些相关性质的介绍,上篇已经讲了,这里不再介绍,有需要了解的,可以翻前面的博客看看. 1.红黑树的插入操作 对于红黑树的元素插入,我们首先 ...
- c语言链表的插入 查询 删除
c语言实验十五链表 链表的插入 查询 删除, 不会吧,来看看月腾兄的: #include<stdio.h> #include<stdlib.h> struct node {in ...
- 本科课程【数据结构与算法】实验1——线性表的顺序表示及插入、删除操作(C++实现)
大家好,我是[1+1=王], 热爱java的计算机(人工智能)渣硕研究生在读. 如果你也对java.人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!! Good better best, never ...
- 数据结构单链表插入和删除操作
单链表:先回顾单链表的特点 逻辑相邻 物理上不一定相连 首先初始化单链表,其中主要保存的是该节点自身的值以及下个节点的地址. 有效节点结构体设计: struct Node{ int data ...
- 如何实现双向链表的插入、删除操作
如何实现双向链表的插入.删除操作 循环单链表的出现,虽然能够实现从任一结点出发沿着链能找到其前驱结点,但是时间复杂度为O(N).如果希望能从链表中快速确定某一个结点的前驱,另一个解决方法就是在单链表的 ...
- 数据结构—线性表顺序存储插入和删除操作
线性表的操作:1.InitList(*L):初始化操作,建立一个空的线性表L 2.ListEmpty(L):判断线性表是否为空,如果为空,返回true,否则返回false 3.ClearList(*L ...
- 红黑树及其插入、删除操作
在二叉搜索树中,基本操作如结点的插入.删除.查找的性能上界都得不到保证,原因在于二叉搜索树的构造依赖于其结点值的插入顺序,最坏情况下二叉搜索树会退化为单链表(如下图所示).因此我们需要对二叉搜索树做出 ...
最新文章
- 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★
- onnx:Resize in opset 11 to support Pytorch‘s behavior
- 管中窥“视频”,“理解”一斑 —— 视频理解概览
- 用户体验改善案例_用户体验案例研究:建立更好的体验(重新设计“和平航空”网站)...
- mysql索引1908
- word自带公式右侧编号
- 通信upf是什么意思_中兴通讯全场景UPF 极简设计,随需而动
- vue 页面保存为本地图片
- 利用assimp显示gltf
- 目标检测评估指标 mAP P R
- Python 分类算法(1)——逻辑回归logistic regression之代码实现(2)
- linux服务器如何查看mac地址,linux如何查看mac地址_查看mac地址 linux_linux查看mac地址...
- 理解计算机(2)—什么是云主机
- 谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64
- pr预设的卷及内核锐化是什么_PR内置特效合集
- ​包载紫杉醇的tpgs还原性白蛋白纳米粒/GA-HSA 藤黄酸人血清蛋白纳米粒​
- MySQL 数据库存储引擎
- document.getElementById(“id”)与$(#id)的区别
- iqc工作职责和工作内容_iqc是什么意思 iqc的工作职责是什么
- 智能叮当值不值得长期做?
热门文章
- Metal之加载TGA与PNG/JPEG纹理图片
- 10.Vue 组件基础
- 2019\Province_C_C++_B\试题E-迷宫
- 安装好Pycharm后如何配置Python解释器简易教程(configure python interpreter)
- 2013年第四届蓝桥杯C/C++ A组国赛 —— 第五题:网络寻路
- 计算机精英协会考核题 —— 第三题:斐波那契数
- 【Qt】QLayoutItem类
- 【Qt】Qt登录对话框(设计器实现)
- 【STM32】STM32F4时钟系统
- 【Linux系统编程】特殊进程之守护进程