Hibernate学习之----------------Hibernate查询

Hibernate查询有两种方式:

1.Native SQL 本地的原始方式sql查询,

2.HQL(Hibernate Query Language)hibernate的查询语句.

这里主要介绍HQL,HQL中含有EJBQL(JPQL 1.0)

HQL支持从每个实体类中查询数据,但要注意其查询时类名称要一致。

例 HQL List:

		//创建并打开session
		Session session = sf.openSession();
		session.beginTransaction();//开始事务
		Query q = session.createQuery("from Category");//创建HQL查询对象,注意查询的是类名哦
		List<Category> categories = (List<Category>)q.list();//因为没有条件,查询所有该类的在数据库的对象,并放到列表
		for(Category c : categories) {
			System.out.println(c.getName());
		}
		session.getTransaction().commit();//提交事务
		session.close();//关闭session

 起始你看了觉得和本地SQL没有多大区别,但是你可以看到下面的就要区别了:

public class MsgInfo { //VO DTO Value Object username p1 p2 UserInfo->User->DB
	private int id;
	private String cont;
	private String topicName;
	private String categoryName;
	public MsgInfo(int id, String cont, String topicName, String categoryName) {
		super();
		this.id = id;
		this.cont = cont;
		this.topicName = topicName;
		this.categoryName = categoryName;
	}
	public String getTopicName() {
		return topicName;
	}
	public void setTopicName(String topicName) {
		this.topicName = topicName;
	}
	public String getCategoryName() {
		return categoryName;
	}
	public void setCategoryName(String categoryName) {
		this.categoryName = categoryName;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public String getCont() {
		return cont;
	}
	public void setCont(String cont) {
		this.cont = cont;
	}
	
}

测试

Session session = sf.openSession();
		session.beginTransaction();
		Query q = session.createQuery("select new suse.ly.domain.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
		
		for(Object o : q.list()) {
			MsgInfo m = (MsgInfo)o;
			System.out.println(m.getCont());
		}
		session.getTransaction().commit();
		session.close();

可以看到,在查询中可以将查询结果直接存储为一个对象,这是HQL的一大好处。

NativeSQL使用:

Session session = sf.openSession();
		session.beginTransaction();
		SQLQuery q = session.createSQLQuery("select * from category limit 2,4").addEntity(Category.class);
		List<Category> categories = (List<Category>)q.list();
		for(Category c : categories) {
			System.out.println(c.getName());
		}
		session.getTransaction().commit();
		session.close();

另外要注意左右外连接的使用:左连接将左边的表连接取出来。,右连接将右边的表连接取出来。

以上内容学习自尚学堂..

猜你喜欢

转载自youngstream.iteye.com/blog/2083213