struts2 hibernate spring注解的整合(重写了巴巴运动网部门功能)

本文介绍了一个网站的用户管理模块及全文搜索功能实现,包括用户实体类、DAO接口、实现类及搜索管理器的使用。
[color=red]下面是Dao(泛型),及其Dao实现类
下面是一个User实体类的用法Dao,Servlet用法,希望对大家有帮助,本来还想贴一下该网站的权限功能的,就放在源代码里面,只要修改jdbc.properties配置文件的数据库的用户名和密码,并建立自己的数据库就好了,数据库表自动生成,下面lib1,lib2,lib3是jar包,一起放在shop9源代码文件lib文件夹下面就可以,shop9是源代码[/color]

import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;

/**
*
* @author wxh64788665@yahoo.cn begin:20120818
*
* @param <T> 实体类
* @param <PK> 主键
*/
public interface GenericDao <T,PK extends Serializable>{
/**
* 根据id查找指定的实体
* @param id
* @return
*/
public T findById(PK id);
/**
* 查找所有实体
* @return
*/
public List<T> findAll();
/**
* 保存实体
* @param entity
*/
public void save (T entity);
/**
* 更新实体
* @param entity
*/
public void update(T entity);
/**
* 删除实体
* @param entity
*/
public void delete(T entity);
/**
* 根据hql查找指定的实体
* @param hql
* @return
*/
public List<T> findAllByHql(String hql);
/**
* 删除实体集合
* @param entities
*/
public void deleteAll(Collection<T> entities);
/**
*
* @param hql 代表hql语句查询
* @param params 相应的参数值
* @param pageSize 分页的大小
* @param pageNumber 分页的页码
* @param othername hql 中表的别名
* @param orderby 什么顺序排序
* @return List<ProductType> 集合
*/

public List<T> getList(final String hql, final Object[] params,final Integer pageSize,final Integer pageNumber,final String othername,final LinkedHashMap<String,String> orderby);

/**
* 根据hql和相应的参数,获取实体的总记录数
* @param hql
* @param params
* @return
*/

public Object queryObject(final String hql, final Object[] params);


/**
*
* @param hql 代表hql语句查询
* @param params 相应的参数值
* @param pageSize 分页的大小
* @param pageNumber 分页的页码
* @return
*/
public List<T> getList(final String hql, final Object[] params,final Integer pageSize,final Integer pageNumber);


/**
*
* @param hql 代表hql语句查询
* @param params 相应的参数值
* @param othername 别名
* @param orderby 根据说明排序
* @return
*/
@SuppressWarnings("unchecked")
public List getList(final String hql, final Object[] params,final String othername,final LinkedHashMap<String,String> orderby);

/**
*
* @param hql 代表hql语句查询
* @param params 相应的参数值
* @return
*/
@SuppressWarnings("unchecked")
public List getList(final String hql, final Object[] params);



/**
*
* @param hql 代表hql语句查询
* @param params 相应的参数值
* @return
*/
@SuppressWarnings("unchecked")
public List getList(final String hql, final Object[] params,Integer maxResult);

/**
*清除一级缓存的数据
*/
public void clear();
}



import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.itcast.bean.common.dao.GenericDao;


/**
* 泛型Dao实现类
* @author wxh64788665@yahoo.cn
*
* @param <T>
* @param <PK>
*/
public class GenericDaoHibernate<T, PK extends Serializable> extends
HibernateDaoSupport implements GenericDao<T, PK> {
private Class<T> clazz;

@Resource
public void setSessionFactory0(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}

@SuppressWarnings("unchecked")
public GenericDaoHibernate() {
clazz = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}

public void delete(T entity) {
getHibernateTemplate().delete(entity);
}

@SuppressWarnings("unchecked")
public List<T> findAll() {
List<T> list = getHibernateTemplate().find("from " + clazz.getName());
return list;
}

@SuppressWarnings("unchecked")
public List<T> findAllByHql(String hql) {
List<T> list = getHibernateTemplate().find("from " + hql);
return list;
}

@SuppressWarnings("unchecked")
public T findById(PK id) {
T entity = (T) getHibernateTemplate().get(clazz, id);
return entity;
}

public void save(T entity) {
getHibernateTemplate().save(entity);

}

public void update(T entity) {
getHibernateTemplate().update(entity);
}


public Object queryObject(final String hql, final Object[] params) {
return getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
return query.uniqueResult();
}
});
}
/**
* 根据hql和相应的参数,分页的大小和页码获取相应实体的集合
* @param hql
* @param params
* @param pageSize
* @param pageNumber
* @return
*/
//根据实体的属性asc/desc
//Order by key1 desc,key2 asc
@SuppressWarnings("unchecked")
public List<T> getList(final String hql, final Object[] params,final Integer pageSize,final Integer pageNumber,final String othername,final LinkedHashMap<String,String> orderby) {
return (List)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql+buildOrderby(orderby,othername));
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
query.setMaxResults(pageSize);
query.setFirstResult(pageSize*(pageNumber-1));
return query.list();

}
});
}

