Hql与Sql
1、HQL是面向对象的,所以HQL与数据库无关
2、HQL最终也会生成SQL,也就是说 HQL使用范围是<SQL的范围
3、HQL是由query对象获得。
hql | sql |
---|---|
面向对象 | 面向结构(表) |
操作的是实体类 ,类属性 | 表,表列段 |
命名参数占位 | 占位符 |
使用hql的几种返回类型:
a.返回对象 from 类名
b.返回String 查询单个属性
c.object [] 查询两个及两个以上的属性
d.Map 利用了Map函数,查询两个及两个以上的类属性
d.返回对象 利用了构造函数的形式(Dto)
示例:
@Test
public void hql1(){
//返回对象 from 类名
String hql="select t from TeacherEntity t";
//获得query对象
Query query= session.createQuery(hql);
//查询所有
List<Object> list= query.list();
for(Object obj:list){
System.out.println(
((TeacherEntity)obj).getTeacherName());
}
}
@Test
public void hql2(){
String hql="from TeacherEntity";
List<TeacherEntity> list=
session.createQuery(hql)
.list();
for(TeacherEntity t:list){
System.out.println(t.getTeacherName()+"/"+t.getTeacherClass());
}
}
条件查询 用占位符来代替条件
@Test
public void hql3(){
String hql="from TeacherEntity where teacherClass=?";
List<TeacherEntity> list=
session.createQuery(hql)
.setParameter(0,"JAVA")//替换占位符 0表示占位符的位置
.list();
for(TeacherEntity t:list){
System.out.println(t.getTeacherName()+"/"+t.getTeacherClass());
}
}
object [] 查询两个及两个以上的属性 将属性装入数组
@Test
public void hql4(){
String hql="select teacherName,teacherClass from TeacherEntity where teacherClass=?";
List<Object[]> list=
session.createQuery(hql)
.setParameter(0,"JAVA")
.list();
for(Object[] objs:list){
System.out.println(objs[0].toString()+"/"+objs[1].toString());
}
}
返回对象 利用了构造函数的形式(Dto)
@Test
public void hql5(){
String hql="select new com.lovo.hibernate.dto.TeacherDto(teacherName,teacherClass) " +
"from TeacherEntity where teacherClass=?";
List<TeacherDto> list=
session.createQuery(hql)
.setParameter(0,"JAVA")
.list();
for (TeacherDto dto:list){
System.out.println(dto.getUserName()+"/"+dto.getUserClass());
}
}
Map 利用了Map函数,查询两个及两个以上的类属性
@Test
public void hql6(){
String hql="select new map(teacherName,teacherClass) " +
"from TeacherEntity where teacherClass like ?";
List<Map> list=
session.createQuery(hql)
.setParameter(0,"JA%")
.list();
for(Map map:list){
System.out.println(map.get("0")+"/"+map.get("1"));
}
}
分页查询
//分页查询
@Test
public void hql8(){
int currentpage=2;
int pageCount=5;
String hql="from TeacherEntity where teacherName like ?";
List<TeacherEntity> list=
session.createQuery(hql)
.setParameter(0,"薛%")
.setFirstResult((currentpage-1)*pageCount) //起始位置
.setMaxResults(pageCount) //每页显示的行数
.list();
for (TeacherEntity t:list){
System.out.println(t.getTeacherName());
}
}
删除与修改
//删除
@Test
public void hql10(){
String hql="delete from TeacherEntity where teacherName=?";
int i= session.createQuery(hql)
.setParameter(0,"薛老师19")
.executeUpdate(); //执行修改、删除返回受影响的行数
System.out.println(i);
}
//修改
@Test
public void hql11(){
String hql="update TeacherEntity set teacherClass=? where teacherName=?";
int i= session.createQuery(hql)
.setParameter(0,"WEB2")
.setParameter(1,"薛老师18")
.executeUpdate();
System.out.println(i);
}