惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
N
News and Events Feed by Topic
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
IT之家
IT之家
V
V2EX
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
小众软件
小众软件
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
罗磊的独立博客
T
Tor Project blog
C
Cisco Blogs
美团技术团队
博客园 - Franky
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
有赞技术团队
有赞技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Security Latest
Security Latest
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
Spread Privacy
Spread Privacy
J
Java Code Geeks
C
CERT Recently Published Vulnerability Notes
大猫的无限游戏
大猫的无限游戏
S
Securelist
The Cloudflare Blog
博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
Project Zero
Project Zero

博客园 - 许仙儿

从大括号圣战到人机掰手腕:AI时代,程序员的“累”换了个赛道 Git 文件忽略备忘录:`assume-unchanged` 完全指南 用go写一个微服务gPRC为主RESTful为辅 三号车间张三喜 为什么湖广不太吃鲤鱼 为什么夏天副高会导致伏旱,而冬天的西伯利亚高原又会带来寒流 普通RESTful和MCP调用对比 2026年放假安排 红楼梦龄官病死前和贾蔷同居的情节 古代的时辰,几更天与现在的时间对应关系是什么? 西游记结局评职称 生成一张图,苹果logo是透明冰块,安卓小机器人撒尿到苹果logo,冲出一个豁口 HL7v3和RIM是什么,和传统HL7,FHIR有什么关系 owl(Web Ontology Language)简介 关系型数据库 vs Elasticsearch 早上看到木蜂在抓取掉落到地上的国槐花,还一边打滚。它是否习性懒惰? Java SPI(Service Provider Interface)示例 常见古文中流行度和水平最高的前100首,按朝代分类 API Blueprint​​ 是一种基于 ​​Markdown​​ 的轻量级 API 描述语言 八卦的符号,读音,名称,代表的事务分别是什么 win10下python程序报错OPENSSL_Uplink(00007FFD0AC12FE8,08): no OPENSSL_Applink
Spring Boot 中 JdbcTemplate、MyBatis 和 JPA 共用数据源的可行性
许仙儿 · 2025-05-07 · via 博客园 - 许仙儿

Spring Boot 中 JdbcTemplate、MyBatis 和 JPA 共用数据源的可行性

是的,在 Spring Boot 项目中,JdbcTemplate、MyBatis 和 JPA 可以安全地共用同一个数据源。这是 Spring 框架设计时就考虑到的常见使用场景。

实现方式

  1. 配置单一数据源:

    # application.yml
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/mydb
        username: user
        password: pass
        driver-class-name: com.mysql.cj.jdbc.Driver
    
  2. Spring Boot 自动配置:
    • 会自动创建 DataSource bean

    • JPA/Hibernate、JdbcTemplate 和 MyBatis 都会使用这个数据源

共用机制

  1. 事务管理统一:
    • 通过 PlatformTransactionManager 统一管理

    • 所有ORM技术参与同一个事务

  2. 连接池共享:
    • 所有框架使用同一个连接池

    • 避免创建多个连接池浪费资源

实际项目中的混合使用示例

@Service
@Transactional
public class OrderService {
    
    @Autowired
    private OrderRepository jpaRepository; // JPA
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    private OrderMapper mybatisMapper; // MyBatis
    
    public void processOrder(Order order) {
        // 使用JPA保存
        jpaRepository.save(order);
        
        // 使用JdbcTemplate执行SQL
        jdbcTemplate.update("UPDATE inventory SET stock = stock - ? WHERE product_id = ?", 
                          order.getQuantity(), order.getProductId());
        
        // 使用MyBatis查询
        List<Order> recentOrders = mybatisMapper.findRecentOrders(order.getCustomerId());
    }
}

注意事项

  1. 事务传播:确保理解 @Transactional 的行为,混合使用时保持事务一致性
  2. ORM缓存:JPA的缓存机制不会影响JdbcTemplate和MyBatis的直接操作
  3. 方言配置:如果使用Hibernate,确保其方言配置与数据库匹配
  4. 连接泄露:不同方式获取的连接最终都会由Spring管理释放

这种混合使用方式在实际项目中很常见,可以根据不同场景选择最适合的数据访问方式。