Hibernate征途(三)之CRUD

本文通过实例展示了Hibernate的基本使用,包括实体类、映射文件、SessionFactory和Session的创建与操作,以实现用户数据的CRUD操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    上篇博客《Hibernate征途(二)之基础与核心》介绍了Hibernate的基础内容和核心内容,这篇博客简单实践一下。第一篇博客也说过Hibernate是一种JDBC的简化方案,既然是和数据库相关的操作,自然离不开CRUD,也就是常说的增删改查:

    C reate new records
    R etrieve existing records
    U pdate existing records
    D elete existing records.

七步骤

    从步骤来看,Hibernate的使用都可以分为七个步骤,如下图: 

    

    即:

  • 编写实体类,配置实体类的映射。
  • 创建SessionFactory
  • 创建并开启一个session
  • 针对session,开启事务
  • 进行数据库增删改查操作
  • 提交或回滚事务
  • 关闭session

实例

    既然说到简单,就把简单贯彻到底,下面以保存一个用户为例,注意这七个步骤的使用。

    User.java

public class User {

		private String id;
		private String name;
		private String password;
		private Date createTime;
		private Date expireTime;
		/**
		……对应的setters和getters
		**/
}

    映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
	<class name="com.tgb.hibernate.User" >
		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="name" />
		<property name="password" />
		<property name="createTime" />
		<property name="expireTime" />
	</class>
</hibernate-mapping>

    Utils

    封装对SessionFactory和Session常用的操作。

public class HibernateUtils {

	private static SessionFactory factory;
	static{
		try {
			//get configuration
			Configuration cfg=new Configuration().configure();
			//create session factory
			 factory=cfg.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Session getSession(){
		return factory.openSession();
	}
	public static void closeSession(Session session)
	{
		if (session!=null) {
			if (session.isOpen()) {
				session.close();
			}
		}
	}
	public static SessionFactory getSessionFactory()
	{
		return factory;
	}
}

    测试保存

public void testSave1()
{
	Session session=null;
	try {
	          //get session
		session=HibernateUtils.getSession();
		//open transaction
		session.beginTransaction();
		//create user
		User user=new User()
		User user =new User();
		user.setCreateTime(new Date());
		user.setExpireTime(new Date());
		user.setName("zher");
		user.setPassword("123");
		//execute save
		session.save(bird);
		//commit transaction
		session.getTransaction().commit();
	} catch (Exception e) {
		session.getTransaction().rollback();
		e.printStackTrace();
	}
	finally
	{
		//close session
		HibernateUtils.closeSession(session);
	}
}

其它操作

    save()仅是session操作的一种,除此之外,还有load()/get()、delete()、update(),使用类似不再赘述。

总结

    这应该是Hibernate最简答的一个例子,这篇博客用于对上篇博客中三种状态和五个个核心接口使用的理解,下篇博客将介绍各式各样的映射,That' all。


内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置与训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则和命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式和控制符号在多条物理通道上的一致性和正确性。文档还涵盖了链路性能监控和错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计和实现支持多种数据速率和编码方式的InfiniBand设备;② 开发链路初始化和训练算法,确保链路两端设备能够正确配置并优化通信质量;③ 实现链路性能监控和错误检测,提高系统的可靠性和稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有信息,仅供内部参考和技术交流使用。文档内容详尽,对于理解和实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解和应用规范中的各项技术要求。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值