2017-02-02 5 views
0

Я работаю над сервером Spring загрузки, основанным на пространственных функциях.Mybatis mapper to Mysql Point object

И я застрял в матчевом матче с настроенным объектом.

Теперь я создал таблицу и один столбец startLocation, который является типом Point.

CREATE TABLE `vehicle`.`route` (
    `createtime` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, 
    `updatetime` TIMESTAMP NULL, 
    `startLocation` POINT NULL, 
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`)); 

И мой путь объект Java является

@Table(name = "route") 
public class Route extends Base { 
    Point startLocation; 

    public Location getStartLocation() { 
     return startLocation; 
    } 

    public void setStartLocation(Location startLocation) { 
     this.startLocation = startLocation; 
    } 

    ....other fields 
} 

И мой Расположение объекта просто держит широты и долго, как двойное значение.

package com.supplyplatform.pojo; 

public class Location { 
    double Lat; 
    double Long; 

    public double getLat() { 
     return Lat; 
    } 
    public void setLat(double lat) { 
     Lat = lat; 
    } 
    public double getLong() { 
     return Long; 
    } 
    public void setLong(double l) { 
     Long = l; 
    } 

} 

Мои RouteMapper.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="com.supplyplatform.mapper.RouteMapper"> 
    <resultMap type = "com.supplyplatform.pojo.Route" id="Route"> 
     <id column="id" jdbcType="INTEGER" property="id" /> 
     <result column="startpoint" jdbcType="OTHER" property="startLocation" /> 
    </resultMap> 

</mapper> 

И это не возвращает исключение typehandler. No typehandler found for property startLocation Я провел там несколько дней. Заранее спасибо.

UPDATE: Я пытаюсь создать связь между вложенной результирующей картой. Новый файл 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="com.supplyplatform.mapper.RouteMapper"> 
    <select id="selectRoute" resultMap="Route"> 
     SELECT *, X(startpoint) as x, Y(startpoint) as y FROM vehicle.vc_route 
    </select> 
    <resultMap type = "com.supplyplatform.pojo.Route" id="Route"> 
     <id column="id" jdbcType="INTEGER" property="id" /> 
     <association property="startLocation" resultMap="Location" /> 
    </resultMap> 
    <resultMap type = "com.supplyplatform.pojo.Location" id="Location"> 
     <result column="y" property="lat" /> 
     <result column="x" property="long" /> 
    </resultMap> 
</mapper> 

Но это всегда не возвращает исключения обработчика типа для Location startLocation.

ответ

0

Местоположение представляет собой сложный тип, тогда вы должны указать, как его отображать.

Вы можете либо разложить его в виде 2 простых значений типа: SELECT ST_X(startPoint) as x, ST_Y(startpoint) as y, а затем карту ассоциации: Обратите внимание, что, как указано в this post и в Mysql doc, вы должны использовать st_x/st_y, так как х/у осуждаются из Mysql 5.7. 6.

<?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="com.supplyplatform.mapper.RouteMapper"> 
    <resultMap type = "com.supplyplatform.pojo.Route" id="Route"> 
     <id column="id" jdbcType="INTEGER" property="id" /> 
     <association property="startLocation" resultMap="Location" /> 
    </resultMap> 
    <resultMap type = "com.supplyplatform.pojo.Location" id="Location"> 
     <result column="y" property="lat" /> 
     <result column="x" property="long" /> 
    </resultMap> 
</mapper> 

Или вы можете определить обработчик типа:

public class PointTypeHandler extends org.apache.ibatis.type.BaseTypeHandler<Location> { 

    Location getNullableResult(ResultSet rs, String columnName) { 
    Location location = new Location(); 
    Object point = rs.getObject(columnName); 
    /* whatever is required to fill Location object */ 
    return location 
    } 
} 

Это JDBC код, this post may provide some clues.

и ссылаться на него в отображении: <result column="startpoint" jdbcType="OTHER" property="startLocation" typeHandler="PointTypeHandler"/>

+0

Я пытаюсь вложенную resultMap подход, но он всегда возвращает исключение Нет typehandler я обновил вопрос. – Mix

+0

Не 'SELECT *' потому что в результате набор результатов содержит столбец с именем _startLocation_, а Mybatis пытается (автоматически) сопоставить его с свойством _startLocation_, потому что имя столбца совпадает с именем свойства. – blackwizard

+0

, так что нужно поставить «Начальную точку местоположения» в качестве поля объекта Route? Исключение всегда выбрасывается отсюда. – Mix

Смежные вопросы