/**
* Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.fang.bbks.common.persistence;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Sort;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.search.FullTextSession;
/**
* DAO支持接口
* @author ThinkGem
* @version 2013-01-15
* @param <T>
*/
public interface BaseDao<T> {
/**
* 获取实体工厂管理对象
*/
public EntityManager getEntityManager();
/**
* 获取 SESSION
*/
public Session getSession();
/**
* 清除緩存
*/
public void clear();
// -------------- QL Query --------------
/**
* QL 分页查询
* @param page
* @param qlString
* @param parameter
* @return
*/
public Page<T> find(Page<T> page, String qlString, Object... parameter);
/**
* QL 查询
* @param qlString
* @param parameter
* @return
*/
public List<T> find(String qlString, Object... parameter);
/**
* QL 更新
* @param sqlString
* @param parameter
* @return
*/
public int update(String sqlString, Object... parameter);
/**
* 创建 QL 查询对象
* @param qlString
* @param parameter
* @return
*/
public Query createQuery(String qlString, Object... parameter);
// -------------- QL Query --------------
/**
* SQL 分页查询
* @param page
* @param qlString
* @param parameter
* @return
*/
public Page<T> findBySql(Page<T> page, String qlString, Object... parameter);
/**
* SQL 查询
* @param sqlString
* @param parameter
* @return
*/
public List<T> findBySql(String sqlString, Object... parameter);
/**
* SQL 更新
* @param sqlString
* @param parameter
* @return
*/
public int updateBySql(String sqlString, Object... parameter);
/**
* 创建 SQL 查询对象
* @param sqlString
* @param parameter
* @return
*/
public Query createSqlQuery(String sqlString, Object... parameter);
// -------------- Criteria --------------
/**
* 分页查询
* @param page
* @return
*/
public Page<T> find(Page<T> page);
/**
* 使用检索标准对象分页查询
* @param detachedCriteria
* @param page
* @return
*/
public Page<T> find(Page<T> page, DetachedCriteria detachedCriteria);
/**
* 使用检索标准对象查询
* @param detachedCriteria
* @return
*/
public List<T> find(DetachedCriteria detachedCriteria);
/**
* 使用检索标准对象查询记录数
* @param detachedCriteria
* @return
*/
public long count(DetachedCriteria detachedCriteria);
/**
* 创建与会话无关的检索标准对象
* @param criterions Restrictions.eq("name", value);
* @return
*/
public DetachedCriteria createDetachedCriteria(Criterion... criterions);
// -------------- Hibernate search --------------
/**
* 获取全文Session
*/
public FullTextSession getFullTextSession();
/**
* 建立索引
*/
public void createIndex();
/**
* 全文检索
* @param page 分页对象
* @param query 关键字查询对象
* @param queryFilter 查询过滤对象
* @param sort 排序对象
* @return 分页对象
*/
public Page<T> search(Page<T> page, BooleanQuery query, BooleanQuery queryFilter, Sort sort);
/**
* 获取全文查询对象
*/
public BooleanQuery getFullTextQuery(BooleanClause... booleanClauses);
/**
* 获取全文查询对象
* @param q 查询关键字
* @param fields 查询字段
* @return 全文查询对象
*/
public BooleanQuery getFullTextQuery(String q, String... fields);
/**
* 设置关键字高亮
* @param query 查询对象
* @param list 设置高亮的内容列表
* @param fields 字段名
*/
public List<T> keywordsHighlight(BooleanQuery query, List<T> list, String... fields);
}