测试类代码:
@Test
public void testSelectMySelf(){
Stringhql="select newNewsBean(n.newsid,n.newstitle,n.author) from NewsBean as n";
Queryquery=session.createQuery(hql);//import org.hibernate.Query
List<NewsBean>list=query.list();
for(NewsBeannewsBean:list){
System.out.println("自定义id:"+newsBean.getNewsid());
System.out.println("自定义newstitle:"+newsBean.getNewstitle());
System.out.println("自定义author:"+newsBean.getAuthor());//通过别名来获取
}
}
NewsBean实体类必须添加构造函数代码,否则报错:
public NewsBean(intnewsid, String newstitle, String author) {
super();
this.newsid = newsid;
this.newstitle = newstitle;
this.author = author;
}
持久化类中无参构造方法的必要性
String hql=
" from NewsBean as n";
默认去调用默认的构造函数
和
String hql=
"select newNewsBean(n.newsid,n.newstitle,n.author) from NewsBean as n";
必须去调用自定义的,要添加上取什么字段,添加什么函数
Distinct返回不重复的查询结果
相同没有意义的,去掉重复的元素。
测试代码:
@Test
public void testNoDistinct(){
Stringhql="select n.typename from NewstypeBean as n";//查询类型名称,重复的省却
Queryquery=session.createQuery(hql);//import org.hibernate.Query
List<Object>list=query.list();
for(Object newsBean:list){
System.out.println("typename:"+newsBean);
}
}
有重复的项:
在String hql="select distinct n.typename fromNewstypeBean as n";//查询类型名称,重复的省却
Where子句 :比较运算
代码如下:
@Test
public void testWhere1(){
Stringhql="from UsersBean as n wheren.userleval>0";//查询类型名称,重复的省却
Queryquery=session.createQuery(hql);//import org.hibernate.Query
List<Object>list=query.list();
for(Object newsBean:list){
System.out.println(newsBean);
}
}
(一)Null值运算
String hql="from UsersBean as nwhere n.userleval is null(is not null)";
String hql="from UsersBean as nwhere n.userleval = null(!= null)";
范围运算:
(二)判断属性值
(1)Not in(列表)
存在:返回true
不存在:返回false
(1) not between 值1 and 值2
String hql="from NewstypeBeanas n where n.typeid in(1,2)";
String hql="from NewstypeBeanas n where n.typeid not in(1,2)";
(三)字符串模式匹配:
(1) 通过字符串关键字匹配 like关键字
(2) %任何字母(下划线后不可以有空格否则没有结果显示)
Stringhql="from NewstypeBean as n where n.typename like '%娱_'";
(3)%完整的名称%
String hql="from NewstypeBeanas n where n.typename like '%军事%'";
(四)逻辑运算
(1)and(逻辑与)、or(逻辑或)
Stringhql="from NewstypeBean as n where n.typeid=1 and n.typename like '%娱乐%'";
(2)not(逻辑非)
(五)集合运算
Is(not) entity(不)为空
Member of 元素属于集合
测试代码:
测试代码:
//返回查询单个对象代码,多个会报错。
测试代码:
@Test
public voidtestWhere4_dangeduixiang(){
//n.typeid=1
Stringhql="from NewstypeBean as n wheren.typeid=1";//报错
//String hql="from NewstypeBean as n wheren.typename like '%娱乐%'";//报错
Queryquery=session.createQuery(hql);//import org.hibernate.Query
//返回单个对象
NewstypeBeannewstypeBean=(NewstypeBean) query.uniqueResult();
System.out.println("testWhere4_dangeduixiang:"+newstypeBean.getTypename());
}
测试代码:
public voidtestWhere5_orderBy(){
//String hql="from NewstypeBean as n order by n.typeid asc";
Stringhql="from NewstypeBean as n order by n.typeid desc";
Queryquery=session.createQuery(hql);//import org.hibernate.Query
List<Object>list=query.list();
for(Object newsBean:list){
System.out.println(newsBean);
}
}