我现在的架构是po->manager->service->action
其中manager实现业务逻辑,提供事务,action调用service
service中仅获取session,控制事务,load对象,然后调用manager,所以我可以单独的测试业务而不依赖于持久层
目前有这么个场景:一张地图,分成小块。给我一个坐标和半径,然后判断这个范围内是否有水。
因为地图是上下相通,左右相通,所以我要算出这个范围内所有地块的id,然后load出来,再逐格判断
于是代码就得类似这样:
List<Integer> idList=manager.computeIdList(int x,int y);
Query query = session.createQuery("from Field where id in (:list)");
query.setParameterList("list", idList);
boolean hasWater=manager.fieldHasWater(query.list());
我想把这些东西都封到manage里,于是我定义了一个MyMap,与地块是一对多,内部用map,key为地块的id
这时会多个MyMap表,里面只有一行数据,地块表会多一列,以对应MyMap
于是manager就能写成:
boolean hasWater(int x,int y,MyMap map);
然后在内部用may.getField(int id)来得到地块
地块的数量有几十万,所以我用了lazy="extra"。
这种设计是否合理,是否会产生某些问题?
PS:<map-key type="int" formula="id" />,这种情况下不能用extra,hibernate生成的查询条件会出现null
再PS:以前看过一篇文章,select * from table where id in(1,2)的性能不如select * from table where id=1 union select * from table where id=2
因为in查询不能很好的利用索引,所以我觉得hibernate在缓存命中高的情况下,用循环load对象比用in查询要好一点,这个没测试过,高手有经验请说说
分享到:
相关推荐
1. **清晰的分层**:持久层应当是一个明确的逻辑层,它与其他层(如表示层、业务逻辑层等)有着清晰的界限。这意味着数据持久化的实现细节不应泄露给系统的其他部分。 2. **低耦合**:持久层应该尽可能减少对外部...
### 使用Hibernate和Spring开发持久层的关键知识点 #### 引言 在现代企业级应用开发中...通过深入理解Hibernate的ORM能力和Spring的依赖注入与AOP特性,开发者能够构建出既符合业务需求又易于维护的持久层解决方案。
Spring通过其依赖注入(DI)和面向切面编程(AOP)功能,简化了Hibernate的配置和使用,使得开发者能够更加专注于业务逻辑的实现,而无需过多关注底层的事务管理和资源管理。 ### 数据源与事务管理 #### 数据源...
SpringBoot整合持久层技术是Java开发中的重要环节,它简化了传统的数据访问配置,使得开发者可以更加专注于业务逻辑。在SpringBoot中,我们通常会利用其内置的数据访问框架,如JPA(Java Persistence API)和MyBatis...
iBATIS是一个开源的Java持久层框架,它简化了数据库操作与应用程序的集成,使得开发者可以将注意力集中在SQL语句的编写和业务逻辑的实现上,而无需关注底层的JDBC代码。本教程将深入探讨iBATIS的核心概念、主要功能...
持久层是软件系统中负责数据存储和检索的部分,它为业务逻辑层提供了一种抽象,使得程序员可以不必直接处理SQL语句,而是通过对象化的API进行数据操作。这提高了代码的可读性和可维护性,降低了系统对数据库知识的...
在IT行业中,Maven和MyBatis是两个非常...总之,Maven MyBatis插件是提高开发效率和代码质量的有效工具,通过合理配置和使用,能够显著提升Java Web开发中的持久层代码生成效率,让开发者更多地专注于业务逻辑的实现。
5. **DAO(Data Access Object)**:数据访问对象,封装了对数据库的所有操作,是业务逻辑和持久层之间的桥梁。 6. **Service和Controller**:服务层和控制器层,分别处理业务逻辑和用户请求。 7. **pom.xml**:如果...
通过使用模板方法设计模式,它将常见的错误处理和资源关闭等任务自动化,使开发者能够专注于业务逻辑,提高代码的可读性和可维护性。 **二、JdbcTemplate的核心功能** 1. **自动管理连接**:JdbcTemplate会在需要...
Spring作为一个轻量级的容器,不仅管理着应用对象的生命周期,还提供了一个丰富的功能集,包括事务管理、持久化框架集成等,从而让开发人员能够更加专注于业务逻辑的实现。 1. **Spring框架简介** - **轻量级**:...
它的出现是为了简化数据访问层的开发,让开发者能够更加专注于业务逻辑而不是底层的数据库操作。JPA通过提供一套API,使得开发者可以以面向对象的方式来操作数据库,而无需编写大量的SQL语句。 在Java应用中,...
在IT行业中,持久层框架是连接数据库和应用程序的重要桥梁,它们简化了数据操作,使得开发者可以专注于业务逻辑而不是底层数据库的交互。本压缩包包含两个关键的持久层框架——Hibernate和iBATIS的开发文档,将帮助...
分层架构将应用系统分为展示层、控制层和持久层,持久层负责与数据库的交互,独立于业务逻辑层,使得应用架构更为清晰,同时有利于代码的重用和维护。 通过本文的研究可以看出,Java的反射机制为数据持久层提供了一...
Spring 框架提供了很多基础的与业务逻辑无关的功能,比如事务管理、持久化框架集成等等,使用 Spring 框架,开发人员可以专注于业务逻辑开发。 Spring 框架的主要特点包括: * 轻量级:Spring 框架非常轻量级,从...
这样,开发者无需手动编写这些重复性工作,从而能更专注于业务逻辑的实现。 "PP 持久层代码生成器"支持以下主要功能: 1. **数据库元数据读取**:它可以连接到指定的数据库,获取表结构和字段信息,为代码生成提供...
《Hibernate数据持久层jar包源码解析》 在软件开发中,数据持久层是系统架构中的关键部分,它负责将应用程序的数据与数据库进行交互。Hibernate作为一款强大的Java对象关系映射(ORM)框架,极大地简化了这个过程。...
FreeMarker是一个流行的、开源的Java模板引擎,它与JSP类似,但更专注于分离业务逻辑和视图展示。在JAVA PP持久层代码生成器中,FreeMarker扮演着关键角色,通过解析用户定义的模板文件,将数据库模型转换为对应的...
在实际应用中,三层架构可能还会涉及到其他组件,如服务层(Service Layer)和持久层(Persistence Layer),它们可能是业务逻辑层和数据访问层的进一步细分。服务层可以提供更抽象的业务操作,而持久层则专注于具体...
这样,开发者可以专注于业务逻辑,而无需关心底层的数据库交互。例如,Spring可以通过@Transactional注解自动开启和提交事务,使得代码更清晰、可读性更强。 4. 示例分析 在实际应用中,通常会定义一个数据访问...