orm框架中动态查询的思考
一个常见的功能,根据用户名或者性别查找用户
做法有以下几种:
1、自己根据用户名和性别是否为空手动组装jpql。
2、在dao层使用动态查询criteria
3、在controller层或service层使用动态查询criteria
如果使用第一种方式,效率很低,也容易出错。
如果使用第二种方式,service层和dao层都会加入大量的接口,因为每个查询的条件都不一样,所以会产生大量的查询接口
如果使用第三种方式,要在controller或者service中引入dao中的criteria。根据面向接口编程和分层的思想,dao框架的接口和类是不应该出现在service和controller中的。考虑到这种情况,可以自己实现一套criteria,最后在dao层将自己实现的criteria转换成jpa的criteria或者jpql,这样就可以实现解耦。不足是这种做法增加了很多工作量
我们都知道criteria是通过会话管理获得的,service如何能获得criteria呢? 这里可以使用回调(闭包),定义一个接口,该接口包含一个方法,方法参数包含criteria;然后把这个接口当作service方法的参数,最后由dao调用该接口的方法。可参考spring-data-JPA中Repository的实现。
个人感觉这三种方法都不太理想,不知道大家是怎么做的,有没有其他的方案
做法有以下几种:
1、自己根据用户名和性别是否为空手动组装jpql。
2、在dao层使用动态查询criteria
3、在controller层或service层使用动态查询criteria
如果使用第一种方式,效率很低,也容易出错。
如果使用第二种方式,service层和dao层都会加入大量的接口,因为每个查询的条件都不一样,所以会产生大量的查询接口
如果使用第三种方式,要在controller或者service中引入dao中的criteria。根据面向接口编程和分层的思想,dao框架的接口和类是不应该出现在service和controller中的。考虑到这种情况,可以自己实现一套criteria,最后在dao层将自己实现的criteria转换成jpa的criteria或者jpql,这样就可以实现解耦。不足是这种做法增加了很多工作量
我们都知道criteria是通过会话管理获得的,service如何能获得criteria呢? 这里可以使用回调(闭包),定义一个接口,该接口包含一个方法,方法参数包含criteria;然后把这个接口当作service方法的参数,最后由dao调用该接口的方法。可参考spring-data-JPA中Repository的实现。
个人感觉这三种方法都不太理想,不知道大家是怎么做的,有没有其他的方案
...全文
相关推荐
ORM框架ORM框架ORM框架ORM框架
能实现基本的数据库操作能实现基本的数据库操作
深入理解C#轻量级ORM框架FluentData
ORM(对象关系映射)框架作为C#开发中的重要组成部分,主要用于简化数据库操作,它通过映射数据库表与C#对象的方式,让开发者能够在不直接编写SQL语句的情况下完成对数据库的操作。本章我们将详细介绍一个轻量级ORM框架——FluentData,它以其简洁和高效著称,易于学习和使用,非常适合小型到中型项目的数据库操作。FluentData是一个为.NET应用程序设计的轻量级、高性能的ORM解决方案。它采用Fluent API的方式,使得数据库操作更加直观和简洁。
构建Python中的简易DynamoDB ORM框架
Amazon DynamoDB 是一种快速、灵活的 NoSQL 数据库服务,适用于任何规模的应用程序。它允许开发者在不需要维护数据库集群的情况下,为应用程序存储和检索数据。DynamoDB 提供了无缝扩展的能力,以及强大的性能和可靠性保障,特别适合需要快速读写操作的场景。对象关系映射(Object-Relational Mapping, ORM)是一种程序设计技术,用于在关系数据库和对象之间建立映射关系。它允许开发者以面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。
SQLSugar ORM框架
SqlSugar是一款轻量级、高性能、以及支持.NET 4.+和ASP.NET Core一款ORM框架
sqlite3的ORM框架
简单易用的基于SQLite3的C++ ORM框架


