package cn.com.warlock.mybatis.crud.builder; import static org.apache.ibatis.jdbc.SqlBuilder.BEGIN; import static org.apache.ibatis.jdbc.SqlBuilder.DELETE_FROM; import static org.apache.ibatis.jdbc.SqlBuilder.SQL; import static org.apache.ibatis.jdbc.SqlBuilder.WHERE; import java.util.Set; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.mapping.SqlSource; import org.apache.ibatis.scripting.LanguageDriver; import org.apache.ibatis.session.Configuration; import cn.com.warlock.mybatis.crud.GeneralSqlGenerator; import cn.com.warlock.mybatis.crud.helper.ColumnMapper; import cn.com.warlock.mybatis.crud.helper.EntityHelper; import cn.com.warlock.mybatis.crud.helper.EntityMapper; import cn.com.warlock.mybatis.crud.helper.TableMapper; import cn.com.warlock.mybatis.parser.EntityInfo; public class DeleteBuilder { /** * @param configuration * @param entity */ public static void build(Configuration configuration, LanguageDriver languageDriver, EntityInfo entity) { String msId = entity.getMapperClass().getName() + "." + GeneralSqlGenerator.methodDefines.deleteName(); // 从参数对象里提取注解信息 EntityMapper entityMapper = EntityHelper.getEntityMapper(entity.getEntityClass()); // 生成sql String sql = buildDeleteSql(entityMapper); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, entity.getEntityClass()); MappedStatement.Builder statementBuilder = new MappedStatement.Builder(configuration, msId, sqlSource, SqlCommandType.DELETE); MappedStatement statement = statementBuilder.build(); configuration.addMappedStatement(statement); } public static String buildDeleteSql(EntityMapper entityMapper) { // 从表注解里获取表名等信息 TableMapper tableMapper = entityMapper.getTableMapper(); ColumnMapper idColumn = entityMapper.getIdColumn(); // 根据字段注解和属性值联合生成sql语句 BEGIN(); DELETE_FROM(tableMapper.getName()); WHERE(idColumn.getColumn() + "=#{" + idColumn.getProperty() + "}"); return String.format(SqlTemplate.SCRIPT_TEMAPLATE, SQL()); } }