1.构造函数
//调用父类AbstractQueryRunner,DataSource/StatementConfiguration为空
public QueryRunner();
/*pmdKnownBroken=true不会对SQL参数个数是否匹配进行检查,为false则会进行检查,
有些数据库驱动不支持java.sql.ParameterMetaData#getParameterType(int),抛出SQLFeatureNotSupportedException异常,这种情况下
pmdKnownBroken会被自动置为true,且后续不在做检查
*/
public QueryRunner(boolean pmdKnownBroken);
/*设置数据源,后续操作不需要指定Connection,内部自动判断调用ds.getConnection()*/
public QueryRunner(DataSource ds);
/*设置结果集的处理配置相关的信息,在执行SQL前创建Statement后会对其设置相关的参数,
StatementConfiguration使用了Builder模式创建对象
*/
public QueryRunner(StatementConfiguration stmtConfig);
2.batch相关函数,用于处理一批SQL格式相同,参数不同的update/insert/delete DML操作
//使用该方法必须实例化QueryRunner时指定DataSource,返回每个SQL受影响的行数
public int[] batch(String sql, Object[][] params) throws SQLException;
//手动传入Connection
public int[] batch(Connection conn, String sql, Object[][] params) throws SQLException;
/*私有方法,上述两种均都调用该方法,closeConn为true将会在执行完成后关闭连接,反之需要手动关闭
内部通过循环params填充参数,然后调用Statement#addBatch,最后统一执行Statement#executeBatch
*/
private int[] batch(Connection conn, boolean closeConn, String sql, Object[][] params) throws SQLException;
3.execute相关函数,用于执行SQL,也可以执行存储过程
/*执行的是存储过程时,不会返回结果集(默认-1),参数是OutParameter的实例会被当作存储过程的输出参数 call proce_name() */
public int execute(String sql, Object... params) throws SQLException;
public int execute(Connection conn, String sql, Object... params) throws SQLException;
//可以自定义返回的结果,DbUtilst也提供了几种结果(BeanHandler,ArrayHandler等)
public <T> List<T> execute(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
public <T> List<T> execute(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
private int execute(Connection conn, boolean closeConn, String sql, Object... params) throws SQLException;
private <T> List<T> execute(Connection conn, boolean closeConn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
//通过该方法将执行返回的结果为OutParameter赋值
private void retrieveOutParameters(CallableStatement stmt, Object[] params) throws SQLException;
eg:
//import java.sql.Types;
OutParameter<Integer> out = new OutParameter(Types.INTEGER, Integer.class);
queryRunner.execute(connection, "call hah(?)", out);
System.out.println(out.getValue());
4.insert相关函数,INSERT语句
//用于执行INSERT操作,且不包含任何替换参数,ResultSetHandler结果返回类型
public <T> T insert(String sql, ResultSetHandler<T> rsh) throws SQLException;
//可以包含替换参数
public <T> T insert(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
public <T> T insert(Connection conn, String sql, ResultSetHandler<T> rsh) throws SQLException;
public <T> T insert(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
eg:返回自增主键
Long key = queryRunner.insert(connection, sql, new ScalarHandler<Long>(), "1");
5.insertBatch相关函数,批量插入,参数都比较类似不做赘述
public <T> T insertBatch(String sql, ResultSetHandler<T> rsh, Object[][] params) throws SQLException;
public <T> T insertBatch(Connection conn, String sql, ResultSetHandler<T> rsh, Object[][] params) throws SQLException;
private <T> T insertBatch(Connection conn, boolean closeConn, String sql, ResultSetHandler<T> rsh, Object[][] params)
throws SQLException
6.update相关函数,支持INSERT/UPDATE/DELETE DML操作
//SQL不包含可替换参数
public int update(String sql) throws SQLException;
//SQL只包含一个可替换参数,不知道为什么要多一个这样的方法
public int update(String sql, Object param) throws SQLException;
//SQL支持多个可替换参数
public int update(String sql, Object... params) throws SQLException;
public int update(Connection conn, String sql) throws SQLException;
public int update(Connection conn, String sql, Object param) throws SQLException;
public int update(Connection conn, String sql, Object... params) throws SQLException;
//上述都直接或间接调用该私有函数
private int update(Connection conn, boolean closeConn, String sql, Object... params) throws SQLException;
7.query相关的函数,用于执行SELECT语句,主要是ResultSetHandler及其子类十分方便,代替了原生jdbc遍历ResultSet
//不推荐使用,更推荐可变参的方法
@Deprecated
public <T> T query(String sql, Object param, ResultSetHandler<T> rsh) throws SQLException;
@Deprecated
public <T> T query(String sql, Object[] params, ResultSetHandler<T> rsh) throws SQLException;
public <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException;
public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
@Deprecated
public <T> T query(Connection conn, String sql, Object param, ResultSetHandler<T> rsh) throws SQLException;
@Deprecated
public <T> T query(Connection conn, String sql, Object[] params, ResultSetHandler<T> rsh) throws SQLException;
public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh) throws SQLException;
public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;
private <T> T query(Connection conn, boolean closeConn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException;