实现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>
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.class, 1);
// 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.class, 1);
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.class, 1); //先查询再修改
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();
}
}
}