首页 >数据库 >mysql教程 >Mysql对空间数据库的支持及使用Hibernate Spatial对空间数据的持_MySQL

Mysql对空间数据库的支持及使用Hibernate Spatial对空间数据的持_MySQL

WBOY
WBOY原创
2016-06-01 13:12:571190浏览

Hibernate

1.空间数据:如果做地图方面的开发,那么对空间数据肯定不会陌生,也就是地图元素即,点,线,图形,它们有x,y坐标的信息

2.MySQL对于空间数据库本身就是支持的,只是支持的不太全面,实际上专业空间数据库非postgis莫属,之所以使用Mysql是因为项目中的数据库已经使用了它,而且对于地图方面的功能并不是很高,所以才有了这样的应该场景:使用MySQL做空间数据库,对于MySQL的空间数据库的操作,参见MySQL使用手册第19章中有详细的说明使用各空间函数的使用sql语句

3.Hibernate Spatial是一个免费开源的对于hibernate支持空间数据操作的扩展框架,版本目前有1.0,1.1,1.1.1,4.0四个版,用法基本相同,

         1.1支持hibernate3.5及以下,

         1.1.1支持Hibernate3.6;

         4.0支持hibernate4.x

        对于版本的支持问题,请根据个人的版本而定,必须对应,我在使用中就是吃了版本不对应的亏,使用Hibernate Spatial4.0与hibernate3.6使用,最后报出不支持的异常

        异常如下:

4.对于Hibernate Spatial以后的版本,好像以与不会独立的去发行,而是随着Hibernate5会一起存在,也就是可能会在Hibernate5中直接对空间数据的支持.

5.代码部分:(使用hibernate3.6.0+mysql5.5+hibernate spatial1.1.1)

实体类

public class TowerPoint{	private String line_id;	private Point point;	public String getLine_id()	{		return line_id;	}	public void setLine_id(String line_id)	{		this.line_id = line_id;	}	public Point getPoint()	{		return point;	}	public void setPoint(Point point)	{		this.point = point;	}}
对应的hbm.xml文件
<?xml version="1.0" encoding="utf-8"?><!-- Mapping file autogenerated by MyEclipse Persistence Tools --><hibernate-mapping>	<class name="com.tcly.test.TowerPoint" table="om_point">		<id name="line_id" type="java.lang.String">			<column name="POINT_ID" length="40"></column>			<generator class="assigned"></generator>		</id>		<property name="point" type="org.hibernatespatial.GeometryUserType">			<column name="POINT_SHARP"></column>		</property>	</class></hibernate-mapping>
对应的cfg.xml文件
<!-- 支持空间数据库的MySQL方言 -->		<property name="hibernate.dialect">org.hibernatespatial.mysql.MySQLSpatialDialect</property>
进行测试的代码:

hibernate工具类

import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class HibernateConnUtil{	private static SessionFactory sessionFactory;	static	{		try		{			Configuration config = new Configuration().configure();			sessionFactory = config.buildSessionFactory();		} catch (Exception ex)		{			ex.printStackTrace();		}	}	public static Session openSession()	{		Session session = sessionFactory.openSession();		return session;	}	public static void closeSession(Session session)	{		if (null != session)		{			session.clear();		}	}	public static void closeSessionFactory(SessionFactory sessionFactory)	{		if (null != sessionFactory)		{			sessionFactory.close();		}	}	public static void commitTransaction(Transaction transaction)	{		if (null != transaction)		{			transaction.commit();		}	}}
测试代码
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.tcly.eap.core.utils.HibernateConnUtil;import com.vividsolutions.jts.geom.Geometry;import com.vividsolutions.jts.geom.Point;import com.vividsolutions.jts.io.ParseException;import com.vividsolutions.jts.io.WKTReader;public class HibernateCURDTest{	public static SessionFactory sessionFactory;	public static Session session;	public static Transaction transaction;	@Before	public void init()	{		session = HibernateConnUtil.openSession();		transaction = session.beginTransaction();	}	@After	public void destory()	{		HibernateConnUtil.commitTransaction(transaction);		HibernateConnUtil.closeSession(session);		HibernateConnUtil.closeSessionFactory(sessionFactory);	}	@Test	public void testHibernateMapping() throws ParseException	{	TowerPoint towerPoint = new TowerPoint();		WKTReader formText = new WKTReader();		Geometry geom = null;				geom = formText.read("POINT(12.32 23.34)");				towerPoint.setLine_id("test001");		towerPoint.setPoint((Point) geom);		session.save(towerPoint);			}}
经过测试,可以保存到数据库中的表中,如果有朋友看到而且在编写过程中有什么问题,可以留言,我一定会回复的
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn