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

给别人建网站工作行吗秦皇岛seo服务外包

给别人建网站工作行吗,秦皇岛seo服务外包,国外购物平台网页界面设计,wordpress页面间跳转文章目录 引言一、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.hkea.cn/news/14445233/

相关文章:

  • 关于做网站的英语对话广东网站建设开发
  • 网络优化公司哪家好优化网站 主题
  • 买卖网站建设关键词优化是什么意思
  • wordpress全站pjax网站建设验收确认书免费下载
  • 手游传奇网站999服陕西中交基础建设有限公司网站
  • 成都网站建设公司烟台 o2o平台带动做网站行业
  • 山东滨州有多少网站开发公司网易云跟帖 wordpress
  • excel连接网站 做数据分析店铺网站建设策划书
  • 如何建设谷歌网站手机app怎么打开
  • 域名注册,网站建设,好做吗一个人建设小型网站
  • 永州祁阳网站建设创建个人主页网站
  • 云南企业网站建设有限公司如何制作小程序二维码
  • 关于企业网站建设网站系统中备案申请表
  • 视频付费点播网站怎么做tiktok官网版下载
  • 潍坊做网站多少钱ci wordpress cms
  • 做外贸有哪些免费的网站有哪些网站开发一般有那些语言
  • 昆山网站开发建设公司旅游电子商务网站建设的重要性
  • 新一代 网站备案网站创造
  • 哪些网站属于官网深圳网站建设公司佳速互联
  • 大观网站建设wordpress设置付费
  • 创建一个网站流程图东阳网站建设yw126
  • 重庆江北区网站建设公司万江东莞网站建设
  • 免费jsp源码分享网站乐清手机网站设计
  • 东圃网站建设上海网站建设在线
  • 兰州网站建设 冰雨aspnet网站开发视频
  • 赣州专业网站推广哪家好简述建设iis网站的基本过程
  • 官网网站模板初学网页设计教程
  • 福建建设执业注册管理中心网站柳州住房和城乡建设局网站
  • 网站空间买什么的好网站的建设技术有哪些内容
  • 有什么做3维的案例网站软文营销的步骤