Hibernate基础语义

本文介绍Hibernate框架的核心组件,包括Configuration、SessionFactory及Session的使用方法,并详细展示了如何利用这些组件进行数据库操作。

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

 

  • Configuration

 

Configuration类负责管理Hibernate的配置信息,Hibernate运行时需要获取一些底层的信息。如:数据库URL,数据库用户,数据库密码,数据库驱动类,数据库适配器等;

当我们调用:

 

new Configuration().configure()

 

 Hibernate会根据当前的CLASSPATH找到hibernate.cfg.xml(Hibernate.properties)并将其加载到内存中,作为后面操作的基础配置;

Configuration类一般只有在获取SessionFactory时需要涉及,当SessionFactory实例创建之后,由于配置的基本信息已经由Hibernate绑定在返回的SessionFactory之中,因此,一般情况下无需再对其进行操作!

 

  • SessionFactory

 

SessionFactory负责创建session实例,可以通过Configuration实例构建SessionFactory:

 

new Configuration().configure().buildSessionFactory()

 

 Configuration实例会根据当前数据库配置信息,构造SessionFactory实例并返回,SessionFactory一旦构造完毕,即被赋予特定的配置信息;之后的Configuration实例对象不会影响到已经创建的SessionFactory实例!

如果需要改变SessionFactory实例,就需要从Configuration实例重新构建一个SessionFactory实例,同理,如果应用中需要访问多个数据库,那么针对每个数据库都应该建立想对应的SessionFactory实例;

SessionFactory中保存着数据库配置的所有映射关系,同时也负责维护当前的二级缓存和StatementPool,由此可见,SessionFactory的创建过程会很复杂且代价高昂,所有我们在系统设计中应充分的考虑到SessionFactory的重用策略,SessionFactory采用了线程安全设计,可由多个线程并发调用,大多数情况下,一个应用中针对一个数据库共享一个SessionFactory就可以;

 

  • Session

 

Session是Hibernate持久化操作的基础,Hibernate的Session与Web中的HttpSession并没有任何关系,Hibernate Session之与Hibernate就像JDBC Connection与JDBC之间的关系;

Session是Hibernate持久化管理器的核心,通过了很多持久化方法,我们可以根据这些方法完成对象的增删改查(CRUD);

Save():

 

		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Tuser tUser = new Tuser();
		tUser.setName("keith");
		session.save(tUser);
		session.getTransaction().commit();

 

 输出的SQL:

 

Hibernate: insert into  tUser(uName) values(?)

 

 Get():

 

Tuser tUser = (Tuser) session.get(Tuser.class, 1);

 

 输出的SQL:

 

Hibernate: 
    select  tuser0_.uId as uId0_0_, tuser0_.uName as uName0_0_  from   tUser tuser0_  where  tuser0_.uId=?

 

 Delete():

 

		Tuser tUser = (Tuser) session.get(Tuser.class, 1);
		session.delete(tUser);

 

 输出的SQL:

 

Hibernate: select   tuser0_.uId as uId0_0_,tuser0_.uName as uName0_0_   from   tUser tuser0_  where   tuser0_.uId=?
Hibernate: delete  from   tUser where   uId=?

删除的操作还采用HQL方式:

 

		String hql = "delete Tuser where id = 2";
		Query query = session.createQuery(hql);
		query.executeUpdate();

 

 输出的SQL:

 

Hibernate: delete   from   tUser where   uId=2

 

 Hibernate3中我们必须通过Query或Criteia接口进行数据查询:

Query接口:

 

		String hql = "from Tuser where uName like ?";
		Query query  = session.createQuery(hql);
		query.setParameter(0, "keith");
		
		List list = query.list();
		Iterator iterator = list.iterator();
		while (iterator.hasNext()) {
			Tuser tUser = (Tuser) iterator.next();
			System.out.println(tUser.getuName()+"  "+tUser.getuId());
		}

 

 输出SQL:

 

Hibernate: select   tuser0_.uId as uId0_,tuser0_.uName as uName0_ from   tUser tuser0_  where  tuser0_.uName like ?

输出结果: keith 3

 

 

Criteria接口:

 

		Criteria criteria  = session.createCriteria(Tuser.class);
		criteria.add(Expression.eq("uName", "keith"));
		List list = criteria.list();
		
		Iterator iterator = list.iterator();
		while (iterator.hasNext()) {
			Tuser tUser = (Tuser) iterator.next();
			System.out.println(tUser.getuName()+"  "+tUser.getuId());
		}

 

 输出SQL:

 

Hibernate: select  this_.uId as uId0_0_,this_.uName as uName0_0_  from   tUser this_  where  this_.uName=?

 输出结果:keith  3

 

 

Query和Criteria作为Hibernate数据查询接口,都提供了对查询条件的封装机制,两者之间的不同之处在于:Query面向HQL和Native SQL,而Criteria则提供了面向对象的查询模式;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值