hibernate中的sql语句写在xxx.hbm.xml中解决hibernate中原生sql的硬编码问题

hibernate中的sql语句写在xxx.hbm.xml中解决hibernate中原生sql的硬编码问题

在hibernate的查询中,hibernate为我们提供了三种查询方式,hql查询、QBC查询以及原生sql查询,但是当我们在操作多张表查询的时候,我们通常会选择原生的sql查询来编写复杂的sql语句,但是如果我们直接把复杂的sql语句写在dao中,就会有硬编码的问题,当我们的需求发生变化的时候,我们就需要去修改源代码,这样其实对后期的维护是不好的。所以我们如果把原生的sql语句写在xml中,再引用到dao中,就可以解决这个硬编码的问题了,修改需求是,只需修改xml配置文件中的内容。并且可以解决sql代码的重复。其实我感觉它的主要的思想与mybaits中的思想是类似的。
下面我写了一个小例子:
Customer.hbm.xml



	
	
		
			
		
		
		
		
		
		
		
		
		
		
			
			
			
		
	
	
	
		
		
	
	
	
		from Customer where cust_id=:cust_id
	
注意:
第一种原生的sql语句编写中,一定要加返回值类型,如果返回的是由几张表组成的数据,可以再写一个pojo类,注意起别名与pojo类中的属性名相同。
测试:
/*
	 * 测试原生sql
	 */
	@Test
	public void run4(){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		 Query query = session.getNamedQuery("queryCustomer");
		List list = query.list();
		System.out.println(list.get(0).getCust_name());
		tx.commit();
	}
	/*
	 * 测试hql查询
	 */
	@Test
	public void run5(){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		 Query query = session.getNamedQuery("hqlQuery");
		 query.setLong("cust_id", 3L);//设置条件
		List list = query.list();
		System.out.println(list.get(0).getCust_name());
		tx.commit();
	}




你可能感兴趣的:(Hibernate)