BeanHandler 的三个参数详解

BeanHandler 的三个参数详解

例如:

 String sql ="select * from topic where type_id= ? order by time desc";

Object[] params={typeId};

newlyTopic= runner.query(sql,new BeanHandler<Topic>(Topic.class),params);

QueryRunner是dbutils提供的类 不是c3p0的 c3p0是连接池 dbutils是数据库操作工具
说参数:
他底层是preparestatement 具体操作是这样:
第三个参数是一个数组 QueryRunner会将里面下标为i的数据赋给第i+1个问号
比如这里就是 type_id = params[0] 生成的sql语句就变成了
select * from topic where type_id= [typeld的值] order by time desc
有几个问号就要数组就要有几个数据 不能多也不能少
第二个参数是Handler 因为JDBC返回的是Result对象 
但是你却可以用Topic类的引用来接受query的返回值 所以肯定处理了  至于怎么处理 就是通过Handler
c3p0的 c3p0是连接池 dbutils是数据库操作工具说参数:
他底层是preparestatement 具体操作是这样:
第三个参数是一个数组 QueryRunner会将里面下标为i的数据赋给第i+1个问号
比如这里就是 type_id = params[0] 生成的sql语句就变成了
select * from topic where type_id= [typeld的值] order by time desc
有几个问号就要数组就要有几个数据 不能多也不能少
第二个参数是Handler 因为JDBC返回的是Result对象 但是你却可以用Topic类的引用来接受query的返回值 
所以肯定处理了  至于怎么处理 就是通过Handler

public Object query(String sql, Object[] params, ResultSetHandler rsh) 

sql参数:sql语句 params参数:是给sql语句传递的参数,有的时候需要有的时候不需要,具体看你的sql语句是什么。例如你的sql语句是“SELECT * FROM tb_user”,那这时候就不需要params参数,而如果你的sql语句是“SELECT * FROM tb_user WHERE username=? AND userid = ?”,那这个时候就需要params参数了,params参数是一个Object类型的数组,数组长度取决于你sql语句中的“?”个数,例如上面那个sql语句,有两个“?”,那你就要放两个参数在这个数组里,并且顺序要匹配上sql语句中的“?”的顺序,例如上面那个语句,你的params就应该写成:Object[] params = { 用户名称,用户ID }。 rsh参数:这是一个ResultSetHandler类型,一般都是创建一个该类型的子类对象然后传进去,该类型有五个常用子类,而传递的子类对象会决定query这个方法的返回值。五个常用子类对象分别是:BeanHandler、BeanListHandler、MapHandler、MapListHandler、ScalarHandler。传递这五个子类对象后query的返回值分别是:一个JavaBean对象、一个装有多个JavaBean对象的List集合对象、一个装有一行结果集的Map对象(也就是一个Map,Map装着的是一行结果集)、一个装有多个一行结果集的Map的List集合对象(也就是List里有多个Map,每个Map都是一行结果集)、一个Object类型(这种一般运用在查询结果只有一行一列的情况)

params参数:是给sql语句传递的参数,有的时候需要有的时候不需要,具体看你的sql语句是什么。例如你的sql语句是“SELECT * FROM tb_user”,那这时候就不需要params参数,而如果你的sql语句是“SELECT * FROM tb_user WHERE username=? AND userid = ?”,那这个时候就需要params参数了,params参数是一个Object类型的数组,数组长度取决于你sql语句中的“?”个数,例如上面那个sql语句,有两个“?”,那你就要放两个参数在这个数组里,并且顺序要匹配上sql语句中的“?”的顺序,例如上面那个语句,你的params就应该写成:Object[] params = { 用户名称,用户ID }。 rsh参数:这是一个ResultSetHandler类型,一般都是创建一个该类型的子类对象然后传进去,该类型有五个常用子类,而传递的子类对象会决定query这个方法的返回值。五个常用子类对象分别是:BeanHandler、BeanListHandler、MapHandler、MapListHandler、ScalarHandler。传递这五个子类对象后query的返回值分别是:一个JavaBean对象、一个装有多个JavaBean对象的List集合对象、一个装有一行结果集的Map对象(也就是一个Map,Map装着的是一行结果集)、一个装有多个一行结果集的Map的List集合对象(也就是List里有多个Map,每个Map都是一行结果集)、一个Object类型(这种一般运用在查询结果只有一行一列的情况
发布了74 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/STUDENTstudent123/article/details/102295229