hibernateModel使用方式,及扩展hibernate标量查询与实体查询

本文介绍了一种使用HibernateModel进行查询的高效方式,特别是在需要从多个表中抽取特定字段的情况下。通过具体的例子说明如何设计Model,并提供了DAO查询及SQL语句的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

讲完了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 

 

整理下,因为时时有一样的查询列,所以扩展深入到了标量查询,和实体查询,以上是默认的实体查询

一 : 标量查询 

 

了解引用至:  http://blog.youkuaiyun.com/seng3018/article/details/5860412 

 就算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()方法,将查询结果转换成实体。

 

 

转载于:https://my.oschina.net/java1314/blog/823778

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值