<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 33,  comments - 11,  trackbacks - 0
             下面講一下高級部分CompassHibernateSpring的集成。Compass內(nèi)部有對Hibernate,Spring的支持,如果配置好了,可以在建立和更新索引的時候不用Compass寫一句代碼。爽吧!~不過集成它們比較麻煩那就看我一步一步的來吧:

    1.首先把HibernateSpring集成:

    來個例子吧:

    先看數(shù)據(jù)庫腳本(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

    說明一下開發(fā)環(huán)境:eclipse3.2+myeclipse5.0+springtide+middlegen(注意要在工程上加入MyEcilpseHibernateSpring能力。

    然后用Hibernate進(jìn)行裝配,Hibernate有三個配置文件:hibernate.cfg.xml, Article.hbm.xml,Author.hbm.xml

    具體的結(jié)構(gòu)請看:

    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的,有關(guān)HibernateSpring的內(nèi)容網(wǎng)上很多中文資料的這里就不介紹了。

    下面講的是跟著我一步一步用SpringHibernateCompass集成起來。

    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的配置:

    由于我們只對文章進(jìn)行搜索所以只對文章建立索引

    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進(jìn)行實時更新的,而org.compass.spring.device.hibernate.SpringHibernate3GpsDevice

    它是和Hibernate集成并且對Hibernateinsert,delete,update進(jìn)行自動的更新所以說這樣就不

    我們?yōu)?/span>Compass寫一句代碼了。不過這兩個類對CompassHibernate的實時功能也可以用Spring

    AOP來實現(xiàn)(這里也不討論了)。剩下的就是用SpringIoC來支Compass的初始化功能進(jìn)行

    注入:

    第一個是:

    <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>

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

    還有與HibernateSpring集成差不多。有個CompassTemplateDAO模板也要注入

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

            <property name="compass">

                <ref local="compass"/>

            </property>

        </bean>

    還有關(guān)鍵的兩個類的注入:

    <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是支持事務(wù)的)

    <property name="compassImplements">

                <ref local="compassImplements"/>

            </property>

    這樣配置就ok了

    下面測試一下吧:

    新建JUnit測試用例:

    publicclass TestCompass extends TestCase

    {

        private ClassPathXmlApplicationContext context = null;

        protectedvoid setUp() throws Exception

        {

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

        }

        protectedvoid tearDown() throws Exception

        {

        }

        publicvoid 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學(xué)習(xí)文檔");

            article.setPublishDate(new Date());

            article.setAuthor("javafish");

            authorDao.save(author);

            articleDao.save(article);

           

        }

        publicvoid find()

        {

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

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

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

        }

    }

    看到?jīng)]有在insertTest()里根本看不出用Compass來全是Hibernate和Spring的代碼。

    在對像article和author被寫入數(shù)據(jù)庫的同時,article也被寫入索引了。

    看到了CompassHibernate,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("學(xué)習(xí)");

            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"));

            }

        }

    會發(fā)現(xiàn)結(jié)果搜索成功了~~

    而我們查詢的時候就可以在DAO類里封裝CompassQuery的操作。

    其它具體還是看幫助文檔吧。^_^

    posted on 2007-12-18 11:07 方濤升 閱讀(960) 評論(1)  編輯  收藏 所屬分類: lucene

    FeedBack:
    # re: Compass學(xué)習(xí)文檔(3)
    2011-01-12 15:10 | 對對對
    有意思嗎?????抄來抄去  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 女人裸身j部免费视频无遮挡| 午夜视频在线免费观看| 看亚洲a级一级毛片| 美女被艹免费视频| 中文在线观看国语高清免费| 久久午夜夜伦鲁鲁片免费无码| 18女人腿打开无遮掩免费| 成人片黄网站色大片免费| 免费看国产曰批40分钟| 亚洲人成电影在在线观看网色| 亚洲人成影院77777| 一级中文字幕免费乱码专区| 99re6在线视频精品免费下载 | 84pao强力永久免费高清| 情侣视频精品免费的国产| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 亚欧乱色国产精品免费视频| 1000部啪啪毛片免费看| 亚洲精品一级无码中文字幕| 亚洲一区二区久久| 老司机69精品成免费视频| 国产免费av一区二区三区| 亚洲成AV人综合在线观看| 国产高清视频免费在线观看 | 亚洲一区中文字幕久久| 免费手机在线看片| 日本高清免费中文字幕不卡| 亚洲成a人片在线观看中文!!!| 久久久久国色AV免费观看| 亚洲AV无码一区二区三区国产 | 国产精品亚洲精品日韩电影| 人妻仑乱A级毛片免费看| 黄色毛片免费在线观看| 一区二区三区AV高清免费波多| 13一14周岁毛片免费| 久久久久免费看黄A片APP| 亚洲国产精品成人精品无码区在线| 足恋玩丝袜脚视频免费网站| 亚洲精品永久在线观看| 伊人久久大香线蕉亚洲五月天| 国产成人精品日本亚洲18图|