java dao层最好的框架_什么样的Java DAO层最适合我们的项目

回顾和比较最流行的java数据库访问框架

有许多方法可以将您的Java应用程序连接到数据库。这篇文章里,我将解释哪个框架最适合我们的项目需求。

可比技术JDBC (Java database connectivity).

JOOQ (Java Object Oriented Querying).

MyBatis.

Hibernate.

Spring Data.

JDBC:简单数据库查询

获取数据的最简单方法是使用java api提供的,也被称为java数据库连接(JDBC)。提供的api返回给定sql查询的结果集:

1.  `ResultSet rs = stmt.executeQuery("SELECT id, name FROM Employees");`2.  `while(rs.hasNext()){`3.  `log.info("Employee id: "+ rs.getInt("id") + " has name: "+ rs.getString("name"));`4.  `}`54bf4ced41fc0d8a9e394d4d49ab452c.png

为了减少大量样板代码,建议使用jdbc模板工具,如Spring JDBC模板或Apache DBUtils。例如,在该请求中,Spring模板发送带有参数的请求、反序列化数据、关闭连接。这一切都发生在一句代码中:

1.  `Useruser = jdbc.qeuryForObject("SELECT * FROM USERS WHERE ID = ?", 1, User.class);`

面向对象的Java查询

JOOQ框架提供了一种基于生成实体的语言。使用这种语言,可以创建编译时安全的查询。JOOQ可以为许多数据库生成方言。此外,它还清理样板代码,如关闭连接等。

1.  `UserRecord user = newUserRecord();`2.  `user.setId(1);`3.  `user.setName("Peter");`4.  `Result books1 = DSL.using(configuration)`5.  `.selectFrom(USERS)`6.  `.where(condition(user))`7.  `.fetch();`a5833005222c48f479bcf89358e861df.png

MyBatis:支持查询的简单表单

对象关系映射或ORM提供了另一种与数据库通信的方式。其思想是在代码中创建Java对象(实体)和它们对应的表之间的映射。有代表性的ORM之一是MyBatis框架。

MyBatis是一个轻量级框架,它使用查询在实体和表之间创建映射(而不是bean结构,就像在JPA提供程序中一样,比如Hibernate)。因此,这个框架使用查询并提供ORM特性。在这里,可以看到一个简短的示例(没有配置文件):

1.  `// Bean mapping`2.  `publicinterfaceBlogMapper{`3.  `@Select("SELECT * FROM blog WHERE id = #{id}")`4.  `Blog selectBlog(int id);`5.  `}`6.  `// Fetching data`7.  `BlogMapper mapper = session.getMapper(BlogMapper.class);`8.  `Blog blog = mapper.selectBlog(101);`04a84a012a7fd6bd9207b05cd0db5f9b.png

Hibernate and Spring Data

这两种技术都支持JPA (Java持久性应用编程接口)。这意味着这两种解决方案都可以部署到应用服务器上。JPA标准要求表/列和Java对象(实体)之间的映射。例如,用户表可以映射到以下实体:

1.  `@Data// this is not hibernate annotation, it's lombok getter/setter generator`2.  `@Entity`3.  `@Table(name = "USERS")`4.  `publicclassUser{`5.  `@Id`6.  `@Column(name = "id")`7.  `privateInteger id;`8.  `@Column(name = "name")`9.  `privateString name;`10.  `}`

Hibernate

这是最流行的ORM框架,具有许多内置特性。它在大约20年前首次发行。Hibernate还支持自定义SQL查询的HQL语言。

1.  `Session session = sessionFactory.openSession();`2.  `User oldUser  = (User) session.get(User.class, 1); //get user`3.  `User newUser = newUser(123,"John");`4.  `session.save(developer); //add user`5.  `//HQL example`6.  `Query query = session.createQuery("FROM Users");`7.  `List users = query.list();`d9c3318ea9d42935e25acc51713e52a8.png

Spring Data

在JPA实体之上,Spring数据提供了一个丰富的CRUD API,以及表达式查询语言。Spring数据的主要优势在于它只需要2-3行实现。生成的API基于方法命名转换。

1.  `//Implementation, just by extending CrudRepository interface`2.  `publicinterfaceUserRepositoryextendsCrudRepository {`3.  `User findByName(String name);`4.  `User findById(long id);`5.  `@Query("SELECT u.ID FROM USERS u WHERE like ?1") //custom expression`6.  `List findByUserName(String name);`7.  `}`8.  `//It's how to use this repository:`9.  `User johnUser = userRepository.findByName("John");`10.  `User johnUser = userRepository.findById(id);`11.  `List usersIdsWithOVPostfix = userRepository.findByUserName("%OV%");`793e5f836cab85b0c9cd8289280bb927.png

最终比较

很难给出一个客观的比较评估,需要每个人根据自己的需求自己选择。下面,我给出一个比较表格,大家可以参考这个表格结合自己的需求,来选择自己的DAO层实现。f3605831dd97179b4ff2c44928c623cd.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值