• Java后端 学习路线 笔记汇总表【黑马程序员】
  1. Spring-学习笔记01【Spring框架简介】【day01】
  2. Spring-学习笔记02【程序间耦合】
  3. Spring-学习笔记03【Spring的IOC和DI】
  4. Spring-学习笔记04【Spring的常用注解】【day02】
  5. Spring-学习笔记05【基于XML的IOC的案例】
  6. Spring-学习笔记06【Spring的新注解】 day02资料_dbutils
  7. Spring-学习笔记07【银行转账案例】【day03】
  8. Spring-学习笔记08【面向切面编程AOP】
  9. Spring-学习笔记09【JdbcTemplate的基本使用】【day04】
  10. Spring-学习笔记10【Spring事务控制】

目录

01_分析jdbc中操作问题-抽取增删改方法的通用方法

1.1、DBAssit.java

02_抽取查询方法-编写封装一个实体对象的结果集处理器

2.1、BeanHandler.java

03_实现查询所有的封装以及dbutils介绍

04_dbutils的使用


01_分析jdbc中操作问题-抽取增删改方法的通用方法

1.1、DBAssit.java

package com.itheima.dbassit;import com.itheima.handler.ResultSetHandler;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** 封装的工具类*/
public class DBAssit {private DataSource dataSource;public DBAssit(DataSource dataSource) {this.dataSource = dataSource;}/*** 执行增删改的方法** @param sql* @param params* @return*/public int update(String sql, Object... params) {Connection conn = null;PreparedStatement pstm = null;try {//1.得到连接conn = dataSource.getConnection();//2.使用连接和参数的sql语句创建预处理对象pstm = conn.prepareStatement(sql);//3.得到sql语句参数的源信息(有几个参数,都什么类型等等)ParameterMetaData pmd = pstm.getParameterMetaData();//4.判断语句中参数的个数和方法参数params的个数是否一致,不一致肯定没法执行int parameterCount = pmd.getParameterCount();//参数的个数(问号的个数)if (parameterCount > 0) {if (params == null) {throw new NullPointerException("没有sql语句执行必须的参数");}if (params.length != parameterCount) {throw new RuntimeException("传入的参数个数和语句所需的参数个数不一致,语句无法执行");}}//5.给sql语句的参数赋值for (int i = 0; i < parameterCount; i++) {pstm.setObject(i + 1, params[i]);}//6.执行语句int res = pstm.executeUpdate();//7.返回执行结果return res;} catch (Exception e) {throw new RuntimeException(e);} finally {release(conn, pstm, null);}}public Object query(String sql, ResultSetHandler rsh, Object... params) {Connection conn = null;PreparedStatement pstm = null;ResultSet rs = null;try {//1.得到连接conn = dataSource.getConnection();//2.使用连接和参数的sql语句创建预处理对象pstm = conn.prepareStatement(sql);//3.得到sql语句参数的源信息(有几个参数,都什么类型等等)ParameterMetaData pmd = pstm.getParameterMetaData();//4.判断语句中参数的个数和方法参数params的个数是否一致,不一致肯定没法执行int parameterCount = pmd.getParameterCount();//参数的个数(问号的个数)if (parameterCount > 0) {if (params == null) {throw new NullPointerException("没有sql语句执行必须的参数");}if (params.length != parameterCount) {throw new RuntimeException("传入的参数个数和语句所需的参数个数不一致,语句无法执行");}}//5.给sql语句的参数赋值for (int i = 0; i < parameterCount; i++) {pstm.setObject(i + 1, params[i]);}//6.执行语句rs = pstm.executeQuery();//7.返回执行结果return rsh.handle(rs);} catch (Exception e) {throw new RuntimeException(e);} finally {release(conn, pstm, rs);}}private void release(Connection conn, PreparedStatement pstm, ResultSet rs) {if (rs != null) {try {rs.close();} catch (Exception e) {e.printStackTrace();}}if (pstm != null) {try {pstm.close();} catch (Exception e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (Exception e) {e.printStackTrace();}}}
}

02_抽取查询方法-编写封装一个实体对象的结果集处理器

2.1、BeanHandler.java

package com.itheima.handler.impl;import com.itheima.handler.ResultSetHandler;import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;/*** 结果集封装的具体实现类。* 此类实现的是把一个结果集rs的内容封装到一个指定的实体类对象中* 使用要求:实体类中的属性必须和表中的列名一致(sql语句查询出来的列名一致)** @param <T>*/
public class BeanHandler implements ResultSetHandler {private Class domainClass;public BeanHandler(Class domainClass) {this.domainClass = domainClass;}/*** 把rs的内容封装到domainClass所表示的类中** @param rs* @return*/@Overridepublic Object handle(ResultSet rs) {try {//1.创建一个实体类对象Object bean = domainClass.newInstance();//2.判断是否有结果集if (rs.next()) {//3.得到结果集rs中所有的列名//要想得到列名,得先得到结果集的源信息ResultSetMetaData rsmd = rs.getMetaData();//得到源信息之后,还要得到有多少列int columnCount = rsmd.getColumnCount();//遍历列数for (int i = 1; i <= columnCount; i++) {//得到每列的名称String columnName = rsmd.getColumnName(i);//列名其实就是实体类的属性名称,于是就可以使用列名得到实体类中属性的描述器PropertyDescriptor pd = new PropertyDescriptor(columnName, domainClass);//实体类中定义的私有类成员和它的get以及set方法//获取属性的写入方法(set方法)Method method = pd.getWriteMethod();//获取当前列名所对应的值Object columnValue = rs.getObject(columnName);//通过执行写方法把得到的值给属性赋上method.invoke(bean, columnValue);}}//4.返回return bean;} catch (Exception e) {throw new RuntimeException(e);}}
}

03_实现查询所有的封装以及dbutils介绍

04_dbutils的使用

Spring-学习笔记06【spring_day02资料_dbutils】相关推荐

