HQL:需要from语句
SQL:需要select和from语句
(1)
HQL最简形式
(2)
From指定了HQL查询主体——持久化类及其属性
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import entity.NewsBean;
import entity.NewstypeBean;
import util.HibernateSessionFactory;
public
classNewsBeanTest {
private Session
session=null;//创建session,org.hibernate.Session
//from子句查询持久化类,把关联的类详细信息也显示出来
@Test
public
void fromTest(){
//编写执行查询的语句
String sql="from
NewsBean";
//创建query实例对象
Query query=session.createQuery(sql);//import
org.hibernate.Query
//query.list();//查询结果list集合,符合条件的实例对象。
//接受返回的结果,import
java.util.List
Listnews=query.list();
//测试,在控制台打印测试
for(NewsBean
newsBean:news){
// System.out.println(newsBean);
//获取关联对象的信息,先打印关联对象的名称
//获取关联对象的信息,如果不打印关联对象的信息,则不会查询两次,只查询一次。就是只查询新闻
System.out.println("新闻头条:"+newsBean.getNewstitle()+",作者:"+newsBean.getAuthor()+",新闻类别名称:"+newsBean.getNewsTypebean().getTypename());
}
}
@Before
public
void setUp()
throws Exception {
//获得session
session=HibernateSessionFactory.getSession();
}
@After
public
void tearDown()
throws Exception {
//使用完毕后要关闭session
session.close();
}
}
结果:成功地找出,找了两次
http://s15/mw690/0037kwvUzy78CIZgl5Q0e&690
关于全限定名。
1.
不需要引入持久化类的全限定名,直接引入类名
2.
是auto-import(自动引入)缺省情况。方便,符合编程习惯
全限定名:from
com.imooc.model.Seller
直接使用类名就可以了:from
Seller,方便快捷。常用
From子句中别名的使用
1.
对查询的类指定别名
2.
在HQL语句其他部分通过别名引用该类
3.
别名命名习惯(严格要求,参考java命名习惯,保证可读性)
如:from
Seller
别名:from
seller或者s,全小写,一样的字母
(1)//别名不对查询结果有任何的变化
String sql="from
News as newsbean ";
可以去掉as等价于
String sql=”from
News news”;
(2)多个持久化类可以用逗号隔开
String sql="from
News as newsbean ,Type as type";
可以去掉as等价于
String sql=”from
News n,type t”;
http://s9/mw690/0037kwvUzy78CJtWdL278&690
Select 子句关于返回Object数组和单个对象整理:
代码:
import
java.util.List;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
org.junit.After;
import
org.junit.Before;
import
org.junit.Test;
import
entity.NewsBean;
import
util.HibernateSessionFactory;
public class
TestNewsObject {
private Session session=null;//创建session,org.hibernate.Session
//做一个循环打印信息,用object[]返回查询结果
@Test
public void testObject(){
//(1)当查询只是一个属性的时候,如果用for循环打印会报错,原因是如果只查询一个属性字段,他就是对象而不是obj数组。
String hql="select
n.newsid,n.newstitle,n.author from NewsBean n";
//创建query实例对象
Query query=session.createQuery(hql);//import
org.hibernate.Query
//接受返回的结果,import
java.util.List
Listlist=query.list();
//测试,在控制台打印测试
for(Object[] objs:list){
System.out.println("newsid:"+objs[0]);//显示信息
System.out.println("newstitle:"+objs[1]);
System.out.println("author:"+objs[2]);
}
}
@Before
public void setUp() throws Exception {
//获得session
session=HibernateSessionFactory.getSession();
}
@After
public void tearDown() throws Exception {
//使用完毕后要关闭session
session.close();
}
}
运行结果:
http://s5/mw690/0037kwvUzy78CJeR3Fy34&690
(2)单个字段的时候,就不是object数据,而是一个对象。
@Test
public
void testObject2(){
//String hql="select n.newsid,n.newstitle,n.author from
NewsBean n";
String hql="select
n.newstitle from NewsBean n";
//创建query实例对象
Query query=session.createQuery(hql);//import
org.hibernate.Query
//接受返回的结果,import
java.util.List
Listlist=query.list();
//测试,在控制台打印测试
for(Object
objs:list){
// System.out.println("newsid:"+objs[0]);
System.out.println("newstitle:"+objs);
// System.out.println("author:"+objs[2]);
}
}
//查询一个的时候,返回的是对象类型,而不是对象数组,
http://s10/mw690/0037kwvUzy78CJoLakN19&690
Select
n.name from news n;
注明:别名对后期排查有用,养成习惯。
List形式返回
1,
select子句中使用new
list指定
//list方法
@Test
public
void testObject(){
String hql="select
new list(n.newsid,n.newstitle,n.author)from NewsBean
n";
//创建query实例对象
Query query=session.createQuery(hql);//import
org.hibernate.Query
//接受返回的结果,import
java.util.List
List<<u>List> list2=query.list();
//测试,在控制台打印测试
for(List
list:list2){
System.out.println("newsid:"+list.get(0));
System.out.println("newstitle:"+list.get(1));
System.out.println("author:"+list.get(2));
}
}
以Map形式返回
1.
select语句语句中使用new
map指定
2.
key值为索引值,字符串类型
//使用map方法
//使用map方法
@Test
public
void testMap(){
String hql="select
new map(n.newsid,n.newstitle,n.author as author)from
NewsBean n";
//创建query实例对象
Query query=session.createQuery(hql);//import
org.hibernate.Query
List<<u>Map> maps=query.list();
for(Map
mapss:maps){
System.out.println("name_map:"+mapss.get("0"));
System.out.println("newstitle_map:"+mapss.get("1"));
System.out.println("author_map:"+mapss.get("author"));//通过别名来获取
}
}
http://s2/mw690/0037kwvUzy78CJyjc4ha1&690
加载中,请稍候......