package org.nutz.dao.sql;
import org.nutz.dao.Condition;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.jdbc.ValueAdaptor;
import org.nutz.dao.pager.Pager;
/**
* 封装了自定义 SQL
*
* @author zozoh(zozohtnt@gmail.com)
*/
public interface Sql extends DaoStatement {
/**
* 所谓"变量",就是当 Sql 对象转换成 Statement 对象前,预先被填充的占位符。
* <p>
* 这个集合允许你为 SQL 的变量占位符设值
*
* @return 变量集合
*/
VarSet vars();
/**
* 所谓"参数",就是当 Sql 对象转换成 PreparedStatement 对象前,会被填充成 ? 的占位符
* <p>
* 集合是一个个的名值对,你设置了值的地方,会在执行时,被设置到 PreparedStatement中。<br>
* 这样省却了你一个一个计算 ? 位置的烦恼
*
* @return 参数集合
*/
VarSet params();
/**
* 手动为某个语句参数设置适配器。
* <p>
* 默认的,Sql 的实现类会自动根据你设置的值,自动为所有的参数设置适配器。<br>
* 但是,有些时候,你可能传入了 null 值或者其他的特殊对象,<br>
* 这里允许你主动为其设置一个适配器,这样你就有了终极手段最合理的适配你的参数对象
*
* @param name
* 对应参数的名称
* @param adaptor
* 适配器实例
*/
void setValueAdaptor(String name, ValueAdaptor adaptor);
/**
* @return 整个 SQL 的变量索引,你可以获得变量的个数和名称
*/
VarIndex varIndex();
/**
* @return 整个 SQL 的参数索引,你可以获得参数的个数和名称
*/
VarIndex paramIndex();
/**
* 将当前的参数列表存储,以便执行批处理
*/
void addBatch();
/**
* 清除所有的曾经设置过的参数
*/
void clearBatch();
/**
* 重写父接口返回值
*/
Sql setEntity(Entity<?> entity);
/**
* 当前 Statement 被执行完毕后,有可能会产生一个 ResultSet。 针对这个 ResultSet 你可以执行更多的操作。
* <p>
* 当然如果不是 SELECT 语句,那么你依然可以设置一个回调,<br>
* 当你的语句执行完毕后, 会调用它(Connection 不会被 commit),但是 ResultSet 参数会是 null
*
* @param callback
* 回调函数
* @return 自身
*/
Sql setCallback(SqlCallback callback);
/**
* 为 SQL 增加条件,SQL 必须有 '$condition' 变量
*
* @param cnd
* 条件
* @return 自身
*/
Sql setCondition(Condition cnd);
/**
* @return 一个新的和当前对象一样的对象。只是原来设置的变量和参数,需要你重新设置
*/
Sql duplicate();
public void setSourceSql(String sql) ;
public String getSourceSql() ;
/**
* 为自定义SQL设置Pager
* <p/><b>如果设置为非空值,那么将附加上分页语句!!</b>
* <p/><b>由于不带SQL语法分析,无法探知用户是否已经自行添加分页语句!!</b>
* <p/><b>使用这个功能,你就不要自己在SQL里面写limit了!!!</b>
*/
public DaoStatement setPager(Pager pager);
}