hibernate框架 真的吗_最受欢迎Java数据库访问框架大比拼,你独爱哪一款?

15f326b88f99a2162cac723d72830438.png

a20a79b88c5047ffa93716c771f918e2.png

本文将带您浏览和比较最受欢迎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,完成反序列化数据,关闭连接:   
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 books1 = DSL.using(configuration)   .selectFrom(USERS)   .where(condition(user))   .fetch();
适用场景:要求JDBC查询保证编译时安全,迁移到不同数据库,自动生成CRUD JDBC API; 不适合:一些高级功能要收费。   MyBatis:带查询功能的简单ORM ORM(对象关系映射)提供了另一种和数据库打交道的方式,其核心思想是把Java对象(entity)映射到对应的数据库表。MyBatis就是其中一员。 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 userUser 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 interfacepublic interface UserRepository extends CrudRepository {User findByName(String name);User findById(long id);@Query("SELECT u.ID FROM USERS u WHERE like ?1") //自定义表达式List findByUserName(String name);}// 查询示例User johnUser = userRepository.findByName("John");User johnUser = userRepository.findById(id);List usersIdsWithOVPostfix = userRepository.findByUserName("%OV%");
总结 下面这张表进行了总结。注意:仅代表作者个人观点,没有做严谨的分析与测试。

dbae2f2bdbef00de6ead5700ca466f25.png

最后,欢迎大家来投票,你最爱哪一款数据库访问框架?请选择你的一票 ,后面给大家反馈投票结果。

编译:覃佑桦

来源:https://dzone.com/articles/what-java-dao-layer-is-best-for-your-project

5152c4a21504c6dd4dd6acbb7f8766d9.png

中国程序员 VS 印度程序员,太有味了...快手回应厕所装坑位计时器,这届打工人:再也不能愉快地带薪拉屎了?伟大&耀眼,C语言发展史的点点滴滴中国程序员VS美国程序员,这也太形象了吧...研究主攻数据库和磁盘故障优化,曾经复读才考上三本,他如今让华为开出201万年薪DBA林工:OracleDG 环境主备业务数据不同步备库报 ORA-600 错误怎么整?有个程序员老公有多爽???为什么不建议把数据库部署在docker容器内?A里正在拆中台,你还在建中台吗?腾讯技术专家:解密小程序云开发数据库 | 干货微服务架构框架?这里为你汇总了15种阿里P8税后收入170万?P8、P9 及以上到底是什么水平?Matlab 被禁只是冰山一角!一个海外资深程序员聊被卡脖子……机房生存指南交易、账务系统去 Oracle 经验误执行了 rm -rf /*删库之后,除了跑路还能怎么整?!

7c2fa1f61978e080494eb97faa48d1e2.png

SACC2020中国系统架构师大会

DTCC中国数据库技术大会2010-2019SACC2019中国系统架构师大会PostgreSQL 2019中国技术大会点击上方文字可以直接进入小程序浏览,下载请在后台分别回复关键词⏬ DTCC、SACC、PG19即可直接收到完整版 PPT 下载链接~

4fa026f284ae23d23d7ab2977df82748.png

「在看」吗?96ca94124b514d7a96582e6b799ed1a5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值