当前位置: 首页 > news >正文

电商网站模板html洛阳哪里做网站

电商网站模板html,洛阳哪里做网站,wordpress浏览器跳转,关键词林俊杰mp3文章目录 引言一、Spring Boot JDBC核心架构1.1 核心组件关系图1.2 自动配置逻辑 二、基础配置实践2.1 数据源配置2.2 多数据源配置 三、JdbcTemplate深度使用3.1 基础CRUD操作3.2 批处理优化 四、事务管理4.1 声明式事务4.2 事务传播机制 五、异常处理5.1 Spring异常体系5.2 自… 文章目录 引言一、Spring Boot JDBC核心架构1.1 核心组件关系图1.2 自动配置逻辑 二、基础配置实践2.1 数据源配置2.2 多数据源配置 三、JdbcTemplate深度使用3.1 基础CRUD操作3.2 批处理优化 四、事务管理4.1 声明式事务4.2 事务传播机制 五、异常处理5.1 Spring异常体系5.2 自定义异常处理 六、性能优化策略6.1 SQL监控配置6.2 连接池调优参数 七、生产环境最佳实践总结 引言 在Spring Boot应用中JDBC仍然是关系型数据库访问的基石。尽管JPA等ORM框架日益流行但在需要精细控制SQL、处理复杂查询或追求极致性能的场景下原生JDBC仍具有不可替代的优势。本文将深入探讨Spring Boot中JDBC数据访问的全流程实现涵盖从基础配置到生产级优化的关键技术要点。 一、Spring Boot JDBC核心架构 1.1 核心组件关系图 graph TDA[DataSource] -- B[JdbcTemplate]B -- C[NamedParameterJdbcTemplate]A -- D[TransactionManager]D -- E[Transactional]1.2 自动配置逻辑 条件触发检测到spring-jdbc存在时自动配置默认行为 自动配置HikariCP连接池创建JdbcTemplate/NamedParameterJdbcTemplate注册PlatformTransactionManager 二、基础配置实践 2.1 数据源配置 # application.properties spring.datasource.urljdbc:mysql://localhost:3306/mydb?useSSLfalse spring.datasource.usernameroot spring.datasource.passwordsecret spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver# HikariCP优化配置 spring.datasource.hikari.connection-timeout30000 spring.datasource.hikari.maximum-pool-size20 spring.datasource.hikari.idle-timeout6000002.2 多数据源配置 Configuration public class MultiDataSourceConfig {BeanPrimaryConfigurationProperties(app.datasource.primary)public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}BeanConfigurationProperties(app.datasource.secondary)public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}Beanpublic JdbcTemplate primaryJdbcTemplate(Qualifier(primaryDataSource) DataSource dataSource) {return new JdbcTemplate(dataSource);} }三、JdbcTemplate深度使用 3.1 基础CRUD操作 Repository public class UserRepository {private final JdbcTemplate jdbcTemplate;public UserRepository(JdbcTemplate jdbcTemplate) {this.jdbcTemplate jdbcTemplate;}// 插入操作public Long createUser(User user) {String sql INSERT INTO users (name, email) VALUES (?, ?);KeyHolder keyHolder new GeneratedKeyHolder();jdbcTemplate.update(connection - {PreparedStatement ps connection.prepareStatement(sql, new String[]{id});ps.setString(1, user.getName());ps.setString(2, user.getEmail());return ps;}, keyHolder);return keyHolder.getKey().longValue();}// 查询操作public User findById(Long id) {String sql SELECT * FROM users WHERE id ?;return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper(User.class), id);} }3.2 批处理优化 public void batchInsert(ListUser users) {jdbcTemplate.batchUpdate(INSERT INTO users (name, email) VALUES (?, ?),new BatchPreparedStatementSetter() {Overridepublic void setValues(PreparedStatement ps, int i) throws SQLException {User user users.get(i);ps.setString(1, user.getName());ps.setString(2, user.getEmail());}Overridepublic int getBatchSize() {return users.size();}}); }四、事务管理 4.1 声明式事务 Service public class OrderService {private final JdbcTemplate jdbcTemplate;public OrderService(JdbcTemplate jdbcTemplate) {this.jdbcTemplate jdbcTemplate;}Transactionalpublic void placeOrder(Order order) {// 扣减库存jdbcTemplate.update(UPDATE products SET stock stock - ? WHERE id ?, order.getQuantity(), order.getProductId());// 创建订单jdbcTemplate.update(INSERT INTO orders (user_id, product_id, quantity) VALUES (?, ?, ?),order.getUserId(), order.getProductId(), order.getQuantity());} }4.2 事务传播机制 传播行为说明REQUIRED默认支持当前事务不存在则新建REQUIRES_NEW新建独立事务挂起当前事务NESTED嵌套事务需要数据库支持NOT_SUPPORTED非事务方式运行挂起当前事务 五、异常处理 5.1 Spring异常体系 #mermaid-svg-X5rWY4at5JdF8jsA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .error-icon{fill:#552222;}#mermaid-svg-X5rWY4at5JdF8jsA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-X5rWY4at5JdF8jsA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-X5rWY4at5JdF8jsA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-X5rWY4at5JdF8jsA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-X5rWY4at5JdF8jsA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-X5rWY4at5JdF8jsA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-X5rWY4at5JdF8jsA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-X5rWY4at5JdF8jsA .marker.cross{stroke:#333333;}#mermaid-svg-X5rWY4at5JdF8jsA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-X5rWY4at5JdF8jsA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .cluster-label text{fill:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .cluster-label span{color:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .label text,#mermaid-svg-X5rWY4at5JdF8jsA span{fill:#333;color:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .node rect,#mermaid-svg-X5rWY4at5JdF8jsA .node circle,#mermaid-svg-X5rWY4at5JdF8jsA .node ellipse,#mermaid-svg-X5rWY4at5JdF8jsA .node polygon,#mermaid-svg-X5rWY4at5JdF8jsA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-X5rWY4at5JdF8jsA .node .label{text-align:center;}#mermaid-svg-X5rWY4at5JdF8jsA .node.clickable{cursor:pointer;}#mermaid-svg-X5rWY4at5JdF8jsA .arrowheadPath{fill:#333333;}#mermaid-svg-X5rWY4at5JdF8jsA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-X5rWY4at5JdF8jsA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-X5rWY4at5JdF8jsA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-X5rWY4at5JdF8jsA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-X5rWY4at5JdF8jsA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-X5rWY4at5JdF8jsA .cluster text{fill:#333;}#mermaid-svg-X5rWY4at5JdF8jsA .cluster span{color:#333;}#mermaid-svg-X5rWY4at5JdF8jsA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-X5rWY4at5JdF8jsA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} DataAccessException RuntimeException BadSqlGrammarException DataIntegrityViolationException DeadlockLoserDataAccessException 5.2 自定义异常处理 ControllerAdvice public class JdbcExceptionHandler {ExceptionHandler(DataIntegrityViolationException.class)public ResponseEntityString handleConstraintViolation(DataIntegrityViolationException ex) {return ResponseEntity.badRequest().body(数据完整性校验失败 ex.getRootCause().getMessage());}ExceptionHandler(DataAccessException.class)public ResponseEntityString handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(数据库访问异常 ex.getMessage());} }六、性能优化策略 6.1 SQL监控配置 # 启用JDBC日志 logging.level.org.springframework.jdbcDEBUG logging.level.org.springframework.transactionTRACE# 使用P6Spy进行SQL分析 spring.datasource.driver-class-namecom.p6spy.engine.spy.P6SpyDriver spring.datasource.urljdbc:p6spy:mysql://localhost:3306/mydb6.2 连接池调优参数 参数推荐值说明maximumPoolSizeCPU核心数*2最大连接数minimumIdle10最小空闲连接connectionTimeout30000ms连接获取超时时间idleTimeout600000ms空闲连接回收时间maxLifetime1800000ms连接最大存活时间 七、生产环境最佳实践 SQL管理规范 使用SQL文件集中管理采用Flyway/Liquibase进行版本控制 -- V1__create_users_table.sql CREATE TABLE users (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE );防御式编程 public OptionalUser safeFindUser(Long id) {try {return Optional.ofNullable(jdbcTemplate.queryForObject(SELECT * FROM users WHERE id ?, new BeanPropertyRowMapper(User.class), id));} catch (EmptyResultDataAccessException ex) {return Optional.empty();} }对象映射优化 public class CustomRowMapper implements RowMapperUser {Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {return User.builder().id(rs.getLong(id)).name(rs.getString(name)).email(rs.getString(email)).build();} }总结 Spring Boot JDBC的核心优势 轻量高效直接操作SQL避免ORM框架开销灵活可控完全掌控SQL执行细节生态完善与Spring事务体系无缝集成性能卓越配合连接池可达万级TPS 建议在以下场景优先选择JDBC方案 需要执行复杂SQL查询处理大批量数据操作对性能要求极高的核心业务已有成熟SQL需要复用 通过合理运用JdbcTemplate事务管理连接池调优的组合策略可以构建出既保持灵活性又具备高性能的数据访问层。对于新项目建议结合Spring Data JDBC以获得更好的领域模型支持。
http://www.dnsts.com.cn/news/116805.html

