郑州服装网站建设常熟公司网站建设电话

张小明 2026/1/2 6:44:32
郑州服装网站建设,常熟公司网站建设电话,一键生成简历,网站开发实战答案Spring JDBC 与 JdbcTemplateSpring JDBC 是Spring所提供的持久层技术#xff0c;用于简化数据库操作的一个模块#xff0c;以一种更简洁#xff0c;更直接的方式使用 JDBC API 简化了开发人员对数据库的操作。JdbcTemplate 则是 Spring JDBC 模块中最核心的类#xff0c;是…Spring JDBC 与 JdbcTemplateSpring JDBC 是Spring所提供的持久层技术用于简化数据库操作的一个模块以一种更简洁更直接的方式使用 JDBC API 简化了开发人员对数据库的操作。JdbcTemplate 则是 Spring JDBC 模块中最核心的类是该模块的主要实现者是对原始繁琐的 Jdbc API 对象的简单封装提供了增删改查CRUD的便捷实现是开发者使用 Spring JDBC 时最常用的工具归纳起来主要有以下几种类型的方法1execute方法可以用于执行任何SQL语句一般用于执行DDL语句。2update用于执行新增、修改与删除等语句。3query用于执行查询相关的语句。下面我们来具体实现 Spring JDBC实现Spring JDBC数据库内容如下pom.xml 添加相关依赖dependencies !-- 统一Spring版本为5.3.21 -- dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version5.3.21/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-test/artifactId version5.3.21/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-jdbc/artifactId version5.3.21/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-aspects/artifactId version5.3.21/version /dependency !-- 其他依赖保持不变 -- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.12/version scopetest/scope /dependency !-- mysql驱动包 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.6/version /dependency !-- AOP联盟 -- dependency groupIdaopalliance/groupId artifactIdaopalliance/artifactId version1.0/version /dependency !-- aspectj -- dependency groupIdorg.aspectj/groupId artifactIdaspectjweaver/artifactId version1.8.3/version /dependency /dependenciesgroupIdorg.springframework 为Spring 官方组织标识spring-contextSpring 核心容器spring-testSpring 测试支持spring-jdbcSpring JDBC 支持spring-aspectsSpring AOP 切面支持mysql-connector-javaMySQL 数据库的 JDBC 驱动使得 Java 程序能够连接 MySQL 数据库aopallianceAOP 联盟规范提供 AOP 接口定义Maven 会根据这个配置自动下载所需的依赖库并按照指定的配置进行项目构建AlipayDao .javapublic interface AlipayDao { public void transfer(String fromA,String toB,int amount); }AliPayDaoImpl .javapublic class AliPayDaoImpl implements AlipayDao { private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate jdbcTemplate; } Override public void transfer(String fromA, String toB,int amount) { jdbcTemplate.update(update alipay set amountamount-? where aliname?,amount,fromA); jdbcTemplate.update(update alipay set amountamount? where aliname?,amount,toB); } }定义了数据访问层实现类 AliPayDaoImpl主要功能是实现账户间的转账操作 transfer()。JdbcTemplate 是 Spring JDBC 的核心工具类类中定义了 JdbcTemplate 对象并提供了 get/set 方法这是为了通过 Spring 的依赖注入获取 JdbcTemplate 实例。这种通过 setter 方法注入的方式使得 JdbcTemplate 可以由 Spring 容器统一管理无需手动创建。!--配置连接DriverManagerDataSource -- bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource property namedriverClassName valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/mybatis_demo/ property nameusername valueroot/ property namepassword valueroot/ /bean !-- 配置jdbcTemplate -- bean idjdbcTemplate classorg.springframework.jdbc.core.JdbcTemplate property namedataSource refdataSource/ /bean bean idAliPayDaoImpl classcom.qcby.dao.impl.AliPayDaoImpl property namejdbcTemplate refjdbcTemplate/ /bean /beans这段配置和代码的逻辑是Spring容器先创建数据源dataSource指定数据库连接的驱动、地址、用户名和密码再创建JdbcTemplate实例并关联该数据源Spring 通过 ref 把 dataSource 注入给了 jdbcTemplateSpring调用JdbcTemplate类中的setDataSource方法实现依赖注入使其获得数据库连接能力以操作数据库最后创建AliPayDaoImpl实例把 JdbcTemplate 的属性和 setter 方法定义在 AliPayDaoImpl 内部通过调用AliPayDaoImpl类中的setJdbcTemplate方法将前面创建的JdbcTemplate注入进去这样AliPayDaoImpl就可以利用 JdbcTemplate来执行数据库操作当执行transfer方法时就能利用注入的JdbcTemplate执行两条更新SQL完成从一个账户扣款、向另一个账户加款的转账操作整个过程通过Spring的依赖注入实现了各组件的解耦和自动组装。public class AliPayTest { org.junit.Test public void run(){ ApplicationContext context new ClassPathXmlApplicationContext(Spring.xml); AlipayDao alipayDao (AlipayDao) context.getBean(AliPayDaoImpl);//使用多态 alipayDao.transfer(张三,李四,100); } }实现效果如图此时数据库数据变为此时我们将数据库的数据重置为各是100再将AliPayDaoImpl.java改为这样AliPayDaoImpl.java是有报错的我们来看实现效果此时数据库内容变为即执行了转出而未实现转入与实际情形不符合理的解决方式——添加事务添加事务xml配置的形式Spring.xml!-- 定义事务管理器-- bean idtxManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean !-- 编写事务通知-- tx:advice idtxAdvice transaction-managertxManager tx:attributes tx:method name* propagationREQUIRED isolationDEFAULT read-onlyfalse/ /tx:attributes /tx:advice !-- 编写AOP让spring自动将事务切入到目标切点-- aop:config !-- 定义切入点-- aop:pointcut idtxPointCut expressionexecution(* com.qcby.dao.impl.AliPayDaoImpl.transfer(..))/ !-- 将事务通知与切入点结合-- aop:advisor advice-reftxAdvice pointcut-reftxPointCut/ /aop:config这段XML配置是Spring框架中实现声明式事务管理的完整配置其核心作用是为com.qcby.dao.impl.AliPayDaoImpl类中的transfer方法自动添加事务控制能力。首先通过标签定义了一个名为txManager的事务管理器其类型为DataSourceTransactionManager专门用于管理JDBC数据源的事务并通过property标签将其与已配置的dataSource数据源关联起来使事务管理器能够操作数据库连接。接着使用定义了名为txAdvice的事务通知该通知关联了前面定义的txManager事务管理器并在中通过设置了事务属性name*表示对匹配的方法都应用该规则propagationREQUIRED指定了事务传播行为为如果当前没有事务则新建一个若已有事务则加入其中isolationDEFAULT表示使用数据库默认的事务隔离级别read-onlyfalse说明这不是只读事务。最后通过进行AOP配置先定义了一个名为txPointCut的切入点其表达式execution(* com.qcby.dao.impl.AliPayDaoImpl.transfer(..))精确匹配AliPayDaoImpl类中的transfer方法再通过将txAdvice事务通知与txPointCut切入点关联起来。这样当transfer方法被调用时Spring会通过AOP自动在方法执行前开启事务若方法正常执行完毕则自动提交事务若出现未捕获的异常则自动回滚事务从而确保转账操作的原子性避免出现数据不一致的情况同时这种配置方式将事务控制逻辑与业务代码分离降低了耦合度提高了代码的可维护性。实现效果注解的形式Spring.xml!-- 定义事务管理器 -- bean idtxManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean !-- 开启事务注解驱动 -- tx:annotation-driven transaction-managertxManager/其中transaction-managertxManager 指定了该注解驱动要使用的事务管理器是名为 txManager 的 Bean这样注解式事务就能基于该事务管理器实现对数据库事务的控制。启用该配置后开发者只需在需要事务支持的类或方法上添加 Transactional 注解Spring 就会自动为这些方法添加事务功能。AliPayDaoImpl.java其中的重要部分Transactional(propagation Propagation.REQUIRED,isolation Isolation.DEFAULT,readOnly false)propagation 是Spring事务的传播行为它定义了事务方法被另一个事务方法调用时的事务行为。propagation的值有REQUIRED默认如果当前存在事务则在该事务中运行如果没有事务则创建一个新的事务SUPPORTS如果当前存在事务则在该事务中运行如果没有事务则在非事务环境中运行MANDATORY必须在事务中运行如果没有事务则抛出异常isolation 是Spring事务的隔离级别隔离级别定义了一个事务对另一个正在进行的事务所可见的程度隔离级别越高数据库的并发性越差但安全性就越高。Spring支持的事务隔离级别包括DEFAULT使用数据库默认的隔离级别不可重复读READ_UNCOMMITTED允许脏读、不可重复读和幻读READ_COMMITTED避免了脏读但允许不可重复读和幻读REPEATABLE_READ避免了脏读和不可重复读但允许幻读SERIALIZABLE最高的隔离级别避免了所有可能的数据不一致问题但性能最差。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

