当前位置: 首页 > 图灵资讯 > 技术篇> 春季数据JPA与JDBC:选择正确的数据库工具

春季数据JPA与JDBC:选择正确的数据库工具

来源:图灵教育
时间:2025-02-18 20:55:03

>解锁数据层的利弊、缺点和秘密调味料 使用spring 当boot构建java应用程序时, jdbc 两者之间的选择就像瑞士军刀和手术刀之间的选择一样。这两种工具都与数据库互动,但它们以不同的方式解决问题。让我们解释一下它们的优点、缺点和理想的例子,包括实际的例子。

1.有什么区别?

> jdbc(java数据库连接) 直接执行sql的低级api。 写作和结果集处理需要手动查询。
  • >最小抽象,最大控制。
  • >jpa弹簧数据
高级抽象构建jpa(java persistence api)在hibernate上。 >将java对象映射到数据库表(orm)。
    crud操作通过存储库自动化。
  • 2.代码摊牌:crud操作
>示例1:用户可以通过id获取 使用jdbc(带jdbctemplate)

public class userjdbcdao {  
    @autowired  
    private jdbctemplate jdbctemplate;  

    public user findbyid(long id) {  
        string sql = "select id, name, email from users where id = ?";  
        return jdbctemplate.queryforobject(sql, new object[]{id}, (rs, rownum) ->  
            new user(  
                rs.getlong("id"),  
                rs.getstring("name"),  
                rs.getstring("email")  
            ));  
    }  
}  

pros: 完全控制sql。

>最小费用。

    cons:
  • >
  • 样板代码用于映射结果。
手动错误处理。

    使用弹簧数据jpa
  • @entity  
    @table(name = "users")  
    public class user {  
        @id  
        @generatedvalue(strategy = generationtype.identity)  
        private long id;  
        private string name;  
        private string email;  
        // getters, setters, constructors  
    }  
    
    public interface userrepository extends jparepository<user, long> {  
        // auto-implemented method: findbyemail(string email)  
    }  
    
    // usage  
    user user = userrepository.findbyid(1l).orelsethrow();  
    

  • pros:
零sql用于基本操作。 >内置分页、缓存和交易。

cons:
  • >
  • 隐藏的性能成本(例如,n 1查询)。
对sql优化的控制较少。

    >示例2:带有连接的复杂查询
  • jdbc在这里发光
  • >

public list<order> findorderswithproducts(long userid) {  
    string sql = """  
        select o.id, p.name, p.price  
        from orders o  
        join order_items oi on o.id = oi.order_id  
        join products p on oi.product_id = p.id  
        where o.user_id = ?  
    """;  

    return jdbctemplate.query(sql, new object[]{userid}, (rs, rownum) ->  
        new order(  
            rs.getlong("id"),  
            rs.getstring("name"),  
            rs.getdouble("price")  
        ));  
}  

为什么jdbc? 优化sql用于报告/分析。 避免jpa的懒惰陷阱。

jpa解决方案(jpql或本机查询)>

@query(value = """  
    select new com.example.orderprojection(o.id, p.name, p.price)  
    from order o  
    join o.products p  
    where o.user.id = :userid  
""", nativequery = false)  
list<orderprojection> findordersbyuser(@param("userid") long userid);  

    折衷:
  • jpql是数据库-nostic,但灵活性较低。
  • >牺牲可移植性的本地查询。
3.性能和控制

标准

    jdbc
jpa弹簧数据
  • speed 更快(raw sql,no orm费用) 慢一点(对象映射) 样本 更多(手动映射) (仓库抽象)少(仓库抽象) 复杂查询 完全控制 jpql/jpql/hibernate 限制 交易 手册(@transactional) 自动(存储方法) 架构更改

    sql更新 hibernate ddl自动上升(风险!) criteria jdbc spring data jpa speed faster (raw sql, no orm overhead) slightly slower (object mapping) boilerplate more (manual mapping) less (repository abstraction) complex queries full control limited by jpql/hibernate transactions manual (@transactional) automatic (repository methods) schema changes sql updates required hibernate ddl auto-update (risky!) 4。什么时候用? 如:,请选择jdbcc,
      您需要在sql上
    1. 细粒的控制(如分析、报告)。
    2. >使用不适合orm模型的使用
    3. 旧数据库。
    4. >性能至关重要的操作(高通量批处理)。
    >用例:

    >

    >实时股票趋势的财务应用程序通过复杂的sql聚合计算。
    如果选择弹簧数据jpa: 快速开发
      重型应用程序
    1. (如管理面板、电子商务)。 您的架构和面向对象的模型
    2. 对齐。
    3. >您需要内置功能,如缓存、审计或分页。
    4. >用例:

    > >社交媒体平台通过嵌套关系管理用户信息、帖子和评论。

    >混合方法:两者混合!> 用于复杂查询的组合基本操作的jpa和jdbc:>

    public class UserService {  
        @Autowired  
        private UserRepository userRepository; // JPA  
    
        @Autowired  
        private UserJdbcDao userJdbcDao; // JDBC  
    
        public UserStats getUserStats(Long userId) {  
            User user = userRepository.findById(userId).orElseThrow();  
            List<Order> orders = userJdbcDao.findRecentOrders(userId);  
            return new UserStats(user, orders);  
        }  
    }  
    

    5。判决

    对于标准用例,春季数据jpa 是您的
      生产力促进
    • 。 当您需要原始功率和精度时,jdbc 是你的逃避孵化
    • 经验法则:>
    >从jpa开始的80%应用程序。

    >在sql最重要的情况下,将jdbc用于其他20%。

    • 通过了解这些工具的优点,您可以构建一个既有效又有效的工具
    • > and 可维护数据层的数据层。无论您是构建快速原型还是高性能系统,spring boot使您能够灵活地选择(或混合)合适的工作工具。

    以上是春季数据JPA和JDBC:请关注图灵教育的其他相关文章,选择正确的数据库工具的详细信息!

    上一篇:

    探索kotlin中线程的使用

    下一篇:

    返回列表