  1. JavaEE——Spring学习笔记03【AOP开发】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  2. JavaEE——Spring学习笔记01【Ioc开发的模式】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  3. ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi

    ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi 暂停了半个多月的学习,去调车了.现在课设开始了,赶紧回来把一开始的"以太网"目标学完.但是却发现,好 ...

  4. 一箭双雕 刷完阿里P8架构师spring学习笔记+源码剖析,涨薪8K

    关于Spring的叙述: 我之前死磕spring的时候,刷各种资料看的我是一头雾水的,后面从阿里的P8架构师那里拿到这两份资料,从源码到案例详细的讲述了spring的各个细节,是我学Spring的启蒙 ...

  5. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传

    作者:ssslinppp       1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...

  6. Spring学习笔记(三) AOP_annotation,AOP_XML

    在学习课程以前,听说AOP有种很神秘的感觉,好像很好深的技术.其实原理很简单,使用动态代理的方式给程序增加逻辑.与此相似的有struts2中的filter拦截器. 再讲AOP之前先把需求说一下: 同S ...

  7. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  9. JavaScript学习笔记06【高级——JavaScript中的事件】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  10. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

最新文章

  1. pushpop指令的操作数必须是字操作数_指令格式
  2. QListWidget 小练习
  3. 【Python】 list dict str
  4. Ninja Blocks物联网平台简介
  5. Python语言学习之打印输出那些事:python输出图表和各种吊炸天的字符串或图画、版权声明(如README.md)等之详细攻略
  6. DevOps 实践:千里之行
  7. Visual Studio生成汇编列表文件(listing file)
  8. 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!
  9. HDU 2829 Lawrence
  10. 【VM】—VM安装包
  11. 第 1 章 课程概述
  12. Linux- 日常运维-w-查看系统负载
  13. MySQL自定义函数(四十六)
  14. JQuery ajax 在aspx中传值和取值
  15. mfc获取控件在对话框上的位置
  16. python人脸识别代码实现
  17. 【福利】邀请博主,赢取大奖
  18. 明日之后说正在连接服务器,手游明日之后一直正在连接服务器
  19. win10网页找不到服务器dns,Win10系统下网页打不开提示无法解析服务器DNS如何解决...
  20. 重磅!网页版 VSCode 来了!

热门文章

  1. centos dovecot mysql_Centos6.4 配置postfix+dovecot+mysql
  2. php框架 css文件引用,yii框架中怎么引入css文件
  3. pop客户机程序流程图_基于.NET的在线考试系统的设计与实现
  4. 四十七、SQL 语法总结
  5. 七十二、区间合并,插入求交集, 删除被覆盖区间
  6. 科普丨关灯玩手机,危害到底有多大?如何科学用眼?
  7. 北京内推 | 联想研究院机器学习团队招聘因果推理算法研究实习生
  8. 北京内推 | ​百度自然语言处理部内容理解方向招收NLP算法实习生
  9. 杭州内推 | 阿里巴巴达摩院自然语言基础研究组招聘研究型实习生
  10. AI工程师面试凭高频问题提前准备,命中率会是多少?