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

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();
		
	}

猜你喜欢

转载自blog.csdn.net/alexzt/article/details/81562937