Spring-学习笔记06【spring_day02资料_dbutils】
- Java后端 学习路线 笔记汇总表【黑马程序员】
- Spring-学习笔记01【Spring框架简介】【day01】
- Spring-学习笔记02【程序间耦合】
- Spring-学习笔记03【Spring的IOC和DI】
- Spring-学习笔记04【Spring的常用注解】【day02】
- Spring-学习笔记05【基于XML的IOC的案例】
- Spring-学习笔记06【Spring的新注解】 day02资料_dbutils
- Spring-学习笔记07【银行转账案例】【day03】
- Spring-学习笔记08【面向切面编程AOP】
- Spring-学习笔记09【JdbcTemplate的基本使用】【day04】
- 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】相关推荐
- JavaEE——Spring学习笔记03【AOP开发】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
- JavaEE——Spring学习笔记01【Ioc开发的模式】
JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...
- ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi
ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi 暂停了半个多月的学习,去调车了.现在课设开始了,赶紧回来把一开始的"以太网"目标学完.但是却发现,好 ...
- 一箭双雕 刷完阿里P8架构师spring学习笔记+源码剖析,涨薪8K
关于Spring的叙述: 我之前死磕spring的时候,刷各种资料看的我是一头雾水的,后面从阿里的P8架构师那里拿到这两份资料,从源码到案例详细的讲述了spring的各个细节,是我学Spring的启蒙 ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- Spring学习笔记(三) AOP_annotation,AOP_XML
在学习课程以前,听说AOP有种很神秘的感觉,好像很好深的技术.其实原理很简单,使用动态代理的方式给程序增加逻辑.与此相似的有struts2中的filter拦截器. 再讲AOP之前先把需求说一下: 同S ...
- JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...
- JavaScript学习笔记06【高级——JavaScript中的事件】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- MySQL学习笔记06【多表查询、子查询、多表查询练习】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
最新文章
- pushpop指令的操作数必须是字操作数_指令格式
- QListWidget 小练习
- 【Python】 list dict str
- Ninja Blocks物联网平台简介
- Python语言学习之打印输出那些事:python输出图表和各种吊炸天的字符串或图画、版权声明(如README.md)等之详细攻略
- DevOps 实践:千里之行
- Visual Studio生成汇编列表文件(listing file)
- 消除左递归实验代码_「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解!
- HDU 2829 Lawrence
- 【VM】—VM安装包
- 第 1 章 课程概述
- Linux- 日常运维-w-查看系统负载
- MySQL自定义函数(四十六)
- JQuery ajax 在aspx中传值和取值
- mfc获取控件在对话框上的位置
- python人脸识别代码实现
- 【福利】邀请博主,赢取大奖
- 明日之后说正在连接服务器,手游明日之后一直正在连接服务器
- win10网页找不到服务器dns,Win10系统下网页打不开提示无法解析服务器DNS如何解决...
- 重磅!网页版 VSCode 来了!
热门文章
- centos dovecot mysql_Centos6.4 配置postfix+dovecot+mysql
- php框架 css文件引用,yii框架中怎么引入css文件
- pop客户机程序流程图_基于.NET的在线考试系统的设计与实现
- 四十七、SQL 语法总结
- 七十二、区间合并,插入求交集, 删除被覆盖区间
- 科普丨关灯玩手机,危害到底有多大?如何科学用眼?
- 北京内推 | 联想研究院机器学习团队招聘因果推理算法研究实习生
- 北京内推 | ​百度自然语言处理部内容理解方向招收NLP算法实习生
- 杭州内推 | 阿里巴巴达摩院自然语言基础研究组招聘研究型实习生
- AI工程师面试凭高频问题提前准备,命中率会是多少?