package com.founderdpt.comm.xworld.base;
import java.util.List;
import java.util.Map;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQSequence;
import com.founderdpt.comm.xworld.db.IXQSession;
import com.founderdpt.comm.xworld.orm.XMLConfigClientTemplate;
import com.founderdpt.comm.xworld.orm.exception.XMLDataAccessException;
import com.founderdpt.comm.xworld.orm.page.Page;
public abstract class BaseDao {
protected XMLConfigClientTemplate template = new XMLConfigClientTemplate();
protected abstract String getNameSpace();
/**
* 根据查询参数查询某个对象
* @param xpath 配置文件中查询语句的xpath路径
* @param clazz 查询对象
* @param paramObj 查询参数
* @return
* @throws XMLDataAccessException
*/
public <T> T queryForObject(String xpath, Class<T> clazz, Object paramObj)
throws XMLDataAccessException {
return template.queryForObject(getNameSpace(), xpath, clazz, paramObj);
}
/**
* 根据查询参数查询对象列表
* @param xpath 配置文件中查询语句的xpath路径
* @param clazz 查询对象
* @param paramObj 查询参数
* @return
* @throws XMLDataAccessException
*/
public <T> List<T> queryForList(String xpath, Class<T> clazz,
Object paramObj) throws XMLDataAccessException {
return template.queryForList(getNameSpace(), xpath, clazz, paramObj);
}
/**
* 根据查询参数查询对象总数
* @param clazz 查询对象
* @param where Xquery 中的 where子句
* @param paramObj 查询参数
* @return
*/
public <T> long count(Class<T> clazz,String where,Object paramObj) {
return template.count(clazz, where, paramObj);
}
/**
* 查询结果以Map形式返回,查询语句中的return 满足<map><key></key><value></value></map>
* @param xpath 配置文件中查询语句的xpath路径
* @param paramObj 查询参数
* @return
*/
public Map queryForMap(String xpath, Object paramObj) {
return template.queryForMap(getNameSpace(), xpath, paramObj);
}
/**
* 根据查询参数查询对象列表,分页查询
* @param xpath 配置文件中查询语句的xpath路径
* @param clazz 查询对象
* @param paramObj 查询参数
* @param pageNo 查询起始位置从1开始
* @param pageSize 查询个数
* @return
* @throws XMLDataAccessException
*/
public <T> List<T> queryForList(String xpath, Class<T> clazz,
Object paramObj, int pageNo, int pageSize)
throws XMLDataAccessException {
return template.queryForList(getNameSpace(), xpath, clazz, paramObj,
pageNo, pageSize);
}
public <T> Page<T> queryForPageList(Class<T> clazz,String where,Object paramObj ,Page<T> page) {
return template.queryForPageList(clazz, where, paramObj, page);
}
public String queryForSring(String xpath, Object paramObj)
throws XMLDataAccessException {
return template.queryForSring(getNameSpace(), xpath, paramObj);
}
/**
* 往数据库里面添加一条记录
* @param paramObj 待保存的javaBean对象
* @param v_schema 是否需要schema验证,true表示需要
*/
public void save(Object paramObj, boolean v_schema) {
template.save(paramObj, v_schema);
}
/**
* 往数据库里面添加一条记录,需要schema验证
* @param paramObj 待保存的javaBean对象
*/
public void save(Object paramObj ) {
template.save(paramObj, true);
}
/**
* 根据id查询单个对象
* @param id 对象id
* @param clazz 查询对象
* @return
*/
public <T> T get(String id,Class<T> clazz){
return template.get(id, clazz);
}
/**
* 根据id删除对象
* @param id 对象id
* @param clazz 查询对象
*/
public void delete(String id,Class clazz){
template.delete(id, clazz);
}
/**
* 更新对象
* @param paramObj 新对象数据
*/
public void update(Object paramObj){
template.update(paramObj);
}
/**
* 更新对象
* @param paramObj 新对象数据
* @param v_schema 是否需要schema验证,true表示需要
*/
public void update(Object paramObj,boolean v_schema){
template.update(paramObj,v_schema);
}
/**
* 查询对象列表,分页查询
* @param clazz 查询对象
* @param pageNo 查询起始位置,从1开始
* @param pageSize 查询个数
* @return
*/
public <T> List<T> queryForList(Class<T> clazz, Integer pageNo,
Integer pageSize) {
return template.queryForList(clazz,pageNo,pageSize);
}
public <T> Page<T> queryForList(String xpath,
Class<T> clazz, Object paramObj,Page page) {
return template.queryForList(getNameSpace(),xpath,clazz,paramObj,page);
}
/**
* 根据查询参数查询总数
* @param xpath 配置文件中查询语句的xpath路径
* @param clazz 查询对象
* @param paramObj 查询参数
* @return
*/
public <T> Long queryCount(String xpath,
Class<T> clazz, Object paramObj) {
return template.queryCount(getNameSpace(),xpath,clazz,paramObj);
}
/**
* 查询所有的对象
* @param clazz 查询对象
* @return
*/
public <T> List<T> queryForList(Class<T> clazz) {
return template.queryForList(clazz);
}
/**
* 执行xquery语句
* @param query xquery语句
* @return
* @throws XQException
*/
public String executeQuery(String query) throws XQException {
return getSession().executeQuery(query);
}
/**
* 得到IXQSession
* @return
*/
public IXQSession getSession() {
return template.getSession();
}
/**
* 执行xquery语句,返回 XQSequence
* @param query xquery语句
* @return
* @throws XQException
*/
public XQSequence executeQuerySequence(String query) throws XQException {
return getSession().executeQuerySequence(query);
}
}