工作中学习 hiberante原生查询

本文介绍了一种基于Hibernate框架的距离查询优化方案。通过原生SQL结合地理坐标计算距离,并利用Hibernate进行结果转换,实现高效的数据检索。文章还探讨了查询结果的处理方式及返回格式。

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

SSH

hibernte 原生查询

query字段

 
public List<HouseIdDis> findByDinstance2(double lot,double lat,double dis){
//	this.getHibernateTemplate().cr
	String sql="select ID,(2 * 6378.137* ASIN(SQRT(POW(SIN(PI()*(111.86141967773438-lat)/360),2)+COS(PI()*33.07078170776367/180)* COS(lat * PI()/180)*POW(SIN(PI()*(33.07078170776367-lon)/360),2)))) as dis FROM  houser GROUP BY id HAVING dis<3000";
//	sql="select * from houser";
	Session s=this.getSessionFactory().getCurrentSession();
	
	Query q=s.createSQLQuery(sql).addScalar("ID", Hibernate.INTEGER).addScalar("dis", Hibernate.DOUBLE);
	List<HouseIdDis> hid=new ArrayList<HouseIdDis>();

	List l= q.list();
	for(int i=0;i<l.size();i++){
		HouseIdDis h=new HouseIdDis();
		Object[] temp=(Object[]) l.get(i);
		h.setId((Integer)temp[0]);
		h.setDis((Double)temp[1]);
		hid.add(h);
	}
	return hid;
}


 query返回的为二维数组

ID                 dis

1                     2433

2                   2433

距离查询新的解决方案。

hbernate查询第一个返回对象 第二个返回简间数据类型

/**
 * 根据距离查数据库 
 * @param dis 公里
 * @return  小于给定距离的 id
 */
 public String findByDinstance(double lot,double lat,double dis){
//	String sql="select house.id,getDistance(LON,'"+lot+"',LAT,'"+lat+"') as dis FROM  house GROUP BY id HAVING dis<"+dis;
	String sql="select *,getDistance(LON,'"+lot+"',LAT,'"+lat+"') as dis FROM  house GROUP BY id HAVING dis<"+dis;
	Session s=this.getSessionFactory().getCurrentSession();
	
//	Query q=s.createSQLQuery(sql).addScalar("id",Hibernate.INTEGER).addScalar("dis", Hibernate.DOUBLE);
	Query q=s.createSQLQuery(sql).addEntity(HouseBean.class).addScalar("dis", Hibernate.DOUBLE);
	List templ=q.list();
	JSONArray ja=new JSONArray();
	for (int i = 0; i < templ.size(); i++) {
		//第一条记录  是一个object数组	
		Object[] temp=(Object[]) templ.get(i);

		HouseBean hb  =(HouseBean) temp[0];
		double dis2  = (double) temp[1];
		
		JSONObject jo=(JSONObject) JSONValue.parse(hb.toString());
		jo.put("dis", dis2);
		ja.add(jo);
//		System.out.println(hb+"dis");
	}

	return ja.toJSONString();
}


 

 

 

query对象

sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);

cat 要有映射的 即对应的bean

注:sessin 不能close(), 框架会管理,关闭会报错的

原生查询使用的表字段为数据的表字段名

而使用hql查询应使用类名 属性名

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值