package jef.database.wrapper.processor; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import jef.database.IQueryableEntity; import jef.database.OperateTarget; public class InsertWrapper implements StatementPreparer, InsertStep { private static final StatementPreparer P = new StatementPreparer() { public PreparedStatement doPrepareStatement(OperateTarget conn, String sql) throws SQLException { return conn.prepareStatement(sql); } }; private StatementPreparer preparer = P; @SuppressWarnings("unchecked") private List<InsertStep> processors = Collections.EMPTY_LIST; @Override public void callBefore(List<? extends IQueryableEntity> data) throws SQLException { for (InsertStep processor : processors) { processor.callBefore(data); } } @Override public void callAfterBatch(List<? extends IQueryableEntity> data) throws SQLException { for (InsertStep processor : processors) { processor.callAfterBatch(data); } } @Override public void callAfter(IQueryableEntity data) throws SQLException { for (InsertStep processor : processors) { processor.callAfter(data); } } @Override public PreparedStatement doPrepareStatement(OperateTarget conn, String sql) throws SQLException { return preparer.doPrepareStatement(conn, sql); } public void addProcessor(InsertStep processor) { if (processors.isEmpty()) { processors = new ArrayList<InsertStep>(); } processors.add(processor); if (processor instanceof StatementPreparer) { if(this.preparer!=P){ throw new UnsupportedOperationException("两项特性均需要调整 conn.prepareStatement()的参数,无法同时满足。"); } this.preparer = (StatementPreparer) processor; } } }