/**
* 根据hql和相应的参数,并相应的排序获取相应实体的集合
* @param hql
* @param params
* @return
*/
//根据实体的属性asc/desc
//Order by key1 desc,key2 asc
@SuppressWarnings("unchecked")
public List<T> getList(final String hql, final Object[] params,final String othername,final LinkedHashMap<String,String> orderby) {
return (List)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql+buildOrderby(orderby,othername));
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
return query.list();

}
});
}


/**
* 根据hql和相应的参数,获取相应实体的集合
* @param hql
* @param params
* @return
*/
//根据实体的属性asc/desc
//Order by key1 desc,key2 asc
@SuppressWarnings("unchecked")
public List<T> getList(final String hql, final Object[] params) {
return (List)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
return query.list();

}
});
}




/**
* 拼接排序
* @param orderby
* @return
*/
private String buildOrderby(LinkedHashMap<String,String> orderby,String othername)
{
StringBuffer orderbyql=new StringBuffer("");
if(orderby!=null&& orderby.size()>0)
{
orderbyql.append(" order by ");
for(String key :orderby.keySet())
orderbyql.append(othername).append(".").append(key).append(" ").append(orderby.get(key)).append(",");

orderbyql.deleteCharAt(orderbyql.length()-1);
}
return orderbyql.toString();
}

@Override
public void deleteAll(Collection<T> entities) {
getHibernateTemplate().deleteAll(entities);

}

@SuppressWarnings("unchecked")
@Override
public List<T> getList(final String hql, final Object[] params,final Integer pageSize,
final Integer pageNumber) {
return (List)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
query.setMaxResults(pageSize);
query.setFirstResult(pageSize*(pageNumber-1));
return query.list();

}
});
}

@SuppressWarnings("unchecked")
@Override
public List<T> getList(final String hql, final Object[] params, final Integer maxResult) {
return (List)getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++)
query.setParameter(i, params[i]);
}
query.setFirstResult(0).setMaxResults(maxResult);
return query.list();

}
});
}

@Override
public void clear() {

getHibernateTemplate().clear();

}


}



import com.itcast.bean.common.dao.GenericDao;
import com.itcast.bean.user.Buyer;

public interface BuyerDao extends GenericDao<Buyer, String>{


/**
* 启用指定用户
* @param usernames
*/
public void enable(String ... usernames);

/**
* 禁用指定用户
* @param usernames
*/
public void delete(String ... usernames);

/**
* 用户名,新密码,修改用户密码
* @param username
* @param newpassword
*/
public void updatePassord(String username,String newpassword);

}


import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Component;

import com.itcast.bean.common.dao.hibernate.GenericDaoHibernate;
import com.itcast.bean.user.Buyer;
import com.itcast.bean.user.dao.BuyerDao;

@Component
public class BuyerDaoHibernate extends GenericDaoHibernate<Buyer, String> implements
BuyerDao {

@Override
public void delete(String... usernames) {
SetVisble(false,usernames);

}

private void SetVisble(Boolean visible,String... usernames) {
if(usernames!=null&&usernames.length>0)
{
StringBuffer strHql=new StringBuffer();
List<Object> params=new ArrayList<Object>();
params.add(visible);
for(String username : usernames)
{
strHql.append("?").append(",");
params.add(username);

}
strHql.deleteCharAt(strHql.length()-1);
getHibernateTemplate().bulkUpdate("update Buyer as b set b.visible=? where b.username in ("+strHql.toString()+")",params.toArray());
}
}

@Override
public void enable(String... usernames) {
SetVisble(true,usernames);
}

@Override
public void updatePassord(String username, String newpassword) {
// TODO Auto-generated method stub
getHibernateTemplate().bulkUpdate("update Buyer as b set b.password=? where b.username=?",new Object[]{newpassword,username});
}


}


import java.util.LinkedHashMap;

import com.itcast.bean.user.Buyer;
import com.itcast.common.util.PageModel;

