`
hilliate
  • 浏览: 133562 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Compass学习文档(3) (转)

阅读更多

      下面讲一下高级部分Compass与Hibernate,Spring的集成。Compass内部有对Hibernate,Spring的支持,如果配置好了,可以在建立和更新索引的时候不用Compass写一句代码。爽吧!~不过集成它们比较麻烦那就看我一步一步的来吧:
1.首先把Hibernate和Spring集成:

      来个例子吧,先看数据库脚本(MySql):

CREATE TABLE `article` (

 `Id` int(11) NOT NULL auto_increment,

 `title` varchar(40) NOT NULL default '',

 `author` int(11) default '0',

 `publish_date` date NOT NULL default '0000-00-00',

 PRIMARY KEY (`Id`)

) TYPE=MyISAM;

 

CREATE TABLE `author` (

 `Id` int(11) NOT NULL auto_increment,

 `username` varchar(20) NOT NULL default '',

 `password` varchar(20) NOT NULL default '',

 `age` smallint(6) default '0',

 PRIMARY KEY (`Id`)

) TYPE=MyISAM;

 

      建立一个工程叫CompassHibernateSpring

      说明一下开发环境:eclipse3.2+myeclipse5.0+springtide+middlegen(注意要在工程上加入MyEcilpse的Hibernate和Spring能力。

      然后用Hibernate进行装配,Hibernate有三个配置文件:hibernate.cfg.xml, Article.hbm.xml,Author.hbm.xml

      具体的结构请看Hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC 

    "-//Hibernate/Hibernate Configuration DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="connection.username">root</property>

        <property name="connection.password">java</property>

        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>

        <property name="show_sql">true</property>

        <mapping resource="org/li/compass/shibernate/Article.hbm.xml" />

        <mapping resource="org/li/compass/shibernate/Author.hbm.xml" />

    </session-factory>

</hibernate-configuration>

Article.hbm.xml:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>

<!-- 

    Created by the Middlegen Hibernate plugin 2.2

    http://boss.bekk.no/boss/middlegen/

    http://www.hibernate.org/

-->

<class 

    name="org.li.compass.shibernate.Article" 

    table="article"

    lazy="false"

> 

    <id

        name="id"

        type="java.lang.Integer"

        column="Id"

    >

            <meta attribute="field-description" inherit="false">

               auto_increment

            </meta>

        <generator class="increment" />

    </id>

    <property

        name="title"

        type="java.lang.String"

        column="title"

        not-null="true"

        length="40"

    />

    <property

        name="author"

        type="java.lang.String"

        column="author"

        length="11"

    />

    <property

        name="publishDate"

        type="java.util.Date"

        column="publish_date"

        not-null="true"

        length="10"

    />

    <!-- Associations -->

 

</class>

</hibernate-mapping>

Author.hbm.xml:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping>

<!-- 

    Created by the Middlegen Hibernate plugin 2.2

    http://boss.bekk.no/boss/middlegen/

    http://www.hibernate.org/

-->

<class 

    name="org.li.compass.shibernate.Author" 

    table="author"

    lazy="false"

> 

    <id

        name="id"

        type="java.lang.Integer"

        column="Id"

    >

            <meta attribute="field-description" inherit="false">

               auto_increment

            </meta>

    

        <generator class="increment" />

    </id>

    <property

        name="username"

        type="java.lang.String"

        column="username"

        not-null="true"

        length="20"

    />

    <property

        name="password"

        type="java.lang.String"

        column="password"

        not-null="true"

        length="20"

    />

    <property

        name="age"

        type="java.lang.Short"

        column="age"

        length="6"

    />

    <!-- Associations -->


</class>

</hibernate-mapping>

      具本的POJO类看源代码吧:

      由于这里是讲Compass的,有关Hibernate和Spring的内容网上很多中文资料的这里就不介绍了。

      下面讲的是跟着我一步一步用Spring把Hibernate和Compass集成起来。

      在applicationContext.xml中:

<bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref local="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="dialect">

                    org.hibernate.dialect.MySQLDialect

                </prop>

                <prop key="show_sql">true</prop>

            </props>

        </property>

        <property name="mappingDirectoryLocations">

            <list>

                <value>org/li/compass/shibernate</value>

            </list>

        </property>

    </bean>

<bean id="dataSource"

        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

        <property name="url">

            <value>jdbc:mysql://localhost:3306/test</value>

        </property>

        <property name="username">

            <value>root</value>

        </property>

        <property name="password">

            <value>java</value>

        </property>

    </bean>

    <bean id="hibernateTemplate"

        class="org.springframework.orm.hibernate3.HibernateTemplate">

        <property name="sessionFactory">

            <ref local="sessionFactory" />

        </property>

    </bean>

<bean id="articleDAO" class="org.li.compass.shibernate.dao.ArticleDAO">

        <property name="hibernateTemplate">

            <ref local="hibernateTemplate"/>

        </property>

    </bean>

    <bean id="authorDAO" class="org.li.compass.shibernate.dao.AuthorDAO">

        <property name="hibernateTemplate">

            <ref local="hibernateTemplate"/>

        </property>

    </bean>

<bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory">

            <ref local="sessionFactory" />

        </property>

    </bean>

      以上的配置是将Spring和Hibernate集成起来。

      下面我们将加入Compass的配置:

      由于我们只对文章进行搜索所以只对文章建立索引

      Article.cpm.xml:

<!DOCTYPE compass-core-mapping PUBLIC 

    "-//Compass/Compass Core Mapping DTD 1.0//EN"

    "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd">

<compass-core-mapping package="org.li.compass.shibernate">

    <class name="Article" alias="article">

        <!-- 这是必须有的 -->

        <id name="id"/>

        <!-- 你可以通过这个配置来在底层给这个对象加一个Field("type","java") -->

        <constant>

            <meta-data>type</meta-data>

            <meta-data-value>java</meta-data-value>

        </constant>

        <!-- 配置一下属性 -->

        <property name="title">

            <meta-data>titleIndex</meta-data>

        </property>

        <property name="publishDate">

            <meta-data>publishDateIndex</meta-data>

        </property>

        <property name="author">

            <meta-data>author</meta-data>

        </property>

    </class>

</compass-core-mapping>

      然后回到applicationContext.xml里:

      看看怎么集成的,在Compass中有个org.compass.gps.impl.SingleCompassGps是对Compass进行实时更新的,而org.compass.spring.device.hibernate.SpringHibernate3GpsDevice

      它是和Hibernate集成并且对Hibernate的insert,delete,update进行自动的更新,所以说这样就不

      我们为Compass写一句代码了。不过这两个类对Compass和Hibernate的实时功能也可以用Spring的AOP来实现(这里也不讨论了)。剩下的就是用Spring的IoC来支Compass的初始化功能进行注入,第一个是:

<bean id="compassConfiguration"

        class="org.compass.core.config.CompassConfiguration" />

 第二个是:

<bean id="compass" class="org.compass.spring.LocalCompassBean">

        <!-- 这里配置只用作建立索引的类 -->

        <property name="classMappings">

            <list>

                <value>org.li.compass.shibernate.Article</value>

            </list>

        </property>


        <property name="resourceDirectoryLocations">

            <list>

                <value>org/li/compass/shibernate</value>

            </list>

        </property>

        <property name="compassConfiguration"

            ref="compassConfiguration" />

        <property name="compassSettings">

            <props>

                <prop key="compass.engine.connection">target/test</prop>

                <prop key="compass.transaction.factory">

                    org.compass.spring.transaction.SpringSyncTransactionFactory

                </prop>

            </props>

        </property>

        <property name="transactionManager" ref="transactionManager" />

    </bean>

      在上面配置只用作建立索引的类就可以

      还有与Hibernate和Spring集成差不多。有个CompassTemplate的DAO模板也要注入

<bean id="compassTemplate" class="org.compass.core.CompassTemplate">

        <property name="compass">

            <ref local="compass"/>

        </property>

    </bean>

      还有关键的两个类的注入:

<bean id="hibernateGpsDevice"

        class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">

        <property name="name">

            <value>hibernateDevice</value>

        </property>

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"

        init-method="start" destroy-method="stop">

        <property name="compass" ref="compass" />

        <property name="gpsDevices">

            <list>

                <ref local="hibernateGpsDevice" />

            </list>

        </property>

    </bean>

      最后呢就是要在articleDAO上注入CompassTemplate因为我们要搜索的时候用到CompassTemplate了(CompassTemplate是支持事务的)

<property name="compassImplements">

            <ref local="compassImplements"/>

        </property>

      这样配置就ok了

      下面测试一下吧:

      新建JUnit测试用例:

public class TestCompass extends TestCase

{

    private ClassPathXmlApplicationContext context = null;

    protectedvoid setUp() throws Exception

    {

        context = new ClassPathXmlApplicationContext("applicationContext.xml");

    }

    protected void tearDown() throws Exception

    {

    }

    public void insertTest()

    {

        ArticleDAO articleDao = (ArticleDAO) context.getBean("articleDAO");

        AuthorDAO authorDao = (AuthorDAO) context.getBean("authorDAO");

        Article article = new Article();

        Author author = new Author();

        author.setAge((short)21);

        author.setUsername("javafish");

        author.setPassword("java");

        article.setTitle("Compass学习文档");

        article.setPublishDate(new Date());

        article.setAuthor("javafish");

        authorDao.save(author);

        articleDao.save(article);

        

    }

    public void find()

    {

        ArticleDAO articleDao = (ArticleDAO) context.getBean("articleDAO");

        Article article = articleDao.find("文档");

        System.out.println(article.getPublishDate());

    }

}

      看到没有在insertTest()里根本看不出用Compass来全是Hibernate和Spring的代码。

      在对像article和author被写入数据库的同时,article也被写入索引了。

      看到了Compass与Hibernate,Spring集成的威力了吧。

      我们可以用Lucene测试一下。

publicvoid lucene() throws IOException, ParseException

    {

        IndexSearcher indexSearcher = new IndexSearcher("D:""workspace""CompassSpringHibernate""target""test""index""article");

        QueryParser queryParser = new QueryParser("titleIndex",new StandardAnalyzer());

        Query query = queryParser.parse("学习");

        Hits hits = indexSearcher.search(query);

        Document doc = null;

        for(int i=0;i<hits.length();i++)

        {

            doc=hits.doc(i);

            System.out.println(doc.get("titleIndex"));

            System.out.println(doc.get("publishDateIndex"));

        }

    }

 
      会发现结果搜索成功了~~

      而我们查询的时候就可以在DAO类里封装CompassQuery的操作。

      其它具体还是看帮助文档吧。^_^

分享到:
评论

相关推荐

    Compass学习文档1

    Compass学习文档1.doc

    compass和wellplan学习总结.doc

    compass和wellplan学习总结.doc

    compass和wellplan学习总结材料.doc

    compass和wellplan学习总结材料.doc

    2022年度复盘2023年度计划模板 -year compass简体中文.pdf

    该文档为一份年度复盘与计划模板,名为"Year Compass"。它旨在帮助用户回顾过去一年的重要时刻、成就和挑战,并基于这些反思来规划新的一年的目标和梦想。模板鼓励用户选择代表过去一年的词汇、描述重要事件、评估...

    安卓(Android)程序开发初级教程技术文档【视频+教程+源码】

    网上发行的一个资料很适合初学者,安卓经典Android开发入门教程,有实例,有android开发视频教程,还附带源码,欢迎各位下载一起学习! 教程(一) 平台简介  令人激动的Google手机操作系统平台-Android正式发布了,...

    网络爬虫+MongoDB库

    • Compass能够可视化的查看数据库中的数据,而且可以添加集合、文档等操作。 • 实际编码环节,如果遇到未定义的数据库或集合的话,MongoDB会自动创建这些内容。 内容概要:BSON、查询、更新、插入、删除、索引、...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    + Camera, GPS, compass, and accelerometer: 都依赖于硬件支持。 + Rich development environment: 包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且 提供了 Eclipse 的插件。 最底层的是一个 ...

    自己动手写搜索引擎

    该书详细讲解了搜索引擎与信息检索基础,Lucene入门实例,Lucene索引的建立,使用Lucene进行搜索,排序,过滤和分页,Lucene的分析器,对Word、Excel和PDF格式文档的处理,Compass搜索引擎框架,Lucene分布式和...

    java源码包3

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    bootstrap精简教程_动力节点Java学院整理

    bootstrap 的学习非常简单,并且它所提供的样式又非常精美。...这是 Bootstrap 从 Less 到 Sass 的源码移植项目,用于快速地在 Rails、Compass 或 只针对 Sass 的项目中引入。 其实我们不用下

    arvoreAVL:帮助Roraima联邦研究所的系统分析和开发课程的毕业生学习“二叉树”数据结构。 我们要求新学员不断更新此代码,并在代码正文中保留尽可能多的文档,以便更好地理解。

    该项目包括创建和完善用Java开发的工具,以协助Roraima联邦研究所系统分析和开发课程的新毕业生学习数据结构专业,重点是研究“二叉树”类型。 ”。 我们要求新学员不断更新此代码,并在代码正文中保留尽可能多的...

    java源码包---java 源码 大量 实例

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包2

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包4

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    演示网钩

    通过此存储库,您将学习如何设置tagtog Webhook以及如何管理由Webhook生成的事件通知: 将文档上载到tagtog后,使用文档ID从tagtog获取文档内容。 要使用spaCy模型注释文档文本,并将spaCy注释转换为格式。 将带...

    JAVA上百实例源码以及开源项目

    笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

Global site tag (gtag.js) - Google Analytics