标量查询与实体查询"/>
hibernateModel使用方式,及扩展hibernate标量查询与实体查询
2019独角兽企业重金招聘Python工程师标准>>>
讲完了hibernateBean的标准用法,现在我们来讲解下hibernateModel的用法
日常开发中,总有很多列,页面或者接口,仅仅需要提供单张表的部分属性,或者多张表的每个部分属性的集合,那么此时,如果使用1对多,或者多对1 的方式可能不是很便捷了;这是可采用中间业务Model来实现查询显示
举个栗子:
A表 学生id,学生名,学生性别,年龄等等
B表 学校id, 学生id,奖金remark(干了某某事,备注什么的)等等
需要查询列表:
查询出所有学校,哪些学生(指定学生名),干了哪些事
仅需字段: 学校名,学生名,奖金,remark
Model设计
注意: 这里不指定@Table
@Entity
public class SchoolStudentModel {private String schoolName;/*** 学生名*/private String studentName;private String remark;@Column(name = "school_name")public final String getSchoolName() {return schoolName;}public final void setUserId(String schoolName) {this.schoolName= schoolName;}@Column(name = "student_name")public final String getStudentName() {return studentName;}public final void setStudentName(String studentName) {this.studentName= studentName;} @Column(name = "remark")public final String getRemark() {return remark;}public final void setRemark(String remark) {this.remark= remark;}
Dao查询
注意使用了addEntity(实体查询) 映射Model实体类参数
args 为参数集合, ? 占位符表示;
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();Query query = session.createSQLQuery(sql).addEntity(SchoolStudentModel.class);for(int i=0; args!=null && args.size()>0 && i<args.size(); i++){query.setParameter(i,args.get(i));}return query.list();
Sql 语句
select school.school_name,student.student_name,school.remak
from rem_shcool school inner join student_mian student
on school.student_id=student.student_id
整理下,因为时时有一样的查询列,所以扩展深入到了标量查询,和实体查询,以上是默认的实体查询
一 : 标量查询
了解引用至:
就算query是使用*来查询的,可能获得超过列出的这三个字段,也 仅仅会返回这三个字段。
对全部或者部分的标量值不设置类型信息也是可以的。
sess.createSQLQuery("SELECT * FROM CATS") .addScalar("ID", Hibernate.LONG) .addScalar("NAME") .addScalar("BIRTHDATE")
上面的addScalar()方法有两个作用
1:指定查询结果包含哪些数据列,没有被addScalar()选中的数据列不会出现在查询结果中,所以查询结果中只能遍历出来name和student_id两个数据列的值。
2:指定查询结果中数据列的数据类型。
二:实体查询:
实体查询与标量查询不同的是:标量查询只是返回一些标量的结果集,而实体查询返回的是数据表中全部数据列。
实体查询的两个条件:
1:查询返回某个数据表的全部数据列,要选出全部数据列(可以在SQL字符串中使用*来表示返回所有列)
2:该数据表有对应的持久化类映射
利用SQLQuery提供的addEntity()方法,将查询结果转换成实体。
转载于:
更多推荐
hibernateModel使用方式,及扩展hibernate标量查询与实体查询
发布评论