相关文章:

  • 不是万维网的网站济南 网站建设
  • 南昌做兼职的网站设计书店网站html模板
  • 济南网站app开发最新移动网站趋势
  • 响应式网站费用泰安市最大的网络公司
  • 郑州网站建设口碑好“网站制作”
  • 做医院网站公司吗服务商公司
  • 开网站公司如何建设运输网站
  • 国内专业的室内设计网站怎样建设好门户网站
  • php门户网站源码宝丰县精神文明建设的门户网站
  • 设计网站的企业网站建设工作分工
  • 从哪里设置网站关键词wordpress大淘客主题
  • 网站建设推广优化排名html网页制作视频教学
  • 北京恒伟网站建设网站建设 试卷
  • 手机h5免费模板网站怎么把网站源码
  • 郑州品牌网站建设费用宝格丽网站建设策划案
  • 汕头专业网站建设公司枣庄网站建设公司
  • 彩票类网站开发ps个人网站制作流程
  • 建设自己的网站首页重庆网站优化建设
  • 推广优化网站排名教程网站降权的原因
  • 大屏手机网站新手怎么把源码做成软件
  • 网站信息同步用c 做网站可以吗
  • 广州百度网站搭建广告设计就业率
  • 网站内容吸引怎么做才好济南网络营销服务公司
  • 宁波网站建设 联系哪家网站 常见推广
  • 桃园街网站建设wordpress接入微博
  • 网站的标签修改怎么做招聘网站的数据分析
  • 网站都有服务器吗设计师经常上的网站
  • 如何做静态网站做网站的素材和步骤
  • 中国建设部网站品牌vi设计手册ppt
  • 浙江龙元建设集团 网站瑞金市网站建设