package cn.org.rapid_framework.jdbc.sqlgenerator;
import cn.org.rapid_framework.jdbc.sqlgenerator.metadata.Table;
/**
* 根据Table对象生成增删改查sql工具类.
*
* <h3>API使用</h3>
* <pre>
* //table为metadata类,根据该类的数据生成增删改查sql
* Table table = new Table("user",new Column("user_id","userId",true),new Column("user_name","userName"));
* SqlGenerator singleGenerator = new SpringNamedSqlGenerator(table);
*
* //sql的值为: INSERT user (user_id,user_name) VALUES (:userId,:userName)
* String sql = singleGenerator.getInsertSql();
* </pre>
*
* @see Table
* @author badqiu
*
*/
public interface SqlGenerator {
/**
* @return INSERT user (user_id,user_name,pwd ) VALUES ( :userId,:userName,:pwd )
*/
public String getInsertSql();
/**
* 单主键的表,使用固定的"?"来作为参数,联合主键则使用各自的column propertyName作为命名参数
*
* <pre>
* 单主键: UPDATE user SET (user_id = :userId,user_name = :userName ) WHERE user_id = ?
* 联合主键: UPDATE user SET (user_id = :userId,user_name = :userName ) WHERE user_id = :userId AND group_id = :groupId
* </pre>
*/
public String getUpdateByPkSql();
/**
*
* 单主键的表,使用固定的"?"来作为参数,联合主键则使用各自的column propertyName作为命名参数
*
* <pre>
* 单主键: DELETE FROM user WHERE user_id = ?
* 联合主键: DELETE FROM user WHERE user_id = :userId AND group_id = :groupId
* </pre>
*/
public String getDeleteByPkSql();
/**
* 单主键的表,使用固定的"?"来作为参数,联合主键则使用各自的column propertyName作为命名参数
*
* <pre>
* 单主键: SELECT user_id userId,user_name userName FROM user WHERE user_id = ?
* 联合主键: SELECT user_id userId,user_name userName FROM user WHERE user_id = :userId AND group_id = :groupId
* </pre>
*/
public String getSelectByPkSql();
/**
* 得到列的sql段用于其它sql的拼接查询
* @return user_id userId,user_name userName
*/
public String getColumnsSql();
/**
* 增加前缀,得到列的sql段用于其它sql的拼接查询
* @return prefix.user_id prefix.userId,prefix.user_name userName
*/
public String getColumnsSql(String columnPrefix);
public Table getTable();
}