- 浏览: 7339650 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
当一个网站内部或个人博客搜索,设计思路:在发表博客和删除博客,修改博客是在保存的博客信息的同时,更新博客的索引 库,每一个用户一个特定的目录下一个特定的目录存储当前博主的索引信息,在搜索个人博客的信息或站内博客信息时使用.同时索引库必须在一定時間间隔内更新.保存索引库实时性.
由于在项目中保存博客對象是同时建立相应的索引所以添加一层为装饰层Facade层,便于封装业务逻辑.
首先必须明白JPA,Spring注解注解的信息
JPA的配置:persistence.xml信息:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="SpringJPASearchPU"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.vnvtrip.search.jpa.blog.model.Blog</class>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/search" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password"
value="123456" />
</properties>
</persistence-unit>
</persistence>
Spring的注解配置和JPA事物配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- spring的注解配置 support annotation config -->
<context:annotation-config />
<context:component-scan
base-package="com.vnvtrip.search.jpa.blog">
<context:include-filter type="regex" expression=".model..*" />
<context:include-filter type="regex" expression=".dao..*" />
<context:include-filter type="regex" expression=".services..*" />
<context:include-filter type="regex" expression=".facade..*" />
</context:component-scan>
<!--
创建JPA事物管理器工厂
-->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="SpringJPASearchPU" />
</bean>
<!--
创建JPA事物管理器
-->
<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<!-- 注解事物的應用 -->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
Compass搜索配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
xmlns:tx="http://www.springframework.org/schema/tx">
<!--
创建Compass注解配置對象
-->
<bean id="annotationConfiguration"
class="org.compass.annotations.config.CompassAnnotationsConfiguration">
</bean>
<!-- 创建compass Bean创建本地搜索对象 -->
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<!-- 解析的实体类的目录 -->
<property name="resourceDirectoryLocations">
<list>
<value>classpath:com/vnvtrip/search/jpa/blog</value>
</list>
</property>
<property name="classMappings">
<list>
<value>com.vnvtrip.search.jpa.blog.model.Blog</value>
</list>
</property>
<property name="compassConfiguration"
ref="annotationConfiguration" />
<property name="transactionManager" ref="txManager" />
<property name="compassSettings">
<props>
<!-- 配置高亮为红色 -->
<prop
key="compass.engine.highlighter.default.formatter.simple.pre">
<![CDATA[ <font color="red"> <b>]]>
</prop>
<prop
key="compass.engine.highlighter.default.formatter.simple.post">
<![CDATA[ </b> </font>]]>
</prop>
<!-- 定义索引的存储位置 -->
<prop key="compass.engine.connection">d:/compass</prop>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
<!-- 定义分词器-->
<prop
key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">
org.mira.lucene.analysis.IK_CAnalyzer
</prop>
</props>
</property>
</bean>
<!--
关于JPA的配置
-->
<bean id="jpaGpsDevice"
class="org.compass.gps.device.jpa.JpaGpsDevice">
<property name="name">
<value>JpaGpsDevice</value>
</property>
<property name="entityManagerFactory"
ref="entityManagerFactory" />
<property name="mirrorDataChanges">
<value>true</value>
</property>
<property name="injectEntityLifecycleListener" value="true"/>
</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 bean="jpaGpsDevice"/>
</list>
</property>
</bean>
<!-- 检索使用的模板 -->
<bean id="compassTemplate"
class="org.compass.core.CompassTemplate">
<property name="compass" ref="compass" />
</bean>
<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
<bean id="compassIndexBuilder"
class="com.vnvtrip.search.jpa.blog.utils.CompassIndexBuilder"
lazy-init="false">
<property name="compassGps" ref="compassGps" />
<property name="buildIndex" value="true" />
<property name="lazyTime" value="5" />
</bean>
</beans>
Blog對象的实体类:
@Entity
@Table(name = "blog", catalog = "search")
@Searchable //用于注解实体类为检索实体类(必须的)
public class Blog implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
// Fields
@Id
@GeneratedValue(generator = "autoincrement", strategy = GenerationType.AUTO)
@SearchableId //用于注解实体的主键为检索索引的标识(必须的)
private Integer blogid;
private String author;
private String subject;
private String content;
private String publishTime;
// Constructors
/** default constructor */
public Blog() {
}
/** minimal constructor */
public Blog(Integer blogid, String author) {
this.blogid = blogid;
this.author = author;
}
/** full constructor */
public Blog(Integer blogid, String author, String subject, String content,
String publishTime) {
this.blogid = blogid;
this.author = author;
this.subject = subject;
this.content = content;
this.publishTime = publishTime;
}
// Property accessors
@Id
@Column(name = "blogid", nullable = false)
public Integer getBlogid() {
return this.blogid;
}
public void setBlogid(Integer blogid) {
this.blogid = blogid;
}
@Column(name = "author", nullable = false, length = 25)
public String getAuthor() {
return this.author;
}
public void setAuthor(String author) {
this.author = author;
}
@Column(name = "subject", length = 50)
@SearchableProperty(index = Index.TOKENIZED, store = Store.YES)//設置检索的属性以及存储的方式
public String getSubject() {
return this.subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Column(name = "content", length = 500)
@SearchableProperty(index = Index.TOKENIZED, store = Store.YES)
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
@Column(name = "publishTime", length = 25)
public String getPublishTime() {
return this.publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((author == null) ? 0 : author.hashCode());
result = prime * result + ((blogid == null) ? 0 : blogid.hashCode());
result = prime * result + ((content == null) ? 0 : content.hashCode());
result = prime * result
+ ((publishTime == null) ? 0 : publishTime.hashCode());
result = prime * result + ((subject == null) ? 0 : subject.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Blog other = (Blog) obj;
if (author == null) {
if (other.author != null)
return false;
} else if (!author.equals(other.author))
return false;
if (blogid == null) {
if (other.blogid != null)
return false;
} else if (!blogid.equals(other.blogid))
return false;
if (content == null) {
if (other.content != null)
return false;
} else if (!content.equals(other.content))
return false;
if (publishTime == null) {
if (other.publishTime != null)
return false;
} else if (!publishTime.equals(other.publishTime))
return false;
if (subject == null) {
if (other.subject != null)
return false;
} else if (!subject.equals(other.subject))
return false;
return true;
}
}
备注必须组件如下:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_AOP"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_PERSISTENCE_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_J2EE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_REMOTING"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_WEB"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_SUPPORT"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING25_TESTING"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING_JAVACONFIG_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_2_EM"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_2_CORE"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_2_EXTRAS"/>
<classpathentry kind="lib" path="lib/mysql-connector-java-3.2.0-alpha-bin.jar"/>
<classpathentry kind="lib" path="lib/commons-dbcp.jar"/>
<classpathentry kind="lib" path="lib/commons-logging.jar"/>
<classpathentry kind="lib" path="lib/commons-pool.jar"/>
<classpathentry kind="lib" path="lib/compass-2.2.0.jar"/>
<classpathentry kind="lib" path="lib/IKAnalyzer.jar"/>
<classpathentry kind="lib" path="lib/lucene-analyzers.jar"/>
<classpathentry kind="lib" path="lib/lucene-core.jar"/>
<classpathentry kind="lib" path="lib/lucene-highlighter.jar"/>
<classpathentry kind="lib" path="lib/lucene-queries.jar"/>
<classpathentry kind="lib" path="lib/lucene-snowball.jar"/>
<classpathentry kind="lib" path="lib/lucene-spellchecker.jar"/>
<classpathentry kind="lib" path="src/org.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
- SpringJPASearch.rar (7.1 MB)
- 下载次数: 177
评论
这个问题是应为我开始采用
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml", "spring-search.xml" });
BlogFacade blogfacade = (BlogFacade) ctx.getBean("blogFacade");
Blog entity = new Blog();
entity.setBlogid(670);
entity.setAuthor(" my money");
entity.setContent(" this is chinase content !");
entity.setSubject(" this is xiaobai blog subject !");
entity.setPublishTime("2009-09-10");
///blogfacade.save(entity);
List<Blog> bloglist = blogfacade.find("content");
for (Blog blog : bloglist) {
System.out.println("blogId=" + blog.getBlogid() + " subject ="
+ blog.getSubject() + " context =" + blog.getContent());
}
红色部分是我以前测试的,后来无意改成“money”当然获取不到了!我测试compass注解是否跟我想象的一样的,很久了,今天在此说明!!
我以前用的版本,没有心的mysql驱动类库,请谅解!
备注:我测试的环境中表结构必须存在!另外jar文件必须和我一样。我今天测试一下没有问题,怎么可能有问题!!
发表评论
-
Lucene全文搜索框架
2009-11-09 17:16 36161 lucene简介 1.1 什么是luc ... -
compass的开发應用JPA+Compass整合
2009-10-10 17:21 2505查询结果的高亮显示: 采用的是JPA的注解方式, 首 ... -
Compass 實用中扩展應用
2009-10-10 14:12 29291 Compass中的操作通过CompassSession我 ... -
Web搜索引擎技术
2009-09-25 13:38 2661一、Web搜索引擎技术综 ... -
搜索引擎技术原理
2009-09-25 13:37 2640一、搜索引擎的分类 ... -
搜索计算的规则
2009-05-15 10:28 2191面向Web应用的网页预处理2003年12月3日(讲稿由张志刚协 ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:18 20372006 年 9 月 06 日 Lucene 是基于 Jav ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:17 18332006 年 9 月 06 日 Lucene 是基于 Jav ... -
搜索引擎基本工作原理
2009-05-02 07:48 2056搜索引擎基本工作原理 了解搜索引擎的工作原理对我们 ... -
搜索引擎蜘蛛工作原理
2009-05-02 07:46 2586网站能在搜索引擎被搜 ... -
luence学习的指南文档(五)
2009-03-17 17:00 26696.搜索引擎的性能考虑信息: 索引数字:针对数字的检索 ... -
luence学习的指南文档(三)
2009-03-17 16:58 22723. 使用场合:多个搜索引擎查询的数据结果的合并信息操作:添 ... -
luence学习的指南文档
2009-03-17 16:56 29772.代码使用场合:在搜索引擎检索索引目录的中的信息 /** ... -
luence学习的指南文档
2009-03-17 16:54 2225搜索引擎学习总结(实战和使用场合) 备注以下代码使用的环境为 ... -
揭开神秘面纱,搜索引擎原理浅析
2009-03-17 16:10 1926在浩如烟海的Internet上,特别是其上的Web(World ... -
lucene全文检索应用示例及代码简析
2009-03-17 16:02 2142Lucene是apache软件基金会 jakarta项目组 ... -
关于lucene的学习笔记liui :转关于luncene 内层的研究
2009-03-17 15:59 2422现在已经不用去研究那些代码,但还是分享出来给大家以帮助。谢谢1 ... -
lucene大数据量的动态更新问题解决方式. 用内存
2009-03-17 15:55 4680问题: 目前索引里面已经有1000多万的数据了,现在需要每几分 ... -
lucene 自定义SORT
2009-03-17 15:54 3237如欲转载,请注明作者 ... -
限制lucene的遍历结果.
2009-03-17 15:54 2816Lucene Hack之通过缩小搜索结果集来提升性能 作者:c ...
相关推荐
本项目是一个基于Java技术栈,整合了Hibernate、Spring JPA以及Compass的图书商城系统,提供了全面的功能,适合用于课程设计、大作业、毕业设计、项目练习或学习演示。下面将详细阐述该项目所涉及的技术点及其重要性...
标题中的"S2SH+compass"指的是一个基于Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的Java Web应用,再加上Compass搜索引擎来实现站内全文检索的功能。这种组合常用于构建复杂的企业级应用,因为它提供...
Compass 2.0与Spring的集成允许开发者在Spring管理的bean中直接使用搜索引擎功能,而Hibernate则负责处理数据持久化。这种整合能够使应用程序在处理大量数据时保持高性能,并提供复杂查询的能力。 描述中提到的博客...
在IT行业中,Spring MVC和Hibernate是两个非常...在提供的压缩包文件“compass”中,可能包含了与本话题相关的示例代码或配置文件,通过阅读和分析这些资源,可以更深入地理解Spring MVC和Hibernate的整合及注解开发。
在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个常见的企业级应用开发组合。 首先,让我们深入了解一下Compass。Compass是一个开源项目,它的...
综上所述,compass PetClinic项目是一个全面展示Spring生态的优秀示例,通过对源码的分析和实践,开发者不仅可以掌握Java Web开发的基本技能,还能进一步提升在微服务架构、数据库设计和持续集成等方面的素养。
dbApi-spring-boot-starter的核心功能在于简化数据库访问层的实现,它集成了Spring Data JPA、MyBatis等主流持久层框架,同时也支持自定义数据访问策略。通过自动配置,开发者可以快速接入数据库,无需编写大量的DAO...
标题“JPA_SpringBoot_Rest_Angular6_BackEnd”揭示了这是一个使用Java Persistence API (JPA)、Spring Boot、RESTful API 和 Angular 6技术构建的后端项目。这个项目可能是为了创建一个现代的、基于Web的前端应用...
Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)以及声明式事务管理等。"spring_SpringBasic"这个主题很...
Spring Boot是Java领域中广泛使用的微服务开发框架,它简化了Spring应用的初始搭建以及开发过程,提供了诸多开箱即用的功能,使得开发者能够更专注于业务逻辑。 首先,Spring Boot的核心特性之一是自动配置。通过在...
"demoTransaksiSpring:belajar CRUD" 这个项目是一个基于Spring框架的示例应用,主要目的是教授如何在Web开发中实现基本的CRUD(创建、读取、更新和删除)操作。CRUD是数据库管理和应用程序开发的核心概念,用于...
这种服务可能使用Spring Boot框架,因为它是Java开发Web服务的常用选择,支持自动配置和快速启动。 该项目可能包含以下关键组件和知识点: 1. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建以及开发...
在这个项目中,可能会有实体类对应数据库表,使用注解来定义映射关系。 3. **SQL查询**:在电影租借系统中,我们需要执行各种SQL查询,例如,查询所有可用的电影、获取特定用户的租赁历史、检查某部电影是否已被...