1.数据库函数定义

//继承默认的数据库Dialect,注册自定义sql函数
class CustomMysql8Dialect : MySQL8Dialect() {init {val factor = "?1"val latitude1 = "?2"val longitude1 = "?3"val latitude2 = "?4"val longitude2 = "?5"//高德地图距离计算registerFunction("dis", SQLFunctionTemplate(DoubleType.INSTANCE,"""asin(sqrt(pow(cos($latitude1 * $factor) * cos($longitude1 * $factor)-cos($latitude2 * $factor) * cos($longitude2 * $factor),2) +pow(cos($latitude1 * $factor) * sin($longitude1 * $factor)-cos($latitude2 * $factor) * sin($longitude2 * $factor),2) +pow(sin($latitude1 * $factor)-sin($latitude2 * $factor),2))/ 2.0) * 1.27420015798544E7""".trimIndent()))}
}//高德地图经纬度类
class LatLng(latitude: Double, longitude: Double) {private val latitude: Doubleprivate val longitude: Doubleinit {this.longitude = if (-180.0 <= longitude && longitude < 180.0) formatDouble(longitude)else formatDouble(((longitude - 180.0) % 360.0 + 360.0) % 360.0 - 180.0)this.latitude = formatDouble(max(-90.0, min(90.0, latitude)))}companion object {private var decimalFormat: DecimalFormat = DecimalFormat("0.000000", DecimalFormatSymbols(Locale.US))private fun formatDouble(double: Double): Double = java.lang.Double.parseDouble(decimalFormat.format(double))}//高德地图距离计算fun calculateLineDistance(other: LatLng): Double {val longitude1 = this.longitudeval latitude1 = this.latitudeval longitude2 = other.longitudeval latitude2 = other.latitudeval factor = 0.01745329251994329return asin(sqrt(pow(cos(latitude1 * factor) * cos(longitude1 * factor) -cos(latitude2 * factor) * cos(longitude2 * factor), 2.0) +pow(cos(latitude1 * factor) * sin(longitude1 * factor) -cos(latitude2 * factor) * sin(longitude2 * factor), 2.0) +pow(sin(latitude1 * factor) -sin(latitude2 * factor), 2.0))/ 2.0) * 1.27420015798544E7}
}
2.配置JPA使用自定义Dialect

spring.jpa.properties.hibernate.dialect=包名.CustomMysql8Dialect
3.项目中使用案例

val order = mutableListOf<Order>()
if (latitude != null && longitude != null) {val function = cb.function("dis", Double::class.java,cb.literal(0.01745329251994329),//前端传来的经纬度cb.literal(latitude),cb.literal(longitude),//数据库的经纬度字段shopInfo[ShopInfo_.latitude],shopInfo[ShopInfo_.longitude])order.add(when (distanceSort) {"desc" -> cb.desc(function)"asc" -> cb.asc(function)else -> cb.asc(function)})
}
query.orderBy(*order.toTypedArray()).groupBy(root[Merchant_.shop][Shop_.id]).where(*restrictions.toTypedArray()).restriction

高德地图经纬度距离数据库排序,Spring Data JPA,Kotlin 实现版本相关推荐

  1. 使用Spring Data JPA进行分页和排序

    通过代码示例学习使用Spring Data JPA进行分页和排序 . 了解如何使用Springs PagingAndSortingRepository接口获取分页和排序结果. 1概述 在处理大量数据时 ...

  2. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  3. hql实例 jpa_SpringBoot学习笔记九:Spring Data Jpa的使用

    Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口 ...

  4. Spring Data JPA问题汇总

    刚进公司,发现都用的Spring Data JPA,一脸懵,知乎上遇到了一个大佬写的文章,非常详细,分享一下,我把大佬的文章整理了一下格式,比较好看了,原文链接:https://zhuanlan.zh ...

  5. 使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API

    你好朋友, 在本教程中,您将学习以下内容: 1.在Spring Boot中配置Spring Rest,Spring Data JPA和H2 2.使用Spring Boot创建Springful服务端点 ...

  6. Spring Boot的Spring Data JPA示例

    1.简介 在本文中,我们将演示如何利用功能强大的Spring Data JPA API与本课程中的数据库(内存中的H2数据库)进行交互. Spring Data JPA提供了一组非常强大且高度抽象的接 ...

  7. SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...

  8. Android开发之百度地图(soso地图,搜狗地图,阿里云地图)转高德地图经纬度的方法

    //将百度地图经纬度转换为高德地图经纬度CoordinateConverter converter = new CoordinateConverter(this);// CoordType.BAIDU ...

  9. Spring Data Jpa 实体类自动创建数据库表失败解决

    先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...

  10. Spring Boot文档阅读笔记-使用Spring Data JPA连接多源数据库(MySQL和Oracle)

    下面这个小项目展示了如何连接2个数据库,一个是Oracle,一个是MySQL. 关键的Maven依赖: <dependency><groupId>org.springframe ...

最新文章

  1. springboot webjar使用
  2. 几种机器学习算法的偏差以及防范
  3. enumerate()函数用法
  4. C++ 十字链表图转java版
  5. Java-Web JSP指令、javabean和EL表达式
  6. Spring5 版本新特性简述
  7. linux学习手册,Linux命令学习手册-ps
  8. 数据泵 远程服务端数据导出
  9. 极客学院微信小程序视频教程
  10. php源码添加多国语言包,为win7系统添加多国语言包的方法
  11. 怎么把Word转成PDF?转换方法很简单
  12. linux pack文件镜像,使用buildpack-deps 构建自己的入容器镜像
  13. linux系统日志报错kernel,Linux 系统日志 kernel: __ratelimit: xxx callbacks suppressed-Fun言...
  14. Android音频子系统(七)------数字耳机播192KHz音乐卡顿问题解析
  15. 正面管教php_正面管教之PHP(家长帮助家长)
  16. Kinect体感互动解决方案——体感人影粒子
  17. Python中定义函数的关键字是什么?一起来学习下吧
  18. bzoj 1934: [Shoi2007]Vote 善意的投票(最小割)
  19. android P 修改wifi热点默认名称和密码
  20. python练习题:045:正常血压

热门文章

  1. java开发实习报告_JAVA实习报告 (7000字)
  2. 【字符串】13. 罗马数字转整数
  3. 谷歌浏览器上传下载奔溃问题解决方法
  4. 宝马i3自动停泊技术
  5. CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)
  6. 净初级生产力(NPP)空间分布数据汇总整理
  7. 0.99元用7天,金山云大米云主机给你这个机会!
  8. 万能免费信息采集软件-免费网站信息内容数据采集软件
  9. IP地址的ABC类划分
  10. Guice依赖注入(Scope)