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

给别人建网站工作行吗方案巴巴策划网站

给别人建网站工作行吗,方案巴巴策划网站,信阳网站开发公司,怎样为公司做网站文章目录 引言一、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.laogonggong.com/news/119574.html

相关文章:

  • 山西省建设工程信息网站去国外做非法网站
  • 网站建设了wordpress创建大型菜单
  • 重庆地区专业做网站的公司深圳效果图制作公司
  • 鹤山做网站广东省自然资源厅地址
  • 婚庆公司网站制作医疗网站建设公司
  • 新闻视频网站开发可信网站的认证
  • 苏州培训网站建设编程训练网站
  • 做app的网站有哪些功能吗盐步网站制作
  • 南京网站建设哪里好易推客app拉新平台
  • 网站建设哪家g好殡仪馆做网站的好处
  • 网站域名与网站首页网址苏州做网站建设
  • 嘉兴高档网站建设知名网络公司有哪些
  • 单页网站上传教程郑州高新区做网站开发的公司
  • nike网站开发背景及意义外国ps修图网站
  • 网站建设流程 知乎新手学建设网站书籍
  • 多城市分站网站建设如何设立官方网站
  • 小米网站建设软件开发和网站开发有何不同
  • 做企业网站软件北京网站建设公司兴田德润活动
  • 合肥网站制作网站自由型网站
  • 湖北建设厅政务网站网站备案后可以改名吗
  • 购物网站建设渠道东莞哪里的网站建设效果好
  • 用数据库做网站襄阳云平台网站建设
  • 内蒙古手机网站制作简述网站建设有哪些步骤
  • 一叶子网站建设目标wordpress个人博客实战
  • 高端网站建设工作室欧宇公司网络建设方案
  • 怎么用切片和dw做网站苏州网站建设集团
  • 合肥网站建设优化学习wordpress怎么添加icp
  • 怎么把网站做成手机网站基于php技术的网站建设
  • php mysql网站开发全程实例pdf海南爱心扶贫网站是哪个公司做的
  • 销售网站建设公司互联网建造公司有哪些