Hibernate-02 框架第二天 query 与 criteria 查询接口, 绑定本地session

124 篇文章 1 订阅
96 篇文章 0 订阅

query接口简单了解下就可以,

criteria接口很适合来做条件查询语句

绑定本地session来确保session一致性处理事务问题

处于持久态的对象可以通过hibernate中session对象一级缓存的快照技术来自动更新数据库

详见代码:

 


	/*
	 * 持久态对象的演示
	 */
	@org.junit.Test
	public void updateTest() {
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		//先查询出给客户
		Customer c = session.get(Customer.class, 109L);
		c.setCust_name("updated_alex1");
		//处在持久态的对象可通过快照功能自动更新,不用执行session的update
//		session.update(c);
		
		tr.commit();
		session.close();
		
	}



	 * criteria接口演示
	 */
	@Test
	public void criteriaTest() {
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		//获得实例
		Criteria criteria = session.createCriteria(Customer.class);
		
		//查询所有
		List<Customer> list = criteria.list();
		for (Customer customer : list) {
			System.out.println(customer);
		}
		System.out.println("list查询完成。");
		
		/*
		 *条件查询调用criteria的add方法添加Restrictions工具类的条件即可,其方法都是静态的
		 */
		criteria.add(Restrictions.gt("cust_id", 104L));
		criteria.add(Restrictions.like("cust_name", "%a%"));
		//调用list方法
		List<Customer> list2 = criteria.list();
		for (Customer customer : list2) {
			System.out.println(customer);
		}
		
		tr.commit();
		session.close();
	}
	
	
	
	
	
	
	
	
	/*
	 * 绑定本地session测试,处理事务
	 */
	@org.junit.Test
	public void tansactionTest() {
		//获得同线程中的同一个session
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		
		try {
			Customer c1 = session.get(Customer.class, 100L);
			Customer c2 = session.get(Customer.class, 101L);
			c1.setCust_level("22");
			//模拟故障,开启事务时不会更新到服务器
//			int a = 1/0;
			c2.setCust_level("33");
			
			tr.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tr.rollback();
		}finally {
			session.close();
		}
	}
	
	
	
	
	
	
	/*
	 * 测试hibernate中session对象的一级缓存
	 * 在一个session执行insert和查询两个操作,最后可以看到没有输出查询sql语句
	 */
	@org.junit.Test
	public void cacheTest() {
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		//先创建一个用户
		Customer c = new Customer();
		c.setCust_name("测试一级缓存");
		//获得返回的id
		Serializable id = session.save(c);
		//再通过ID查询刚创建的用户
		session.get(Customer.class, id);
		tr.commit();
		session.close();
	}
	
	
	
	
	
	/*
	 * query 查询接口测试
	 */
	@org.junit.Test
	public void queryTest() {
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		//query对象需要from 后需要填入类名
		Query query = session.createQuery("from Customer");
		//查询所有记录
		List<Customer> list = query.list();
		
		for (Customer customer : list) {
			System.out.println(customer);
		}	
		tr.commit();
		session.close();
		
	}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值