北京住总第三开发建设有限公司网站公司网站备案申请

这是一份关于本次 Renesas RA6E2 Zephyr 4.3 SSD1306 SPI 屏幕 驱动开发的完整调试经验总结与笔记。 这份笔记记录了从“编译报错”到“黑屏”,再到“最终点亮”的全过程,包含了关键的排查思路和技术坑点。📝 调试过程与经验总结 1. 项目背…

张小明 2025/12/28 8:38:22 网站建设

博客网站建设设计报告wordpress安装创建数据库

三步打造专属BongoCat窗口透明度:终极不遮挡解决方案 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作,每一次输入都充满趣味与活力! 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 窗口透明…

张小明 2026/1/1 20:00:04 网站建设

如何搭建高品质网站wordpress搭建学校网站

压力测试面试的底层逻辑 对于软件测试从业者而言,“压力测试”不仅是产品测试的一种类型,更是面试官考察候选人综合素质的一把利剑。理解面试官的意图至关重要。面试官设置高压场景,其核心目的在于观察你的技术功底、逻辑思维、抗压能力和沟…

张小明 2025/12/28 8:37:15 网站建设

手机端网站开发流程图域名解析映射到网站空间怎么做

语音克隆用于心理实验:GPT-SoVITS作为可控声源的研究工具 在一项关于信任判断的心理学实验中,研究者希望探究“声音亲和力”是否会影响被试的决策倾向。传统做法是找两位发音人——一位语气温和,另一位较为冷峻——分别录制相同内容。但问题随…

张小明 2025/12/28 8:36:42 网站建设

网站开发软硬件条件网站是怎么做的

原神与崩坏星穹铁道帧率解锁完整指南:从零开始实现高帧率游戏体验 【免费下载链接】Genshin_StarRail_fps_unlocker Genshin Impact & HKSR Fps Unlock 原神崩铁帧率解锁 项目地址: https://gitcode.com/gh_mirrors/ge/Genshin_StarRail_fps_unlocker 还…

张小明 2025/12/28 8:36:08 网站建设

网站页面设计的网址网站代码是什么意思

第一章:Open-AutoGLM动态资源分配实战:3步实现GPU利用率提升90% 在大规模语言模型训练中,GPU资源浪费是常见痛点。Open-AutoGLM通过智能调度策略,实现动态资源分配,显著提升硬件利用率。以下三步操作可快速部署并优化G…

张小明 2026/1/1 23:19:35 网站建设