最受欢迎Java数据库访问框架大比拼,你独爱哪一款?
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层)。
假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库。下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开发框架。
JDBC:简单数据库查询
最简单的办法莫过于使用JDBC提供的Java API。输入查询SQL语句调用API返回结果:
ResultSet rs = stmt.executeQuery("SELECT id, name FROM Employees"); while(rs.hasNext()){ log.info("Employee id: " + rs.getInt("id") + " has name: " + rs.getString("name")); }
适用场景:不希望学新框架,要求轻量级解决方案,需自定义查询,不用长期维护;
不适合:不想写很多代码,未来可能需要做数据库迁移。
要减少模板代码,可以考虑使用jdbc-template工具,像是Spring JDBC template或者Apache DBUtils。例如在处理request时,Spring template可以用一句代码发送带参数的request,完成反序列化数据,关闭连接: 关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
User user = jdbc.qeuryForObject("SELECT * FROM USERS WHERE ID = ?", 1, User.class);
JOOQ:面Java对象查询
JOOQ提供了一种DSL来解决查询问题。这种语言基于生成的entity对象提供编译时安全(compile-time-safe)查询。JOOQ支持不同的数据库,能够减少模板代码。
UserRecord user = new UserRecord(); user.setId(1); user.setName("Peter"); Result<UserRecord> books1 = DSL.using(configuration) .selectFrom(USERS) .where(condition(user)) .fetch();
适用场景:要求JDBC查询保证编译时安全,迁移到不同数据库,自动生成CRUD JDBC API;
不适合:一些高级功能要收费。
MyBatis:带查询功能的简单ORM
ORM(对象关系映射)提供了另一种和数据库打交道的方式,其核心思想是把Java对象(entity)映射到对应的数据库表。MyBatis就是其中一员。关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
MyBatis是一个轻量级框架,使用JPA provider(非bean结构)完成映射。下面是一个简单的示例查询(不用配置文件):
// Bean映射 public interface BlogMapper { 3 @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); } // 获取数据 BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);
适用场景:需要在ORM中灵活地查询,轻量级ORM;
不适合:不喜欢XML。
Hibernate与Spring Data
二者都支持JPA(Java持久化API),也就是说都支持部署到应用服务器。JPA标准中要求数据库table/column与Java对象(entity)对应。例如,USER表对应的entity如下:
@Data // 这不是hibernate注解,而是lombok getter/setter @Entity @Table(name = "USERS") public class User { @Id @Column(name = "id") private Integer id; @Column(name = "name") private String name; }
Hibernate是最受欢迎的ORM框架,提供很多开箱即用的功能。早在2001年Hibernate就发布了第一个版本。还支持HQL语言进行自定义SQL查询。
Session session = sessionFactory.openSession(); User oldUser = (User) session.get(User.class, 1); //get user User newUser = new User(123,"John"); session.save(developer); //add user //HQL 示例 Query query = session.createQuery("FROM Users"); List users = query.list();
适用场景:快速原型,需要内部提供缓存,使用多种不同的数据库,访问复杂schema;
不适合:不喜欢生成其他Java实体类,不愿意学习新框架,需要掌控底层细节。
Spring Data:新ORM抽象层
Spring Data在JPA entity的基础上提供了丰富的CRUD API以及查询表达式语言。其最大的优势在于只需要2-3行代码可以搞定。生成的API基于函数命名规范。
// 只需要实现CrudRepository interface public interface UserRepository extends CrudRepository<User, Long> { User findByName(String name); User findById(long id); @Query("SELECT u.ID FROM USERS u WHERE like ?1") //自定义表达式 List<Integer> findByUserName(String name); } // 查询示例 User johnUser = userRepository.findByName("John"); User johnUser = userRepository.findById(id); List<Integer> usersIdsWithOVPostfix = userRepository.findByUserName("%OV%");
总结
下面这张表进行了总结。注意:仅代表作者个人观点,没有做严谨的分析与测试。
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-27
本文作者:覃佑桦
本文来自:“互联网架构师 微信公众号 ”,了解相关信息可以关注“[互联网架构师](https://mp.weixin.qq.com/s/RR-tj1F3uk6faqoYDRvuAA)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深度 | X-Engine的In-Memory读性能优化
背景 虽然同为LSM-tree架构,X-Engine的设计哲学与传统基于LSM-tree架构的Rocksdb等引擎并不完全一致,如下图所示: 设计关键点1:X-Engine磁盘上的数据,在常态下只有两层(L1/L2),L0层是MemTable在compaction来不及的情况下暂存到磁盘上缓解内存压力时才启用的,正常情况下被冻结的MemTable可以直接和磁盘上的L1合并。 设计关键点2:在L1/L2之间的compaction合并过程中,X-Engine的冷热合并算法倾向于将热点数据保留在L1层(基于访问频度),将访问较少的数据下刷到L2层并进行压缩存储。这是一个对数据在物理上进行冷热分离的过程, 其结果是L1存储的都是热点数据,L2存储的都是冷数据。对L1进行缓存时会有更高的内存利用率。 按照设计初衷,X-Engine正常运行时,Mem
- 下一篇
Sunfish:有赞智能平台实践
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一、前言 机器学习 / 深度学习在有赞应用的越来越多,例如在营销、推荐、风控等场景下都起着越来越重要的作用。对于深度学习在实际业务场景的落地来说,除了数据和算法,工程和系统上的支持同样必不可少,这样的支持包括模型的快速构建与评估,稳定的线上模型服务环境等等。为此,我们开发了有赞智能平台 Sunfish ,本文详细介绍 Sunfish 的设计和实现。 二、背景 在有赞,机器学习 / 深度学习在各个业务场景下发挥着越来越重要的作用。这里以推荐系统为例,介绍一下深度学习的落地实践。在之前的博客文章有赞推荐系统关键技术中介绍过有赞微商城个性化推荐系统。简单来说,当用户打开一个有商品推荐位的页面时,推荐系统会根据用户特征按一定策略从商品池中选择出一些候选的推荐商品,这个过程称为召回。然后,针对这些候选商品,需要分别对它们进行打分,选择其中得分最高的商品,推荐给用户,这个过程称为线上精排。这里对某个商品进行打分的操作,就是在使用深度学习模型进行推理。 为了实现个性化推荐系统中的线上精排服务,我们...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路