JAVA中DBUtils的QueryRunner类实现增删改查详解,八年java经验跳槽面试题

String sql = “SELECT * FROM gjp_ledger”;

QueryRunner qr = new QueryRunner();

//执行query方法,传递连接对象,SQL语句,结果集处理方式

ArrayListHandler

List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());

for(Object[] objects : list){

for(Object obj : objects){

System.out.print(obj+" ");

}

System.out.println();

}

}

  • BeanHandler 将结果集第一行数据封装到一个对应的业务类实例中

(1): 定义业务数据类Ledger(实体类,javaBean)

public class Ledger {

//要生成空参、有参构造、set和get方法、toString方法

private int lid;

private String parent;

private double money;

private int sid;

private String account;

private String createtime;

private String ldesc;

}

(2)测试案例代码

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

QueryRunner qr = new QueryRunner();

//BeanHandler泛型,构造方法(和反射有关系的对象)

Ledger legder = qr.query(conn, sql, new BeanHandler(Ledger.class));

System.out.println(legder);

}

  • BeanListHandler 将结果集中的每一行数据都封装到一个对应的业务类实例中,再将多个业务类实例对象存放到List里。

public static void main(String[] args) throws Exception {

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,BeanListHandler 每一行数据封装到业务数据类中

QueryRunner qr = new QueryRunner();

List list = qr.query(conn, sql, new BeanListHandler(Ledger.class));

for(Ledger ledger : list){

System.out.println(ledger);

}

}

  • MapHandler 将结果集中的第一行数据封装到一个Map中,key是列名,value是对应的值。

public static void main(String[] args) throws Exception {

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,MapHandler 封装到一个Map集合中,存储键值对集合

QueryRunner qr = new QueryRunner();

Map<String,Object> map = qr.query(conn, sql,new MapHandler());

for(String key : map.keySet()){

System.out.println(key+" "+map.get(key));

}

}

  • MapListHandler 将结果集中的每一行数据都封装到一个Map里,然后再将多个Map存放到List

public static void main(String[] args) throws Exception{

Connection conn = MyJDBCUtils.getConnection();

String sql = “SELECT * FROM gjp_ledger”;

//结果集处理方式,MapListHandler 数据中的每一行封装成Map集合,多个Map集合存储到List集合

QueryRunner qr = new QueryRunner();

List<Map<String,Object>> list = qr.query(conn, sql,new MapListHandler());

for(Map<String,Object> map : list){

for(String key : map.keySet()){

System.out.print(key+" "+map.get(key));

}

System.out.println();

多表联合查询


QueryRunner qr = new QueryRunner();

@Override

public List getEmpList(Integer pageSize, Integer pageIndex, String empName) {

List empList = new ArrayList();

/*

//使用new BeanListHandler<>(Emp.class);会导致集合里面字段为空

Connection con = JdbcUtil.getCon();

String sql = “select emp_id empId,emp_name empName,emp_phone empPhone,emp_age empAge,emp_sex empSex,e.depa_id depaId, d.depa_name depaName FROM emp e INNER JOIN depa d ON e.depa_id=d.depa_id WHERE e.emp_name like ? limit ?,?”;

try {

empList = qr.query(con, sql, new BeanListHandler<>(Emp.class),

empName == null || “”.equals(empName) ? “%%” : “%” + empName + “%”,

(pageIndex - 1) * pageSize, pageSize);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtil.closeCon(con);

}

for (int i = 0; i < empList.size(); i++) {

System.out.println(empList.get(i));

}*/

//使用 new MapListHandler() 需要手动遍历

Connection con = JdbcUtil.getCon();

String sql = “select emp_id,emp_name,emp_phone,emp_age,emp_sex,e.depa_id, depa_name FROM emp e INNER JOIN depa d ON e.depa_id=d.depa_id WHERE e.emp_name like ? limit ?,?”;

try {

List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler(),

empName == null || “”.equals(empName) ? “%%” : “%” + empName + “%”,

(pageIndex - 1) * pageSize, pageSize);

for(Map<String,Object> map:list){

Emp emp = new Emp();

for(String key: map.keySet()){

switch (key) {

case “emp_id”:

emp.setEmpId((Integer) map.get(key));

break;

case “emp_sex”:

emp.setEmpSex((String) map.get(key));

break;

case “emp_age”:

emp.setEmpAge((Integer) map.get(key));

break;

case “emp_phone”:

emp.setEmpPhone((String) map.get(key));

break;

case “emp_name”:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer

蚂蚁、京东Java岗4面:原理+索引+底层+分布式+优化等,已拿offer
9066)]

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

[外链图片转存中…(img-AiAP8yPF-1711750439067)]

[外链图片转存中…(img-xD4qAGfz-1711750439067)]

[外链图片转存中…(img-saXlTc2x-1711750439067)]

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力帮您解答关于使用dbutils实现增删改查的问题。 首先,dbutils是Apache提供的一个用于数据库操作的工具库,可以方便地进行数据的访问和管理。通常情况下,我们需要使用JDBC驱动程序连接数据库,然后对数据库进行增删改查操作。 下面是使用dbutils进行增删改查操作的示例代码: 1.导入dbutils库和JDBC驱动程序 ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.KeyedHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; ``` 2.创建连接池对象 ``` DataSource dataSource = new ComboPooledDataSource(); ``` 3.创建QueryRunner对象 ``` QueryRunner qr = new QueryRunner(dataSource); ``` 4.执行查询语句 ``` String sql = "SELECT * FROM user WHERE id=?"; User user = qr.query(sql, new BeanHandler<User>(User.class), 1); ``` 5.执行更新语句 ``` String sql = "INSERT INTO user(username,password) VALUES(?,?)"; qr.update(sql, "admin", "123456"); ``` 6.执行批量操作 ``` Object[][] params = new Object[][] { { "user1", "password1" }, { "user2", "password2" } }; String sql = "INSERT INTO user(username,password) VALUES(?,?)"; qr.batch(sql, params); ``` 7.关闭连接池 ``` ((ComboPooledDataSource)dataSource).close(); ``` 以上是使用dbutils实现增删改查的基本示例代码,您可以根据自己的需求进行修改和扩展。希望我的回答能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值