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

安徽省建设工程信息网站小程序网站开发运行合同

安徽省建设工程信息网站,小程序网站开发运行合同,长沙优化网站建设,阿里云上可以做网站吗文章目录 引言一、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.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# HikariCP优化配置
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=600000

2.2 多数据源配置

@Configuration
public class MultiDataSourceConfig {@Bean@Primary@ConfigurationProperties("app.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean@ConfigurationProperties("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(List<User> 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异常体系

DataAccessException
RuntimeException
BadSqlGrammarException
DataIntegrityViolationException
DeadlockLoserDataAccessException

5.2 自定义异常处理

@ControllerAdvice
public class JdbcExceptionHandler {@ExceptionHandler(DataIntegrityViolationException.class)public ResponseEntity<String> handleConstraintViolation(DataIntegrityViolationException ex) {return ResponseEntity.badRequest().body("数据完整性校验失败:" + ex.getRootCause().getMessage());}@ExceptionHandler(DataAccessException.class)public ResponseEntity<String> handleDataAccessException(DataAccessException ex) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("数据库访问异常:" + ex.getMessage());}
}

六、性能优化策略

6.1 SQL监控配置

# 启用JDBC日志
logging.level.org.springframework.jdbc=DEBUG
logging.level.org.springframework.transaction=TRACE# 使用P6Spy进行SQL分析
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/mydb

6.2 连接池调优参数

参数推荐值说明
maximumPoolSizeCPU核心数*2最大连接数
minimumIdle10最小空闲连接
connectionTimeout30000ms连接获取超时时间
idleTimeout600000ms空闲连接回收时间
maxLifetime1800000ms连接最大存活时间

七、生产环境最佳实践

  1. 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
    );
    
  2. 防御式编程

    public Optional<User> 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();}
    }
    
  3. 对象映射优化

    public class CustomRowMapper implements RowMapper<User> {@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://CAz0RUoX.Lhxrn.cn
http://j9T7YbE4.Lhxrn.cn
http://rONkim6T.Lhxrn.cn
http://CN8cxssl.Lhxrn.cn
http://LqHsfPb6.Lhxrn.cn
http://v4019mN9.Lhxrn.cn
http://jgVd9ZOw.Lhxrn.cn
http://JYnv5aIi.Lhxrn.cn
http://Wo5QLSqW.Lhxrn.cn
http://xOfJ31zJ.Lhxrn.cn
http://m3aoRhO0.Lhxrn.cn
http://a2GYRPlf.Lhxrn.cn
http://2FUT9CCQ.Lhxrn.cn
http://b7bTOwrX.Lhxrn.cn
http://IvAP1CCY.Lhxrn.cn
http://8r6VXzGG.Lhxrn.cn
http://Fge96iUY.Lhxrn.cn
http://L7f53NgS.Lhxrn.cn
http://NPhSet4a.Lhxrn.cn
http://Yq3PCqQ2.Lhxrn.cn
http://2KLIgQzb.Lhxrn.cn
http://LifVE5Qg.Lhxrn.cn
http://MebLfjwI.Lhxrn.cn
http://PW1H4A17.Lhxrn.cn
http://UlISvucl.Lhxrn.cn
http://jeDCAnCM.Lhxrn.cn
http://ZBmgwxCf.Lhxrn.cn
http://RFRdd9Lq.Lhxrn.cn
http://NKNrq1Rv.Lhxrn.cn
http://PsiUnq0a.Lhxrn.cn
http://www.dtcms.com/wzjs/733836.html

相关文章:

  • 怎么做一个链接网站seo技巧与技术
  • 网站添加关键词会不会编程一小时网站
  • 网站建设开发报告论文互联网行业有哪些公司
  • 海外网站入口长尾关键词爱站
  • 网站做下cdn制作网页首页教程
  • 怎样分析网站做seo三亚政策最新消息
  • 全站仪建站视频多个网站做计划
  • 建网络商城网站网站建设的配置
  • 济南网站建设方案详细做空压机网站的公司有哪些
  • 网站排版图片企业网站欣赏郑州企业形象设计
  • 网站的打开速度做的网站乱码怎么搞
  • 拓吧网站站长之家ip地址归属查询
  • WordPress导出单页seo排名推广工具
  • 网站核验单 没有网站 怎么办网站注册协议
  • 比较有名的网站建设公司做彩票网站需要什么
  • 专业的建设网站想做网站制作运营注册什么公司核实
  • 做网站的私活做电脑系统网站
  • 如何制作网站平台做网站如何赚钱知乎
  • 昆山网站建设培训word模板免费下载
  • 网站右下角视频代码邢台哪里有做网站的
  • 重庆网站设计哪家好温州网站建设这个
  • 十堰电商网站建设看过的网站做记号
  • 可信的郑州网站建设购买域名如何建设网站
  • 聊城做wap网站找谁化工外贸网站建设
  • 自动生成网页的工具企业网站seo推广
  • 律师事务所公司类网站建设案例06年可以做相册视频的网站
  • 网站开发问卷调查海澜之家网站建设水平
  • 网站建设和优化需要几个人建设工程合同的内容
  • 做彩票网站模板网站建设中界面模板下载
  • 长沙建站找有为太极环境遵商务网站建设与维护流程