我在MySQL中有以下表格
CREATE TABLE `place` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) DEFAULT NULL,
`STREET_NUMBER` int(11) DEFAULT NULL,
`ROUTE` varchar(255) DEFAULT NULL,
`LOCALITY` varchar(255) DEFAULT NULL,
`ADM_AREA_L1` varchar(255) DEFAULT NULL,
`ADM_AREA_L2` varchar(255) DEFAULT NULL,
`COUNTRY` varchar(100) DEFAULT NULL,
`POSTAL_CODE` varchar(10) DEFAULT NULL,
`FORMATTED_ADDRESS` varchar(1000) DEFAULT NULL,
`LOCATION` point DEFAULT NULL,
`CLOSING_TIME` time DEFAULT NULL,
`CREATION_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
它有一个POINT类型的字段,用于对该字段进行地理定位查询。 jooq生成的Pojo如下:
public class Place implements java.io.Serializable {
private static final long serialVersionUID = -1847682719;
private java.lang.Long id;
private java.lang.String name;
private java.lang.Integer streetNumber;
private java.lang.String route;
private java.lang.String locality;
private java.lang.String admAreaL1;
private java.lang.String admAreaL2;
private java.lang.String country;
private java.lang.String postalCode;
private java.lang.String formattedAddress;
private java.lang.Object location;
private java.sql.Time closingTime;
// getters and setters
}
这是我想要执行的查询类型:
插入新记录。 POINT数据类型的sql为:
INSERT INTO PLACE(LOCATION) VALUES(POINT(1,1));
从POINT数据类型获取纬度和经度。 sql将是:
SELECT X(LOCATION), Y(LOCATION) FROM PLACE;
使用距离范围查询地点。 sql将是:
SELECT *
FROM PLACE
WHERE ST_WITHIN(LOCATION, ENVELOPE(LINESTIRNG(
POINT(@lon - @distance / abs(cos(radians(@lat)) * 69), @lat - (@distance / 69)),
POINT(@lon + @distance / abs(cos(radians(@lat)) * 69), @lat + (@distance / 69))
)))
ORDER BY ST_DISTANCE(POINT(<lon>, <lat>), LOCATION);
我是否必须为每种情况创建CustomField
(插入,获取纬度和经度,按距离范围查询,按距离排序)?
如果要创建CustomField
。 CustomField
什么?因为LOCATION
表中jooq生成的Place
字段属于DataType<Object>
类型。
我尝试执行设置LOCATION
字段的插入,但由于execute()
的{{1}}方法未定义,因此无法编译。