<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內部有對Hibernate,Spring的支持,如果配置好了,可以在建立和更新索引的時候不用Compass寫一句代碼。爽吧!~不過集成它們比較麻煩那就看我一步一步的來吧:

    1.首先把HibernateSpring集成:

    來個例子吧:

    先看數據庫腳本(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(注意要在工程上加入MyEcilpseHibernateSpring能力。

    然后用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的,有關HibernateSpring的內容網上很多中文資料的這里就不介紹了。

    下面講的是跟著我一步一步用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的配置:

    由于我們只對文章進行搜索所以只對文章建立索引

    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集成并且對Hibernateinsert,delete,update進行自動的更新所以說這樣就不

    我們為Compass寫一句代碼了。不過這兩個類對CompassHibernate的實時功能也可以用Spring

    AOP來實現(這里也不討論了)。剩下的就是用SpringIoC來支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>

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

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

    <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測試用例:

    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學習文檔");

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

        }

    }

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

    在對像article和author被寫入數據庫的同時,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("學習");

            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的操作。

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

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

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

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


    網站導航:
     
    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一卡二卡三卡四卡无卡麻豆| 日本黄色动图免费在线观看| 久久精品国产亚洲AV高清热| 亚洲区小说区图片区| 成熟女人牲交片免费观看视频| 玖玖在线免费视频| 五月天国产成人AV免费观看| 中文字幕亚洲精品无码| 666精品国产精品亚洲| 国产亚洲AV夜间福利香蕉149| 免费看国产一级片| 免费被黄网站在观看| 一色屋成人免费精品网站| 人人玩人人添人人澡免费| 99麻豆久久久国产精品免费| 国产午夜亚洲精品不卡电影| 亚洲人av高清无码| 亚洲一区二区三区不卡在线播放| 亚洲AV日韩AV天堂久久| 亚洲精品无码久久千人斩| 久久久久噜噜噜亚洲熟女综合| 免费国产在线观看不卡| 国产美女无遮挡免费视频网站| 四虎www免费人成| 好吊妞视频免费视频| 97人伦色伦成人免费视频| 中文字幕无码免费久久99| 免费99精品国产自在现线| 美女内射毛片在线看免费人动物| 免费A级毛片在线播放| 日韩精品在线免费观看| 久久免费观看国产精品88av| 三年在线观看免费观看完整版中文 | 亚洲成色WWW久久网站| 国产亚洲精品福利在线无卡一 | 瑟瑟网站免费网站入口| 深夜福利在线免费观看| 污污视频免费观看网站| 国产免费AV片在线观看播放| 三年片免费高清版| 女人体1963午夜免费视频|