🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## SQLExecutor定制 SQLExecutor是核心类, 负责底层的JDBC 执行,SQLManager会调用SQLExecutor得到执行结果,SQLExecutor有来三个类 * BaseSQLExecutor是核心类,执行JDBC操作 * BaseStatementOnlySQLExecutor 对于不支持PreparedStatement的数据库引擎使用此 * QuerySQLExecutor,只支持查询不支持更新的SQL查询引擎使用,所有更新API都会抛出异常 SQLExecutor是在SQLManager中每次调用通过dbStyle.buildExecutor创建一个新的实例,因此可以扩展DBStyle来 可以扩展如上任何一个子类 ```java public interface DBStyle { SQLExecutor buildExecutor(ExecuteContext executeContext); } ``` 如下是一个BaseSQLExecutor扩展,假设对某些查询,需要设置JDBC Fetch Size ```java public static class MyExecutor extends BaseSQLExecutor{ public MyExecutor(ExecuteContext executeContext) { super(executeContext); } @Override protected ResultSetHolder dbQuery(Connection conn, String sql, List<SQLParameter> jdbcPara) throws SQLException { if(this.getExecuteContext().target!= UserEntity.class){ return super.dbQuery(conn,sql,jdbcPara); } //对于UserEntity对象查询,考虑使用特殊设置 PreparedStatement ps = conn.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); ps.setFetchSize(100000); this.setPreparedStatementPara(ps, jdbcPara); ResultSet rs = ps.executeQuery(); return new ResultSetHolder(ps, rs); } } ``` 设计一个新的DBStyle ```java public static class XXXStylePlus extends MySqlStyle { @Override public SQLExecutor buildExecutor(ExecuteContext executeContext){ return new MyExecutor(executeContext); } } ```