• JDBC-day07(Apache-DBUtils实现CRUD操作)


    九:Apache-DBUtils实现CRUD操作

    1 Apache-DBUtils简介

    Apache-DbUtils 是 Apache 组织提供的开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用DbUtils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。因此DbUtils成为很多不喜欢Hibernate的公司的首选。
    使用Apache-DbUtils之前需要导入它的jar包,官网上会有,或者找国内镜像站找也可以。

    2.常用的API及案例

    • org.apache.commons.dbutils.QueryRunner
      • 使用此类可以更快捷的进行删除,添加,修改操作,因为此类封装了我们之前自己写的删除,添加,修改操作。

    例:对Customers表进行插入

    	@Test
    	public void testInsert() {
    		Connection conn = null;        
    		try {
    			QueryRunner runner = new QueryRunner();
    			conn = JDBCUtils.getConnection2();
    			String sql = "insert into customers(name,email,birth)values(?,?,?)";
    			int updateCount = runner.update(conn, sql, "薛之谦","xuezhiqian@168.com",new Date(87654323456L));
    			if(updateCount != 0) {
    				System.out.println("修改了" + updateCount + "条记录");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtils.closeResource(conn, null);
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • org.apache.commons.dbutils.ResultSetHandler

      • 定义了查询相关的接口,它的实现类根据其接口进行了具体的操作编写
        
        • 1
      • ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)
        
        • 1
    • 接口的主要实现类:

      • ArrayHandler:把结果集中的第一行数据转成对象数组。

      • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。

      • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。

      • BeanListHandler :将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。

      • ColumnListHandler:将结果集中某一列的数据存放到List中。

      • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。

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

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

      • ScalarHandler :查询单个值对象

    例:查询操作
    BeanHandler:ResultSetHandler接口的实现类,用于封装表中的一条记录。

    	@Test
    	public void testQuery1() {
    		Connection conn = null;                              
    		try {
    			QueryRunner runner = new QueryRunner();
    			conn = JDBCUtils.getConnection2();
    			String sql = "select id,name,email,birth from customers where id = ?";
    			BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);
    			
    			Customer customer = runner.query(conn, sql, handler, 23);
    			System.out.println(customer);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtils.closeResource(conn, null);
    		}		
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    BeanListHandler:ResultSetHandler接口的实现类,用于封装表中的多条记录构成的集合。

    	@Test
    	public void testQuery2() {
    		Connection conn = null;                              
    		try {
    			QueryRunner runner = new QueryRunner();
    			conn = JDBCUtils.getConnection2();
    			String sql = "select id,name,email,birth from customers where id < ?";
    			
    			BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);
    			List<Customer> list = runner.query(conn, sql, handler, 23);
    			list.forEach(System.out::println);//打印出多条记录
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtils.closeResource(conn, null);
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    MapHandler:ResultSetHandler接口的实现类,对应表中的一条记录。 将字段及相应字段的值作为Map中的Key和Value。

    @Test
    public void testQuery3() {
    	Connection conn = null;                                         
    	try {
    		QueryRunner runner = new QueryRunner();
    		conn = JDBCUtils.getConnection2();
    		String sql = "select id,name,email,birth from customers where id = ?";
    		
    		MapHandler handler = new MapHandler();
    		Map<String, Object> map = runner.query(conn, sql, handler, 23);
    		
    		System.out.println(map);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}finally {
    		JDBCUtils.closeResource(conn, null);
    	}		
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    MapListHandler:ResultSetHandler接口的实现类,对应表中的多条记录。将字段及相应字段的值作为Map中的Key和Value,将这些map添加到List中

    @Test
    public void testQuery4() {
    	Connection conn = null;                
    	try {
    		QueryRunner runner = new QueryRunner();
    		conn = JDBCUtils.getConnection2();
    		String sql = "select id,name,email,birth from customers where id < ?";
    		
    		MapListHandler handler = new MapListHandler();
    		List<Map<String, Object>> list = runner.query(conn, sql, handler, 23);
    		
    		list.forEach(System.out::println);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}finally {
    		JDBCUtils.closeResource(conn, null);
    	}		
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ScalarHandler:用于查询特殊值

    	@Test
    	public void testQuery5() {
    		Connection conn = null;        
    		try {
    			QueryRunner runner = new QueryRunner();
    			conn = JDBCUtils.getConnection2();
    			String sql = "select count(*) from customers";
    			
    			ScalarHandler handler = new ScalarHandler();
    			Long count = (Long)runner.query(conn, sql, handler);
    			System.out.println(count);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtils.closeResource(conn, null);
    		}		
    	}
    	
    	@Test
    	public void testQuery6() {
    		Connection conn = null;
    		try {
    			QueryRunner runner = new QueryRunner();
    			conn = JDBCUtils.getConnection2();
    			String sql = "select max(birth) from customers";
    			
    			ScalarHandler handler = new ScalarHandler();
    			Date maxBirth = (Date) runner.query(conn, sql, handler);
    			System.out.println(maxBirth);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtils.closeResource(conn, null);
    		}		
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • org.apache.commons.dbutils.DbUtils

      • DbUtils工具类提供如关闭连接、装载JDBC驱动程序等常规操作
        
        • 1

    例:资源关闭

    public static void closeResource1(Connection conn,Statement ps,ResultSet rs){           
    //		try { 
    //			DbUtils.close(conn);
    //		} catch (SQLException e) {
    //			e.printStackTrace();
    //		}
    //		try {
    //			DbUtils.close(ps);
    //		} catch (SQLException e) {
    //			e.printStackTrace();
    //		}
    //		try {
    //			DbUtils.close(rs);
    //		} catch (SQLException e) {
    //			e.printStackTrace();
    //		}
    
    		DbUtils.closeQuietly(conn);
    		DbUtils.closeQuietly(ps);
    		DbUtils.closeQuietly(rs);
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    其中可能会出现不少的小问题,请多多包含
    感谢大家的支持,关注,评论,点赞!
    参考资料:尚硅谷_宋红康_JDBC核心技术

  • 相关阅读:
    感受野计算问题
    Java设计模式-活动对象与访问者
    会议纪要与需求变更申请书(软间项目管理课程)
    gRPC之gateway集成swagger
    Python潮流周刊#3:PyPI 的安全问题
    声音信号处理笔记(一)
    WordPress(6)网站侧边栏倒计时进度小工具
    cmdline-tools component is missing
    springboot236基于springboot在线课程管理系统的设计与实现
    Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置
  • 原文地址:https://blog.csdn.net/weixin_51202460/article/details/133904004