java之hibernate02

hibernate操作对象的三种状态

1.瞬时态  对象没有id并且没有与session产生联系

2.持久态  有id并且与session产生了联系

3.游离态  有id但没有session产生联系

总结:hibernate在你提交事务之后,会把持久态的对象同步到数据库之中


查询数据库时hibernate是如何操作的

在查询时数据库返回的结果集会被hibernate封装成对象并且在缓存与快照中各自保存一份,

之后再去数据库中查询时,会现在缓存中查看是否存在这个id的对象,如果存在就会返回缓存中的对象.

这时,修改对象修改的是缓存中的对象记录,在提交事务时,hibernate会对比缓存与快照中的对象,

看是否发生改变,如果发生改变就会将缓存中的对象同步到数据库中.


在HQL中还可以是使用:号占位符  在替换时直接使用:号后面的名字即可  注意:冒号后面不要在空格


HQL中的分页:

	//使用HQL查询所有User记录
	Session session = HibernateUitl.getOpenSession();
	 Transaction transaction = session.beginTransaction();
	 String hql = "from User ";
	 Query<User> query = session.createQuery(hql, User.class);
	 //添加分页
	 //limit first,max
	 query.setFirstResult(0);
	 query.setMaxResults(2);
	 List<User> list = query.list();
	 System.out.println(list); 
	 transaction.commit();
	 session.close();

配置:一对多的xml文件

<!-- 配置一对多关系  
 		name 表示实体类对象中存放另一个实体类的容器名
 		column  两张表联系的外键  外键声明在多的一方中
 		注意:两张表外键名必须填一致,否则会多创建一个外键出来
 		class 与哪个类进行联系
 		
 	 -->
 	 <!-- 级联操作  cascade
 	 	作用:简化你的代码量(量不大)
 	 	save-update 级联保存和更新
 	 	delete 级联删除
 	 	all     save-update + delete
 	  -->
 	  <!-- 
 	  	inverse(反转控制  默认值是false 不放弃维护外键 ) 作用:可以提高效率 
 	  	一对多的表关系  如果要放弃维护外键关系  只能是一的一方放弃维护
 	   -->
 	 
 	<set name="linkmans" cascade="save-update" inverse="true">
 		<key column="lkm_cust_id"></key>
 		<one-to-many class="Linkman"/>
 	</set>
<!-- 配置多对一的关系
    				name  表示多对一对象中声明的另一个实体类的成员变量名
    				class 表示  与哪个类进行联系
    				column 两张表联系的外键
    				
    				注意:上面再配置property时不要重复配置外键
    			 -->
    			
    			<many-to-one name="customer" class="Customer" column="lkm_cust_id" ></many-to-one>

配置多对多的关系:

<!-- 配置多对多关系 
    				name 容器的名字
    				table 中间表的名字
    				key  中间表引用我的id
    				many-to-many  column="对应那个表的外键(引用那个表的键)"  class="对应的那个表的类名"
    			-->
    			<!-- 多对多时  必须要有一方放弃对外键的维护 -->
    			<set name="roles" table="sys_user_role" inverse="true">
    				<key column="user_id"></key>
    				<many-to-many column="role_id" class="Role"></many-to-many>
    			</set>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值