编译:覃佑桦

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

本文将带您浏览和比较最受欢迎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<UserRecord> 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 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%");

总结

下面这张表进行了总结。注意:仅代表作者个人观点,没有做严谨的分析与测试。

JDBC

JOOQ

MyBatis

Hibernate

Spring Data

透明度

查询灵活性

开发速度(常规查询)

开发速度(自定义查询)

数据库迁移开销

配置开销

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

最受欢迎Java数据库访问框架(DAO层)相关推荐

  1. dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)

    本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层). 假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库.下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开 ...

  2. 后端:最受欢迎Java数据库访问框架(DAO层)

    来自:覃佑桦 | 责编:乐乐 链接:dzone.com/articles/what-java-dao-layer-is-best-for-your-project 本文将带您浏览和比较最受欢迎Java ...

  3. java mysql框架_盘点 Java 数据库访问框架——究竟哪个更适合你

    本文将带您浏览和比较最受欢迎Java数据库访问框架(DAO层).假设您正在开发一个Java程序,有许多办法可以让您的应用连上数据库.下面会列举各数据库访问框架的适用场景,相信能够帮您选到适合项目的开发 ...

  4. java通用库,java数据库访问通用种

    java数据库访问通用类; package org.studentmanager.commons; /** * java数据库访问通用类; * @author clplain; * */ import ...

  5. [开源].NET数据库访问框架Chloe.ORM

    扯淡 13年毕业之际,进入第一家公司实习,接触了 EntityFramework,当时就觉得这东西太牛了,访问数据库都可以做得这么轻松.优雅!毕竟那时还年轻,没见过世面.工作之前为了拿个实习机会混个工 ...

  6. “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

    目录: "Zhuang.Data"轻型数据库访问框架(一)开篇介绍 "Zhuang.Data"轻型数据库访问框架(二)框架的入口DbAccessor对象 先来看 ...

  7. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍

    目录: "Zhuang.Data"轻型数据库访问框架(一)开篇介绍 "Zhuang.Data"轻型数据库访问框架(二)框架的入口DbAccessor对象 框架介 ...

  8. Spring boot 三层框架dao层、service层、controller层+实体model层

    Spring boot 三层框架dao层.service层.controller层+实体model层 model层 dao层 service层 controller层 首先创建一个springboot ...

  9. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用spring+MyBatis+MySQL搭建数据库框架.如果数据量很大,一个mysql库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  10. 开源轻量级数据库访问框架

    本框架为开源框架,旨在简化用户的数据库操作,提供便捷的数据库访问服务而封装.该框架依赖于JDBC,并且基于原生JAVA SE框架的封装. 框架对比 对于经常进行数据库开发和JAVA EE开发的编程人员 ...

最新文章

  1. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?...
  2. 张苗 清华大学 计算机,2011222229张苗组件局域网及搭建服务器技术分析.doc
  3. 数据结构与算法 -- 算法
  4. Swagger-概述
  5. 「知识表示学习」专题论文推荐 | 每周论文清单
  6. HSSFDataFormat大全
  7. Nginx全局块的其他配置指令
  8. python 装饰器装饰类_5分钟的Python装饰器指南
  9. java)_Java NIO系列教程(一) Java NIO 概述
  10. SpringMVC面试
  11. 网络安全系列-二十五: PCAP文件格式详解及读取PCAP文件源码示例
  12. 微带贴片天线的分析方法-传输线模型法
  13. vue slideup_像jQuery的slideUp / slideDown一样,但是对于Vue
  14. 计算机sci转让,紧急转让的环境sci,一共四十个选题,2020年上半年出版,包SCI检索...
  15. 每个人都会经历一段迷茫
  16. 解析范式(1NF-4NF)
  17. 【动态规划】入门练习题浅总
  18. Discuz论坛附件下载权限绕过漏洞
  19. Android 11.0 ActivityManagerService的启动流程
  20. 不同浏览器的userAgent

热门文章

  1. erlang安装报错
  2. 控制器不存在CategoryController does not exist
  3. 论模式在领域驱动设计中的重要性
  4. FDQuery 怎么能插入NULL参数
  5. 怎样在js中使用EL表达式
  6. JAVA编程思想-第四章 控制执行流程
  7. Gentoo学习笔记
  8. 在Linux操作系统下修改IP、DNS和路由配置
  9. 阿格尔克劳奇四分钟逆转 利物浦2-1小胜西汉姆联
  10. Mac文件管理技巧:灵活的颜色标记,更好地分类