`
jinnianshilongnian
  • 浏览: 21541259 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2425476
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3014608
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5644082
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:261109
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1599452
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250854
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5865712
Group-logo
跟我学Nginx+Lua开...
浏览量:703905
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:787887
社区版块
存档分类
最新评论

【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3

阅读更多

7.1  概述

7.1.1  JDBC回顾

       传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示:

 

java代码:
//cn.javass.spring.chapter7. TraditionalJdbcTest
@Test
public void test() throws Exception {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getConnection();              //1.获取JDBC连接
                                       //2.声明SQL
      String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";
      pstmt = conn.prepareStatement(sql);    //3.预编译SQL
      ResultSet rs = pstmt.executeQuery();   //4.执行SQL
      process(rs);                       //5.处理结果集
      closeResultSet(rs);                 //5.释放结果集
      closeStatement(pstmt);              //6.释放Statement
      conn.commit();                    //8.提交事务
    } catch (Exception e) {
      //9.处理异常并回滚事务
      conn.rollback();
      throw e;
    } finally {
      //10.释放JDBC连接,防止JDBC连接不关闭造成的内存泄漏
      closeConnection(conn);
    }
}

 

       以上代码片段具有冗长、重复、容易忘记某一步骤从而导致出错、显示控制事务、显示处理受检查异常等等。

       有朋友可能重构出自己的一套JDBC模板,从而能简化日常开发,但自己开发的JDBC模板不够通用,而且对于每一套JDBC模板实现都差不多,从而导致开发人员必须掌握每一套模板。

       Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发,而且如果各个公司都使用该抽象框架,开发人员首先减少了学习成本,直接上手开发,如图7-1所示。

 

图7-1 Spring JDBC与传统JDBC编程对比

7.1.2  Spring对JDBC的支持

       Spring通过抽象JDBC访问并提供一致的API来简化JDBC编程的工作量。我们只需要声明SQL、调用合适的Spring JDBC框架API、处理结果集即可。事务由Spring管理,并将JDBC受查异常转换为Spring一致的非受查异常,从而简化开发。

       Spring主要提供JDBC模板方式、关系数据库对象化方式和SimpleJdbc方式三种方式来简化JDBC编程,这三种方式就是Spring JDBC的工作模式:

  •  JDBC模板方式:Spring JDBC框架提供以下几种模板类来简化JDBC编程,实现GoF模板设计模式,将可变部分和非可变部分分离,可变部分采用回调接口方式由用户来实现:如JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate。
  • 关系数据库操作对象化方式:Spring JDBC框架提供了将关系数据库操作对象化的表示形式,从而使用户可以采用面向对象编程来完成对数据库的访问;如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类。这些类的实现一旦建立即可重用并且是线程安全的。
  • SimpleJdbc方式:Spring JDBC框架还提供了SimpleJdbc方式来简化JDBC编程,SimpleJdbcInsert 、 SimpleJdbcCall用来简化数据库表插入、存储过程或函数访问。

Spring JDBC还提供了一些强大的工具类,如DataSourceUtils来在必要的时候手工获取数据库连接等。

7.1.4    Spring的JDBC架构

Spring JDBC抽象框架由四部分组成:datasource、support、core、object。如图7-2所示。

 

图7-2 Spring JDBC架构图

       support包:提供将JDBC异常转换为DAO非检查异常转换类、一些工具类如JdbcUtils等。

       datasource包:提供简化访问JDBC 数据源(javax.sql.DataSource实现)工具类,并提供了一些DataSource简单实现类从而能使从这些DataSource获取的连接能自动得到Spring管理事务支持。

       core包:提供JDBC模板类实现及可变部分的回调接口,还提供SimpleJdbcInsert等简单辅助类。

       object包:提供关系数据库的对象表示形式,如MappingSqlQuery、SqlUpdate、SqlCall、SqlFunction、StoredProcedure等类,该包是基于core包JDBC模板类实现。

 

 

原创内容,转载请注明 出处【http://sishuok.com/forum/blogPost/list/0/2489.html

25
0
分享到:
评论
4 楼 aokunsang 2013-06-21  
jinnianshilongnian 写道
aokunsang 写道
你好,请问:Bean里面有个Calendar类型字段对应数据库中Date类型,查询时候报错:Cannot convert value of type [java.sql.Timestamp] to required type [java.util.Calendar] for property 'writetime': no matching editors or conversion strategy found。
当然是用Date类型不会有问题,但是如果我想使用Calendar类型的话,有什么好的解决办法么?

你需要取回数据后自己转 目前我没有好办法

哦,tks。
3 楼 jinnianshilongnian 2013-06-21  
aokunsang 写道
你好,请问:Bean里面有个Calendar类型字段对应数据库中Date类型,查询时候报错:Cannot convert value of type [java.sql.Timestamp] to required type [java.util.Calendar] for property 'writetime': no matching editors or conversion strategy found。
当然是用Date类型不会有问题,但是如果我想使用Calendar类型的话,有什么好的解决办法么?

你需要取回数据后自己转 目前我没有好办法
2 楼 aokunsang 2013-06-21  
你好,请问:Bean里面有个Calendar类型字段对应数据库中Date类型,查询时候报错:Cannot convert value of type [java.sql.Timestamp] to required type [java.util.Calendar] for property 'writetime': no matching editors or conversion strategy found。
当然是用Date类型不会有问题,但是如果我想使用Calendar类型的话,有什么好的解决办法么?
1 楼 cheney0728 2012-09-06  
这三种方式有什么本质的区别呢?哪种更常用?

相关推荐

    跟开涛学Spring

    1.29 【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286 1.30 【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3 . . . . . . . ...

    跟我学spring

    标题“跟我学spring”和描述“spring 的使用,每个知识点和项目中的运用,20章的介绍。”暗示这是一份详细介绍Spring框架使用方法的教程或手册,覆盖了Spring的各个方面,并以实例为导向,深入探讨了每个知识点在...

    跟我学spring3

    - **Spring JDBC**:Spring提供了丰富的JDBC支持,可以帮助开发者更容易地进行数据库操作。 - **优势**:异常包装、资源管理、事务管理等。 #### 7.2 JDBC模板类 - **JdbcTemplate**:Spring提供的一个用于简化...

    CSDN博客之星:技术交流与个人品牌共筑的分享盛会

    文案: “CSDN博客之星”是技术人的闪耀舞台,汇聚创新与分享的力量!通过参与评选,你不仅能提升个人品牌,还能链接行业精英,拓展技术视野。活动见证无数博主的成长,助力优质内容传播。无论你是技术爱好者还是资深从业者,这里都能让你展现才华,加速成长。原创干货、粉丝互动、持续输出——掌握这些秘诀,让你的博客脱颖而出,成为下一个“博客之星”!

    mpls-ospf全all

    mpls-ospf全all

    三菱FX3U PLC基于ST结构化文本与梯形图的四仓位配方控制系统解析

    内容概要:本文详细介绍了基于三菱FX3U PLC的四仓位配方控制系统,重点讲解了如何利用ST结构化文本和梯形图两种编程方式实现工业级配方管理。主要内容包括配方存储采用结构体数组的方式,使配方参数管理更加高效;配方执行过程中使用ST语言实现复杂的三段速控制逻辑,确保精确配料;通信方面通过FX3U-485ADP模块进行Modbus通信,保障数据传输的实时性和稳定性;报警系统采用状态码机制,便于快速定位和解决问题;此外,还涉及了分期付款功能以及暂停续料功能的具体实现方法。整个系统经过实际项目的验证,能够稳定应对每日200+批次的生产任务。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程有一定了解并希望深入掌握ST结构化文本和梯形图混合编程技巧的人群。 使用场景及目标:适用于需要高精度、高效率配方管理的工业生产线,如食品加工等行业。主要目标是提高生产效率,减少人为错误,增强系统的可靠性和易维护性。 其他说明:文中提供了大量具体的代码片段和实际案例,有助于读者更好地理解和应用所介绍的技术。同时强调了全中文变量命名的优势,使得新入职员工也能迅速上手。

    嵌入式系统开发-蓝桥杯STM32实战解析-第十四届模拟题代码与考点精讲

    内容概要:本资源包含2023年第十四届蓝桥杯嵌入式组省赛第一套模拟题的完整实现代码,涵盖STM32CubeMX工程配置、HAL库开发、传感器数据采集、LCD显示控制、按键中断处理等核心模块。配套代码注释详细,包含模块化工程结构设计思路及竞赛评分要点解析。 适用人群:电子类专业本科/高职学生、蓝桥杯嵌入式组参赛选手、STM32开发初学者、嵌入式系统设计爱好者。 使用场景及目标:适用于蓝桥杯赛前专项训练、嵌入式系统开发实战演练、STM32HAL库应用学习。通过本资源可掌握竞赛级项目开发规范,提升外设驱动开发能力,理解实时数据采集与界面交互的实现逻辑。 其他说明:代码基于STM32G4系列开发板实现,包含多任务调度框架设计,涉及ADC/DAC、TIM定时器、GPIO中断等关键外设操作。建议配合官方开发板使用,资源包含硬件连接示意图及调试排错指南,注意部分外设配置需根据实际硬件调整。

    基于MATLAB的8字漂移轨迹车辆动力学仿真建模与实现

    内容概要:本文详细介绍了如何利用MATLAB构建一个能够模拟8字漂移动态特性的车辆模型。首先,通过设定车辆的基本参数(如质量、轴距、转动惯量)以及控制器参数(如比例系数、滑移率微分系数),并采用双频正弦波叠加的方法生成8字轨迹。接着,深入探讨了轮胎滑移率的非线性特性及其对横摆角速度的影响,展示了如何通过引入迟滞效应使仿真的物理行为更加逼真。此外,文中还讨论了转向增益、扭矩分配等关键因素对漂移稳定性和轨迹精度的作用,并提供了具体的代码实现方法。最后,通过轨迹可视化工具验证了模型的有效性。 适合人群:对汽车动力学感兴趣的研究人员、工程师以及有一定MATLAB编程基础的学习者。 使用场景及目标:适用于研究车辆动态性能、开发自动驾驶系统或进行赛车运动分析等领域。主要目标是帮助读者掌握车辆动力学建模的基本原理和技术手段,同时提高其解决复杂工程问题的能力。 其他说明:文中不仅给出了完整的代码示例,还分享了许多实用的小贴士,如如何调整参数以获得更好的仿真效果,以及如何优化代码结构以提升运行效率。对于希望深入了解车辆控制系统设计的人来说,这是一份不可多得的学习资料。

    ssm服装定制系统 LW PPT.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

    Delphi 12.3控件之WebView2Loader.rar

    Delphi 12.3控件之WebView2Loader.rar

    网页基础开发指南:HTML、CSS、JavaScript、JSON与Ajax详解

    内容概要:本文详细介绍了网页开发的基础技术,涵盖HTML、CSS、JavaScript、JSON和Ajax五个方面。首先讲解了HTML的历史和发展,重点介绍了HTML标签及其用法;接着阐述了CSS的导入方式、选择器和样式设置;随后深入探讨了JavaScript的基础语法、内置对象和DOM操作;再者解释了JSON的语法和数据类型,强调其在数据交换中的重要性;最后介绍了Ajax技术及其应用场景,展示了如何使用原生XMLHttpRequest、jQuery和Axios进行异步请求。 适合人群:适用于初学者和有一定经验的前端开发人员,帮助他们全面掌握网页开发的基础知识和技术。 使用场景及目标:① 初学者可以通过本文快速入门HTML、CSS和JavaScript,搭建简单的网页;② 已有基础的开发者可以深入了解JSON和Ajax,提升数据处理和异步交互的能力。 阅读建议:本文内容详尽,建议按章节逐步学习,结合实例代码进行练习,以便更好地理解和掌握各项技术要点。

    计算机科学与技术- 软件开发工具 培训资料

    计算机科学与技术- 软件开发工具 培训资料

    FX3U PLC控制器硬件与嵌入式开发详解:STM32F103VCT6为核心的工业控制解决方案

    内容概要:本文深入剖析了FX3U PLC控制器的硬件架构及其嵌入式开发细节。首先介绍了控制器的整体规格,如尺寸、主控芯片(STM32F103VCT6)、电源设计等。接着详细讲解了数字量输入输出模块的设计,包括继电器输出和光耦隔离的应用。对于模拟量处理部分,则探讨了ADC的校准与抗干扰措施。此外,通讯模块的设计也是重点之一,涵盖了CAN总线、RS485等接口的具体实现方法。最后,文章还提到了开发资料的完整性以及一些优化建议。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC控制器和嵌入式开发感兴趣的读者。 使用场景及目标:帮助读者理解FX3U PLC控制器的工作原理,掌握其硬件设计特点和嵌入式编程技巧,适用于小型产线控制系统或智能仓储系统的开发。 其他说明:文中提供了大量源代码片段,便于读者更好地理解和实践相关知识点。同时强调了在实际应用中需要注意的问题,如电磁兼容性和信号完整性等。

    ssm高校网课管理系统lw+ppt.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

    基于MATLAB仿真的三电平逆变器SVPWM控制技术详解及其应用

    内容概要:本文详细介绍了基于MATLAB/Simulink的三电平逆变器SVPWM(空间矢量脉宽调制)控制系统的构建方法。首先,文章讲解了NPC(中点箝位)结构的三电平逆变器主电路搭建步骤,包括IGBT模块的选择和参数配置。然后深入探讨了SVPWM算法的具体实现,涵盖扇区判断、矢量合成、作用时间计算以及开关状态选择等关键技术点。此外,还讨论了电容电压平衡控制、死区时间和载波生成等重要细节。最后,通过FFT分析验证了系统的性能,展示了良好的波形质量和低谐波失真率。 适用人群:电力电子工程师、自动化专业学生、从事逆变器研究的技术人员。 使用场景及目标:适用于希望深入了解三电平逆变器SVPWM控制原理的研究人员和技术开发者。目标是掌握如何利用MATLAB进行高效、精确的逆变器仿真建模,优化波形质量,减少谐波失真。 其他说明:文中提供了大量实用的MATLAB代码片段,帮助读者更好地理解和实践相关理论。同时提醒了一些常见的仿真陷阱,如求解器选择不当可能导致的问题。强调了动手实践的重要性,鼓励读者自行搭建模型以加深理解。

    Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D12.7z

    Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D12.7z

    基于MATLAB的界面GUI指纹识别系统(高分项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载

    Notepad-v3.2.0 最新版(2025年3月27日)

    notepad–是一个国产跨平台、轻量级的文本编辑器,是替换notepad++的一种选择。其内置强大的代码对比功能,让你丢掉付费的beyond compare。

    Delphi 12.3控件之TMS MQTT v2.0.8.0.7z

    Delphi 12.3控件之TMS MQTT v2.0.8.0.7z

Global site tag (gtag.js) - Google Analytics