public interface BuyerManager {
/**
* 用于注册用户的保存
* @param buyer
*/
public void save(Buyer buyer);


/**
* 判断用户是否存在,存在返回true,不存在返回false
* @param username 用户名
* @return
*/
public Boolean exsit(String username);

/**
* 判断用户名和密码是否正确,正确返回true,不存在返回false;
* @param buyer
* @return
*/
public Boolean validate(Buyer buyer);


/**
*
* @param username 用户名
* @return 用户对象
*/
public Buyer load(String username);


/**
*
* @param pageSize 当前分页大小
* @param pageNumber 当前页码
* @param orderby 根据什么排序
* @param buyer 用户对象
* @param query 查询界面传递过来,默认是true
* @return
*/
public PageModel<Buyer> getPageModelByBuyer(final Buyer buyer,final Integer pageSize,final Integer pageNumber,final LinkedHashMap<String,String> orderby,final String query);

/**
* 启用指定用户
* @param usernames
*/
public void enable(String ... usernames);

/**
* 禁用指定用户
* @param usernames
*/
public void delete(String ... usernames);

/**
* 用户名,新密码,修改用户密码
* @param username
* @param newpassword
*/
public void updatePassord(String username,String newpassword);
}


import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.itcast.bean.user.Buyer;
import com.itcast.bean.user.dao.BuyerDao;
import com.itcast.common.util.Const;
import com.itcast.common.util.MD5;
import com.itcast.common.util.PageModel;
import com.itcast.service.user.BuyerManager;
@Service
public class BuyerManagerImpl implements BuyerManager {

@Resource
private BuyerDao buyerDao;
@Override
public void save(Buyer buyer) {
buyer.setPassword(MD5.MD5Encode(buyer.getPassword()));
buyerDao.save(buyer);
}
@Override
public Boolean exsit(String username) {
Long count=(Long)buyerDao.queryObject("select count(b) from Buyer as b where b.username=?", new Object[]{username});
return count>0?true:false;
}
@Override
public Boolean validate(Buyer buyer) {

Long count=(Long)buyerDao.queryObject("select count(b) from Buyer as b where b.username=? and b.password =?", new Object[]{buyer.getUsername(),MD5.MD5Encode(buyer.getPassword())});
return count>0?true:false;
}
@Override
public Buyer load(String username) {
return buyerDao.findById(username);
}
@Override
public PageModel<Buyer> getPageModelByBuyer(Buyer buyer, Integer pageSize,
Integer pageNumber, LinkedHashMap<String, String> orderby,
String query) {
List<Buyer> buyers;
StringBuffer hql=new StringBuffer("from Buyer as b where 1=1");
List<Object> params=new ArrayList<Object>();
if("true".equals(query)) //进行查询操作
{
if(buyer!=null)
{
if(buyer.getUsername()!=null&&!"".equals(buyer.getUsername().trim()))
{
hql.append(" and b.username like ? ");
params.add("%"+buyer.getUsername()+"%");
}
if(buyer.getRealName()!=null&&!"".equals(buyer.getRealName().trim()))
{
hql.append(" and b.realName like ? ");
params.add("%"+buyer.getRealName()+"%");
}
if(buyer.getEmail()!=null&&!"".equals(buyer.getEmail().trim()))
{
hql.append(" and b.email like ? ");
params.add("%"+buyer.getEmail()+"%");
}

}
}
if (pageNumber == null) {
pageNumber = Const.DEFAULT_NUMBER;

buyers = buyerDao.getList(
hql.toString(),
params.toArray(), pageSize, pageNumber, "b",orderby);
} else
buyers = buyerDao.getList(
hql.toString(),
params.toArray(), pageSize, pageNumber, "b",
orderby);

Integer totalRecords = ((Long) (buyerDao.queryObject(
"select count(*) "+" "+hql.toString(),
params.toArray()))).intValue();
return new PageModel<Buyer>(buyers, totalRecords, pageSize,
pageNumber);
}
/* @Override
public void delete(String... usernames) {

if(usernames!=null&&usernames.length>0)
{

for(String username:usernames)
{
Buyer buyer=buyerDao.findById(username);
buyer.setVisible(Const.VISIBLE_FALSE);
buyerDao.update(buyer);

}
}

}*/
/* @Override
public void enable(String... usernames) {
if(usernames!=null&&usernames.length>0)
{
for(String username:usernames)
{
Buyer buyer=buyerDao.findById(username);
buyer.setVisible(Const.VISIBLE_TRUE);
buyerDao.update(buyer);

}
}

}*/

public void delete(String... usernames)
{

buyerDao.delete(usernames);

}
public void enable(String... usernames)
{
buyerDao.enable(usernames);

}
@Override
public void updatePassord(String username, String newpassword) {
// TODO Auto-generated method stub
buyerDao.updatePassord(username, newpassword);
}

}


