实现Compass C/R/U/D 操作

     Compass是一个构建于Lucene之上的开源项目,

 

    旨在简化检索与任何java应用程序的集成。

 

    1.添加jar

       compass-2.2.0.jar    

       commons-logging.jar 

       junit4.jar 

 

   2.代码实现  

   1.Info.java

     

   package com.test.sample;


import org.compass.annotations.Index;
import org.compass.annotations.Searchable;
import org.compass.annotations.SearchableId;
import org.compass.annotations.SearchableProperty;
import org.compass.annotations.Store;

@Searchable
public class Info {

    @SearchableId
    
private int id;
    
    @SearchableProperty(index 
=Index.ANALYZED,store =Store.YES)
    
private String title;
    
    @SearchableProperty(index 
=Index.ANALYZED,store =Store.YES)
    
private String content;

    
public Info(){}
    
    
public Info(int id ,String title ,String content){
        
        
this.id =id;
        
this.title =title;
        
this.content =content;
    }
    
    
public int getId() {
        
return id;
    }

    
public void setId(int id) {
        
this.id = id;
    }

    
public String getTitle() {
        
return title;
    }

    
public void setTitle(String title) {
        
this.title = title;
    }

    
public String getContent() {
        
return content;
    }

    
public void setContent(String content) {
        
this.content = content;
    }
    

}

  

    2.compass.info.cfg.xml

   <compass-core-config xmlns="http://www.compass-project.org/schema/core-config"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://www.compass-project.org/schema/core-config
http://www.compass-project.org/schema/compass-core-config-2.2.xsd"
>
    
    
<compass name="default">
        
        
<connection>
            
<file path="./data/"/>  <!--索引目录-->
        
</connection>
        
        
<mappings>
            
<class name="com.test.sample.Info"/>
        
</mappings>
    
</compass>
    
</compass-core-config>

 

    3.TestDome2.java

 

   package com.test.dome1;


import org.compass.core.Compass;
import org.compass.core.CompassException;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.core.CompassTransaction;
import org.compass.core.config.CompassConfiguration;
import org.junit.Test;
import com.test.sample.Info;

/**
 * Compass实现C/R/U/D
 * 
@author keven.kan
 *
 
*/
public class TestDome2 {

    
private Compass compass;

    
/**
     * 创建索引
     
*/
    
public TestDome2(){

        CompassConfiguration conf 
=new CompassConfiguration().
        configure(
"/com/test/dome1/compass.info.cfg.xml").
        addClass(Info.
class);

        compass
= conf.buildCompass();
    }

    
/**
     * 添加
     
*/
    @Test
    
public void testSave() {
        CompassSession session 
=compass.openSession();
        CompassTransaction tx 
=null;
        
try {
            tx 
=session.beginLocalTransaction();  //开启事务

            Info f 
=new Info();
            f.setId(
1);
            f.setTitle(
"Android广告印象份额连续第三次超越苹果iOS");
            f.setContent(
"Millenial Media数据显示,今年2月Android" +
                    
"系统的广告印象份额为51%,略低于1月份时的54%。" +
                    
"去年12月 Android系统的广告印象份额为46%," +
            
"首次超越苹果iOS市场份额。");
            session.save(f);   
//保存数据
            tx.commit();    //提交事务
            System.out.println("添加成功!");
        } 
catch (CompassException e) {
            
if(tx !=null) tx.rollback();
        }
finally{
            
if(session !=null) session.close();
            
if(compass !=null) compass.close();
        }
    }

    
/**
     * 搜索
     
*/
    @Test
    
public void testSearch(){
        CompassSession session 
=compass.openSession();
        CompassHits hits 
=null;
        CompassTransaction tx 
=null;

        
try {
            tx 
=session.beginLocalTransaction();

            hits
=session.find("android");
            System.out.println(
"共搜索" + hits.length() +"条记录!");

            
if(hits.length() >0){
                
for(int j =0; j < hits.length(); j++){
                    Info i 
=(Info)hits.data(j);
                    System.out.println(i.getId());
                    System.out.println(i.getTitle());
                    System.out.println(i.getContent());
                }
            }
            
/*Resource r =hits.resource(0);
            System.out.println(r.getId());
*/
        } 
catch (CompassException e) {
            e.printStackTrace();
        }
finally{
            
if(hits !=null) hits.close();
            
if(session !=null) session.close();
            
if(compass !=null) compass.close();
        }
    }

    
/**
     * 使用Load查询
     
*/
    @Test
    
public void testLoad(){
        CompassSession session 
=compass.openSession();

        CompassTransaction tx 
=null;
        
try {
            tx 
=session.beginLocalTransaction();

            Info i 
=session.load(Info.class1);
            
//            Info i =session.get(Info.class, 1);

            System.out.println(i.getId());
            System.out.println(i.getTitle());
            System.out.println(i.getContent());

        } 
catch (CompassException e) {
            e.printStackTrace();
        }
finally{
            
if(session !=null) session.close();
            
if(compass !=null) compass.close();
        }
    }

    
/**
     * 删除
     
*/
    @Test
    
public void testDel(){

        CompassSession session 
=compass.openSession();
        CompassTransaction tx 
=null;

        
try{
            tx 
=session.beginLocalTransaction();
            session.delete(Info.
class1);
            session.commit();
            System.out.println(
"删除成功!");
        }
catch (CompassException e) {
            
if(tx !=null) session.rollback();
        }
finally{
            
if(session !=null) session.close();
            
if(compass !=null) compass.close();
        }
    }

    
/**
     * 修改
     
*/
    @Test
    
public void testUpdate(){
        CompassSession session 
=compass.openSession();
        CompassTransaction tx 
=null;

        
try {
            tx 
=session.beginLocalTransaction();
            Info i 
=session.load(Info.class1);   //先查询再修改

            i.setTitle(
"Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统");
            i.setContent(
"2010年末数据显示,仅正式推出两年的操作系统Android" +
                    
"已经超越称霸十年的诺基亚(Nokia)Symbian OS系统," +
                    
"采用Android系统主要手机厂商包括宏达电子(HTC)、" +
                    
"三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、" +
                    
"魅族M9等,使之跃居全球最受欢迎的智能手机平台," +
                    
"Android系统不但应用于智能手机," +
            
"也在平板电脑市场急速扩张。");
            session.save(i);
            System.out.println(
"更新成功!");
            session.commit();
        } 
catch (CompassException e) {
            
if(tx !=null) session.close();
            
if(compass !=null) compass.close();
        }
    }

} 

posted @ 2011-03-20 20:24  kanjc  阅读(1144)  评论(0编辑  收藏  举报