自定义typeHandler将包含经纬度对象插入到mysql的point类型的字段中

博客:https://www.emanjusaka.top

公众号:emanjusaka的编程栈
下面给出关键部分代码,完整代码请访问原文地址

mysql 中的 point 类型在 java 中没有对应的类型匹配,需要我们自定义 typeHandler 去处理。

环境参数

  • SpringBoot
  • MybatisPlus
  • mysql

代码实现

typeHandler

GeomPointTypeHandler.java

package top.emanjusaka.config.typeHandler;import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import top.emanjusaka.domain.GeomPoint;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class GeomPointTypeHandler extends BaseTypeHandler<GeomPoint> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, GeomPoint parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, parameter.toString());}@Overridepublic GeomPoint getNullableResult(ResultSet rs, String columnName) throws SQLException {String columnValue = rs.getString(columnName);return new GeomPoint().parse(columnValue);}@Overridepublic GeomPoint getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String columnValue = rs.getString(columnIndex);return new GeomPoint().parse(columnValue);}@Overridepublic GeomPoint getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {String columnValue = cs.getString(columnIndex);return new GeomPoint().parse(columnValue);}
}

Mapper

UserMapper.java

package top.emanjusaka.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import top.emanjusaka.domain.User;/*** @Author emanjusaka* @Date 2024/11/28 17:46* @Version 1.0*/
public interface UserMapper extends BaseMapper<User> {void savePoint(User user);User getUserById(Long id);}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.emanjusaka.mapper.UserMapper"><resultMap id="pointResultMap" type="top.emanjusaka.domain.User"><id column="id" property="id"/><result column="location" property="location"typeHandler="top.emanjusaka.config.typeHandler.GeomPointTypeHandler"/></resultMap><insert id="savePoint" parameterType="top.emanjusaka.domain.User">insert into user(id,location)values(#{id},ST_GeomFromText(#{location,typeHandler=top.emanjusaka.config.typeHandler.GeomPointTypeHandler}))</insert><select id="getUserById" parameterType="long" resultType="top.emanjusaka.domain.User">select id,ST_ASTEXT(location) location from user where id = #{id}</select>
</mapper>

测试类

UserTest.java

package top.emanjusaka.point;import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import top.emanjusaka.domain.GeomPoint;
import top.emanjusaka.domain.User;
import top.emanjusaka.mapper.UserMapper;import javax.annotation.Resource;/*** @Author emanjusaka* @Date 2024/11/28 17:41* @Version 1.0*/
@SpringBootTest
public class UserTest {private static final Logger log = LoggerFactory.getLogger(UserTest.class);@Resourceprivate UserMapper userMapper;@Testvoid testPoint() {User user = new User();user.setLocation(new GeomPoint(3.14, 5.15));userMapper.savePoint(user);}@Testvoid testSelectPoint() {User user = userMapper.getUserById(1L);System.out.println("point = " + user.getLocation().getLat());}
}

测试结果

插入数据:

image-20241203174019487

查询数据:

image-20241203174204434


谦学于心,谷纳万物,静思致远,共筑收获之旅!
上面代码展示了关键部分,完整代码请访问原文地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cortex-m3基础-概览

cortex-m3是一个32位处理器内核:总线(数据、地址)宽度是32位、寄存器位宽是32位;内核结构为哈佛结构,拥有独立的数据总线和指令总线,可以并行进行指令执行和数据访问;简介cortex-m3是一个32位处理器内核:总线(数据、地址)宽度是32位、寄存器位宽是32位;内核结构为哈…

渠道管理智慧:与新华三谈数字化革新与共赢策略

智算智存全能担当 新华三集团作为数字化解决方案领导者,致力于成为客户业务创新、数字化转型值得信赖的合作伙伴。作为紫光集团旗下的核心企业,新华三通过深度布局"云-网-算-存-端"全产业链,不断提升数字化和智能化赋能水平。新华三拥有计算、存储、网络、5G、安全、…

RocksDB 内存超限问题剖析

在使用 RocksDB 存储引擎的过程中,有部分开发者遇到了内存使用超出预期的情况。本文针对这一问题展开了深入分析,并提出了相应的解决方案和优化建议,提升系统性能和稳定性。作者:来自 vivo 互联网服务器团队- Zeng Luobin在使用 RocksDB 存储引擎的过程中,有部分开发者遇到…

20242822《Linux内核原理与分析》第十二周作业

缓冲区溢出漏洞实验 一、实验简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。 二、实验准备…

信而泰网络测试仪校准解决方案

一、影响仪表精度的因素 网络测试仪是用于对数据网络及其相关设备性能参数进行测试的仪表,可以模拟网络终端产生流量,进行网络性能测试,对网络状态进行实时监测,分析和统计。数字计量对于精准数据的网络测试仪来说是一剂强心针,它能促进网络测试仪的规范化、数据化、准确化…

京准电钟:计算机网络监控系统搭建NTP校时服务器

京准电钟:计算机网络监控系统搭建NTP校时服务器京准电钟:计算机网络监控系统搭建NTP校时服务器 京准电钟:计算机网络监控系统搭建NTP校时服务器 京准电钟官微——ahjzsz 我们都知道,对于监控设备来说,设备时间的统一和精准,是保障录像文件及日志可靠的关键。 虽然录像机、…

依靠 PROFINet 与 Modbus 协议让西门子 PLC 成功连接 RS485 接口变频器

在工业网络环境中,不同网络协议的沟通不畅是否曾让您倍感困扰?别担心,捷米特JM-RTU-PN 数据通讯模块横空出世,为您化解这一棘手难题!此模块专注于 PROFINet 网络与Modbus 网络间的数据交互,能够巧妙地将 RS485 网络接入西门子 PLC的PROFINet 网络架构之中,并且全面支持多…

广成CAN-485-西门子PLC调试

1,TBOX波特率500K, 2,信号解析

易基因:WGBS揭示Vpr蛋白在HIV-1感染中对CD4+ T细胞DNA甲基化变化的作用|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 全球约有3800万HIV-1感染者,每年新增感染者约150万。HIV-1主要攻击CD4+ T细胞,导致其耗竭,最终发展为艾滋病和死亡。尽管抗逆转录病毒治疗有效抑制HIV-1复制,但由于病毒在潜伏感染细胞中的持续存在,这种病…

pandas中的groupby函数分组函数和 mean 求平均值函数

import pandas as pd #建一个集合有两列 一列是班级列;第二列是成绩列 data = {class: [A, A, B, B, B],score: [80, 90, 70, 85, 95]} # 使用熊猫库的DateFrame类 将上面两列数据 二维结构化 复制给df df = pd.DataFrame(data) #对df调用分组方法groupby,对其再取平均值 结果…

文案课程

促销要写的明显 -不要恶趣味 -谐音可以用于写文案 -数字描述文案是有必要的,清晰明显

转载:【AI系统】模型压缩基本介绍

随着神经网络模型的复杂性和规模不断增加,模型对存储空间和计算资源的需求越来越多,使得部署和运行成本显著上升。模型压缩的目标是通过减少模型的存储空间、减少计算量或提高模型的计算效率,从而在保持模型性能的同时,降低模型部署的成本。模型压缩的目标可以概括为以下几…