//该网站的全文搜索功能代码

import com.itcast.bean.product.ProductInfo;
import com.itcast.common.util.PageModel;
/**
* 产品全文搜索
* @author Administrator
*
*/
public interface ProductSearchManager {

public PageModel<ProductInfo> search(String key,Integer pageSize, Integer pageNumber);
}



import javax.annotation.Resource;

import org.compass.core.Compass;
import org.compass.spring.CompassDaoSupport;
import org.springframework.stereotype.Service;

import com.itcast.bean.product.ProductInfo;
import com.itcast.common.util.PageModel;
import com.itcast.search.product.ProductSearchManager;
import com.itcast.service.product.impl.ProductResultCallback;
@Service
public class ProductSearchManagerImpl extends CompassDaoSupport implements ProductSearchManager {


@Resource
public void setCompass0(Compass compass)
{
super.setCompass(compass);
}

@Override
public PageModel<ProductInfo> search(String key, Integer pageSize,
Integer pageNumber) {
// TODO Auto-generated method stub
return this.getCompassTemplate().execute(new ProductResultCallback(key,pageSize,
pageNumber));
}

}



 <!--相关搜索功能的配置,网上有一大堆 -->
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<!-- 指定映射类方式 -->
<property name="classMappings">
<list>
<value>com.itcast.bean.product.ProductInfo</value>
<value>com.itcast.bean.product.Brand</value>
<value>com.itcast.bean.product.ProductStyle</value>
<value>com.itcast.bean.product.ProductType</value>
</list>
</property>
<property name="connection">
<value>/lucene/indexes</value>
</property>
<property name="compassSettings">
<props>
<prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<font color='red'>]]></prop>
<prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</font>]]></prop>
<prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
</props>
</property>
<property name="transactionManager" ref="txManager" />
</bean>


<bean id="hibernateGpsDevice" class="org.compass.gps.device.hibernate.HibernateGpsDevice">
<property name="name"><value>hibernateDevice</value></property>
<property name="sessionFactory" ref="sessionFactory"></property>
<property name="nativeExtractor">
<bean class="org.compass.spring.device.hibernate.SpringNativeHibernateExtractor" />
</property>
</bean>

<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
<property name="compass"><ref bean="compass" /></property>
<property name="gpsDevices">
<list>
<bean class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
<property name="gpsDevice" ref="hibernateGpsDevice" />
</bean>
</list>
</property>
</bean>


import java.util.ArrayList;
import java.util.List;

import org.compass.core.CompassCallback;
import org.compass.core.CompassException;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;

import com.itcast.bean.product.ProductInfo;
import com.itcast.common.util.PageModel;
import com.itcast.common.util.WebUtil;

public class ProductResultCallback implements CompassCallback<PageModel<ProductInfo>> {

/**
* 要查找的内容
*/
private String key;
/**
* 每页多少条数据
*/
private Integer pageSize;
/**
* 当前第几页
*/
private Integer pageNumber;

public ProductResultCallback(String key, Integer pageSize,
Integer pageNumber) {
this.key=key;
this.pageSize=pageSize;
this.pageNumber=pageNumber;
}

@Override
public PageModel<ProductInfo> doInCompass(CompassSession session)
throws CompassException {
// TODO Auto-generated method stub
if(key==null||key.trim().length()==0)
{
CompassHits hits=session.find(key);
int lastPageNumber=pageNumber+pageSize-1;
List<ProductInfo> products=new ArrayList<ProductInfo>();
if(lastPageNumber>hits.length()-1) lastPageNumber=hits.length()-1;

for(int i=pageNumber-1;i<=lastPageNumber;i++)
{
ProductInfo productInfo=(ProductInfo)hits.data(i);
if(hits.highlighter(i).fragment("name")!=null) //处理高亮显示
productInfo.setName(hits.highlighter(i).fragment("name"));
productInfo.setDescription(WebUtil.HtmltoText(productInfo.getDescription()));
products.add(productInfo);
}

return new PageModel<ProductInfo>(products, hits.length(), pageSize, pageNumber);
}
return new PageModel<ProductInfo>(null, 0, pageSize, pageNumber);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值