经过三天的折腾,终于把Compass整合SSH搞定了,下边贴出源码,给正在学习的朋友,毕竟网上关于Compass的详细介绍还是太少了。
我用到的版本是struts2+spring 2.5 +hibernate 3.2+compass 2.2+Quartz 1.6
一、创建一张表,表名PRODUCT
CREATE TABLE "LICE"."PRODUCT"
( "PRODUCT_ID" VARCHAR2(40) NOT NULL ENABLE,
"PRODUCT_NAME" VARCHAR2(80),
"PRODUCT_PRICE" NUMBER(6,2),
"PRODUCT_BRAND" VARCHAR2(40),
"PRODUCT_DESC" VARCHAR2(200),
"VERSION" NUMBER(10,0),
PRIMARY KEY ("PRODUCT_ID")
)
二、PRODUCT表对应的实体类
package com.lice.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import org.hibernate.annotations.GenericGenerator;
import org.compass.annotations.*;
@Entity
@Table(name = "PRODUCT", schema = "LICE")
@Searchable
public class Product implements java.io.Serializable {
// Fields
@SearchableId
private String productId;
@SearchableProperty(name="productName")
private String productName;
@SearchableProperty(name="productPrice")
private Double productPrice;
@SearchableProperty(name="productBrand")
private String productBrand;
@SearchableProperty(name="productDesc")
private String productDesc;
@SearchableProperty(name="version")
private Integer version;
// Constructors
public Product() {
}
public Product(String productName, Double
productPrice,
String
productBrand, String productDesc) {
this.productName =
productName;
this.productPrice =
productPrice;
this.productBrand =
productBrand;
this.productDesc =
productDesc;
}
// Property accessors
@GenericGenerator(name = "generator", strategy =
"uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "PRODUCT_ID", unique = true,
nullable = false, length = 40)
public String getProductId() {
return this.productId;
}
public void setProductId(String productId)
{
this.productId =
productId;
}
@Column(name = "PRODUCT_NAME", length =
80)
public String getProductName() {
return this.productName;
}
public void setProductName(String productName)
{
this.productName =
productName;
}
@Column(name = "PRODUCT_PRICE", precision =
6)
public Double getProductPrice() {
return this.productPrice;
}
public void setProductPrice(Double
productPrice) {
this.productPrice =
productPrice;
}
@Column(name = "PRODUCT_BRAND", length =
40)
public String getProductBrand() {
return this.productBrand;
}
public void setProductBrand(String
productBrand) {
this.productBrand =
productBrand;
}
@Column(name = "PRODUCT_DESC", length =
200)
public String getProductDesc() {
return this.productDesc;
}
public void setProductDesc(String productDesc)
{
this.productDesc =
productDesc;
}
@Version
public Integer getVersion() {
return version;
}
public void setVersion(Integer version)
{
this.version = version;
}
}
注意如果要用hibernate查询,model里必须加上@SearchableProperty(name="XXXX")这种注释。
三、对象的DAO和实现类
import java.util.List;
import com.lice.model.Product;
public interface ProductDao {
public void create(Product p);
public Product getProduct(String id);
public List getProducts();
public void update(Product product);
public void remove(String id);
}
package com.lice.dao.hibernate;
import java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.lice.dao.ProductDao;
import com.lice.model.Product;
public class ProductDaoHibernate extends HibernateDaoSupport
implements ProductDao {
public void create(Product p) {
getHibernateTemplate().save(p);
}
public Product getProduct(String id) {
return
(Product)getHibernateTemplate().get(Product.class, id);
}
public List getProducts() {
return
getHibernateTemplate().find("from Product order by id desc");
}
public void remove(String id) {
getHibernateTemplate().delete(getProduct(id));
}
public void update(Product product) {
getHibernateTemplate().saveOrUpdate(product);
}
}
四、对应的Service和实现类
import java.util.List;
import com.lice.model.Product;
public interface ProductManager {
public void insertProduct(Product p);
public Product findProdcut(String id);
}
package com.lice.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.lice.dao.ProductDao;
import com.lice.model.Product;
import com.lice.service.ProductManager;
public class ProductManagerImpl implements ProductManager
{
private ProductDao productDao;
public Product findProdcut(String id) {
return
productDao.getProduct(id);
}
public void insertProduct(Product p) {
productDao.create(p);
}
public ProductDao getProductDao() {
return productDao;
}
public void setProductDao(ProductDao
productDao) {
this.productDao =
productDao;
}
}
五、对应的action
package com.lice.action;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.lice.model.Product;
import com.lice.service.CompassManager;
import com.lice.service.ProductManager;
import com.opensymphony.xwork2.ActionSupport;
public class ProductAction extends ActionSupport{
private static final long serialVersionUID =
-2189044281576376151L;
private ProductManager productManager;
private CompassManager compassManager;
private Product product;
private String queryString;
public String insert(){
productManager.insertProduct(product);
return SUCCESS;
}
public String search(){
List
results=compassManager.productCompass(queryString);
System.out.println(results.size());
ServletActionContext.getRequest().setAttribute("searchresults",
results);
return SUCCESS;
}
public ProductManager getProductManager()
{
return productManager;
}
public void setProductManager(ProductManager
productManager) {
this.productManager =
productManager;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getQueryString() {
return queryString;
}
public void setQueryString(String queryString)
{
this.queryString =
queryString;
}
public CompassManager getCompassManager() {
return compassManager;
}
public void setCompassManager(CompassManager
compassManager) {
this.compassManager =
compassManager;
}
}
六、配置文件applicationContext.xml
encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
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/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
default-lazy-init="true">
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
classpath:jdbc.properties
class="org.apache.commons.dbcp.BasicDataSource">
name="driverClassName"
value="${jdbc.driverClassName}"/>
name="url" value="${jdbc.url}" />
name="username"
value="${jdbc.username}">
name="password"
value="${jdbc.password}">
name="maxActive" value="${jdbc.maxActive}"/>
value="${jdbc.maxWait}"/>
value="${jdbc.poolPreparedStatements}"/>
value="${jdbc.defaultAutoCommit}"/>
value="${jdbc.logAbandoned}"/>
value="${jdbc.removeAbandoned}"/>
name="removeAbandonedTimeout"
value="${jdbc.removeAbandonedTimeout}"/>
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
name="dataSource">
bean="dataSource"
/>
name="hibernateProperties">
key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect
key="hibernate.show_sql">true
key="hibernate.cache.use_second_level_cache">true
key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider
key="hibernate.jdbc.fetch_size">30
key="hibernate.jdbc.batch_size">50
key="hibernate.statement_cache.size">0
name="configLocation" value="classpath:hibernate.cfg.xml"
/>
class="com.lice.dao.hibernate.ProductDaoHibernate">
name="sessionFactory"
ref="sessionFactory">
class="com.lice.service.impl.ProductManagerImpl
">
name="productDao"
ref="productDao">
name="compassTemplate"
ref="compassTemplate">