DbUtils源码分析-QueryRunner

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值