Take a look at GW

【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);

 

posted @   HDWK  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示