Hibernate相关API查询操作

Query对象:

1、使用query对象,不需要写sql(Structured Query Language)语句,但是要写hql(Hibernate Query Language)语句

 sql和hql的区别:

  使用sql语句操作的是数据库中的表和表字段

  使用hql语句操作的是实体类和实体类中的属性

2、使用hql语句查询所有

 from 实体类名称

3、Query对象的使用

//测试Query对象查询
	@Test
	public void testQuery(){
		//创建sessionFactory对象,用于关闭链接,防止测试时内存溢出
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		
		try{
			sessionFactory = HibernateUtils.getSessionFactory();
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			
			//hql语句查询t_user表中的所有内容
			Query query = session.createQuery("from User");
			//用一个List对象来存储表中的所有记录
			List<User> list = query.list();
			//遍历list
			for(User u:list){
				System.out.println(u.toString());
			}
			
			tx.commit();
		}
		catch(Exception e){
			tx.rollback();
		}
		finally{
			sessionFactory.close();
		}
	}

控制台打印:

Criteria对象:

Criteria对象也可以用来查询结果,与Query对象不同的是,创建criteria对象时,session.createCriteria()方法中传入的直接是实体类对象的class,不再是hql语句

Criteria criteria = session.createCriteria(User.class);

SQLQuery对象:

可以调用底层sql语句

SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");

如果直接用List接收sqlQuery.list()的话,list中每部分存储的并不是单个的User对象,而是一个存储了User信息的数组

所以需要调用sqlQuery.addEntity(User.class)方法

然后用List接收,此时list中存放的就是单个的User对象

//测试SQLQuery对象查询
		@Test
		public void testSQLQuery(){
			//创建sessionFactory对象,用于关闭链接,防止测试时内存溢出
			SessionFactory sessionFactory = null;
			Session session = null;
			Transaction tx = null;
			
			try{
				sessionFactory = HibernateUtils.getSessionFactory();
				session = HibernateUtils.getSession();
				tx = session.beginTransaction();
				
			SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");
			
//			List<Object[]> list = sqlQuery.list();
//			
//			for(Object[] u:list){
//				System.out.println(Arrays.toString(u));
//			}
			
			sqlQuery.addEntity(User.class);
			List<User> list = sqlQuery.list();
			for(User u :list){
				System.out.println(u.toString());
			}
				
				tx.commit();
			}
			catch(Exception e){
				tx.rollback();
			}
			finally{
				sessionFactory.close();
			}
		}

猜你喜欢

转载自blog.csdn.net/Tommy5553/article/details/84779882
今日推荐