package org.theonefx.wcframework.jdbc.easyjsql;
import java.util.List;
import java.util.Map;
import org.theonefx.wcframework.jdbc.RowMapper;
import org.theonefx.wcframework.jdbc.core.BatchPreparedStatementSetter;
import org.theonefx.wcframework.jdbc.core.KeyHolder;
import org.theonefx.wcframework.jdbc.core.PreparedStatementCallback;
import org.theonefx.wcframework.jdbc.core.PreparedStatementCreator;
import org.theonefx.wcframework.jdbc.core.PreparedStatementSetter;
import org.theonefx.wcframework.jdbc.core.ResultSetExtractor;
import org.theonefx.wcframework.jdbc.core.RowCallbackHandler;
import org.theonefx.wcframework.jdbc.core.StatementCallback;
import org.theonefx.wcframework.jdbc.exception.DataAccessException;
/**
* @File : EasySql.java
* @ClassName : EasySql
* @Author : 陈曦
* @Date : 2011-6-22 下午08:03:56
* @Version : v1.0
* @Description : EasySQL,简单的sql执行器,仿CodeIgniter数据库封装实现的接口(也是api)<br>
*/
public interface EasySql {
public EasySql join(String table, String on);
public EasySql join(String table, String on, JoinType type);
public EasySql select(String select);
public EasySql from(String from);
public EasySql where(String key, Object val);
public EasySql where_greater(String key, Object val, boolean withequal);
public EasySql where_lesser(String key, Object val, boolean withequal);
public EasySql where_greater_equal(String key, Object val);
public EasySql where_lesser_equal(String key, Object val);
public EasySql where(Map<String, Object> map);
public EasySql or_where(String key, Object val);
public EasySql or_where(Map<String, Object> map);
public EasySql where_in(String key, Object... objs);
public EasySql or_where_in(String key, Object... objs);
public EasySql where_not_in(String key, Object... objs);
public EasySql or_where_not_in(String key, Object... objs);
public EasySql like(String key, String val);
public EasySql or_like(String key, String val);
public EasySql like(Map<String, String> map);
/**
* @Method : limit
* @author : 陈曦
* @date : 2011-9-29 下午03:09:09
* @Description : 分页条件
* @param start 启始记录数
* @param limit 需要查询的记录数
*/
public EasySql limit(int start, int limit);
public EasySql limit(int limit);
public EasySql set(String key, Object val);
public EasySql set(Map<String, Object> map);
public EasySql setBean(Object bean);
public EasySql orderBy(String fieldname, OrderType type);
public EasySql orderBy(String fieldname);
public EasySql clear();
// =================================================================execute触发,调用以下方法以后无法再继续链式操作了=====================================================
public int execInsert();
public int execInsert(String table);
public int execInsert(String table, Map<String, Object> map);
public int execInsertBean(String table, Object bean);
public int execDelete();
public int execDelete(String table);
public int execDelete(String table, Map<String, Object> map);
public int execUpdate();
public int execUpdate(String table);
public int execUpdate(String table, Map<String, Object> map);
public <T> List<T> getAsList(String table, RowMapper<T> mapper);
public <T> List<T> getAsList(RowMapper<T> mapper);
public <T> T getAsObject(RowMapper<T> mapper);
public <T> T getAsObject(String table, RowMapper<T> mapper);
public int getAllResultCount(String table);
public int getAllResultCount();
// =================================================================直接操作jdbc=====================================================
public <T> T execute(StatementCallback<T> action) throws DataAccessException;
public void execute(final String sql) throws DataAccessException;
public <T> T query(final String sql, final ResultSetExtractor<T> rse) throws DataAccessException;
public void query(String sql, RowCallbackHandler rch) throws DataAccessException;
public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException;
public Map<String, Object> queryForMap(String sql) throws DataAccessException;
public <T> T queryForObject(String sql, RowMapper<T> rowMapper) throws DataAccessException;
public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException;
public long queryForLong(String sql) throws DataAccessException;
public int queryForInt(String sql) throws DataAccessException;
public <T> List<T> queryForList(String sql, Class<T> elementType) throws DataAccessException;
public List<Map<String, Object>> queryForList(String sql) throws DataAccessException;
public int update(final String sql) throws DataAccessException;
public int[] batchUpdate(final String[] sql) throws DataAccessException;
public int[] batchUpdate(String sql, final BatchPreparedStatementSetter pss) throws DataAccessException;
public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action) throws DataAccessException;
public <T> T execute(String sql, PreparedStatementCallback<T> action) throws DataAccessException;
public <T> T query(PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor<T> rse) throws DataAccessException;
public <T> T query(PreparedStatementCreator psc, ResultSetExtractor<T> rse) throws DataAccessException;
public <T> T query(String sql, PreparedStatementSetter pss, ResultSetExtractor<T> rse) throws DataAccessException;
public <T> T query(String sql, Object[] args, int[] argTypes, ResultSetExtractor<T> rse) throws DataAccessException;
public <T> T query(String sql, Object[] args, ResultSetExtractor<T> rse) throws DataAccessException;
public <T> T query(String sql, ResultSetExtractor<T> rse, Object... args) throws DataAccessException;
public void query(PreparedStatementCreator psc, RowCallbackHandler rch) throws DataAccessException;
public void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) throws DataAccessException;
public void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) throws DataAccessException;
public void query(String sql, Object[] args, RowCallbackHandler rch) throws DataAccessException;
public void query(String sql, RowCallbackHandler rch, Object... args) throws DataAccessException;
public <T> List<T> query(PreparedStatementCreator psc, RowMapper<T> rowMapper) throws DataAccessException;
public <T> List<T> query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) throws DataAccessException;
public <T> List<T> query(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) throws DataAccessException;
public <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException;
public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException;
public <T> T queryForObject(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) throws DataAccessException;
public <T> T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException;
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException;
public <T> T queryForObject(String sql, Object[] args, int[] argTypes, Class<T> requiredType) throws DataAccessException;
public <T> T queryForObject(String sql, Object[] args, Class<T> requiredType) throws DataAccessException;
public <T> T queryForObject(String sql, Class<T> requiredType, Object... args) throws DataAccessException;
public Map<String, Object> queryForMap(String sql, Object[] args, int[] argTypes) throws DataAccessException;
public Map<String, Object> queryForMap(String sql, Object... args) throws DataAccessException;
public long queryForLong(String sql, Object[] args, int[] argTypes) throws DataAccessException;
public long queryForLong(String sql, Object... args) throws DataAccessException;
public int queryForInt(String sql, Object[] args, int[] argTypes) throws DataAccessException;
public int queryForInt(String sql, Object... args) throws DataAccessException;
public <T> List<T> queryForList(String sql, Object[] args, int[] argTypes, Class<T> elementType) throws DataAccessException;
public <T> List<T> queryForList(String sql, Object[] args, Class<T> elementType) throws DataAccessException;
public <T> List<T> queryForList(String sql, Class<T> elementType, Object... args) throws DataAccessException;
public List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes) throws DataAccessException;
public List<Map<String, Object>> queryForList(String sql, Object... args) throws DataAccessException;
public int update(PreparedStatementCreator psc) throws DataAccessException;
public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) throws DataAccessException;
public int update(String sql, PreparedStatementSetter pss) throws DataAccessException;
public int update(String sql, Object[] args, int[] argTypes) throws DataAccessException;
public int update(String sql, Object... args) throws DataAccessException;
}