package com.ps.base.service;

import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;

public interface BaseService <M extends java.io.Serializable, PK extends java.io.Serializable> {

	public PK save(M model);
	
	public void update(M model);
	
	public void delete(PK id);
	
	public void deleteObject(M model);
	
	public void saveOrUpdate(M model);
		
	public M get(PK id);
	
	public long countAll();
	
	public long countBy(String propertyName,Object value);
	
	public long countByMap(Map map);
	
	public List<M> findAll();
	
	public List<M> findAll(int from,int rows);
	
	public List<M> findAll(String orderBy,boolean isAsc);
	
	public List<M> findAll(int from,int rows,String orderBy,boolean isAsc);
	
	public List<M> findBy(String propertyName,Object value);
	
	public List<M> findBy(int from,int rows,String propertyName,Object value);
	
	public List<M> findBy(String propertyName,Object value,String orderBy,boolean isAsc);
	
	public List<M> findBy(int from,int rows,String propertyName,Object value,String orderBy,boolean isAsc);
	
	public List<M> findByMap(Map map);
	
	public List<M> findByMap(int from,int rows,Map map);
	
	public List findNativeSqlQuery(String sql);

	public long countByCriteria(Criterion... criterions);
	
	public Criteria createCriteria(Criterion... criterions);
	/**
	 * ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ð±ï¿½ï¿½Ñ¯ï¿½ï¿½ï¿½ï¿½
	 * 
	 * @param criterionList
	 *            ï¿½ï¿½ï¿½ï¿½ï¿½Ð±ï¿½
	 * @return ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ä¶ï¿½ï¿½ï¿½ï¿½Ð±ï¿?
	 */
	public List<M> findByCriterionList(List<Criterion> criterionList);
}