持久化工具ibatis的问题

问题描述

使用ibatis了小半年,没有接触过其他持久化工具,听说过著名的h持久化工具,没有使用过。暂时觉得ibatis非常简单,灵活。但也发现了问题,不知道是不会用,还是想法本身的问题。产品研发期间使用ibatis自带工具对数据库进行映射生成(dao,service,pojo),个人理解持久化这层就是dao这层,service与pojo已经算业务层。业务逻辑都写在service里,方便事务控制回滚,排他。项目将业务逻辑和持久化这两层单独提出来,进行了rest封装,方便其他平台调用。同时展示层有两套方案分别用的传统html5+ajax,另一套是服务器端动态生成ui的框架。业务层的疑问????由于ibatis自动生成(dao,service,pojo),所以生成出来的是以面向对象为主体,数据关系被淡化了。也就是每一个对象有一套自己service和dao进行数据操作,当我新增业务时,我首先是找到该业务的主体操作对象,然后到该对象的对应service上新增业务逻辑,然后可能会调用到多个其他对象对应的dao进行多个对象的数据操作。关于业务这块,我想到了几个解决办法,不知道哪种更可取1:service还是以对象的这种方式生成,当我新增业务时,首先是找到该业务的主体操作对象,然后到该对象的对应service上新增业务逻辑,调用多个其他对象对应的dao。service绝不调用其他service。2:对象对应着的service不变,当新增业务时,新建service类,调用其他对象对应的service处理业务逻辑。3:对象对应着的service不变,当新增业务时,新建service类,调用其他对象对应的dao处理业务逻辑,绝不调用其他service。持久化层的疑问????由于项目所需的表在数据库级别没有建立任何约束,所有关系都依靠代码控制,也就是dao这层来控制。我将持久化操作分为两类:一类是查询,一类是非查询。查询:多表关联查询时,重写ibatis对象对应的sql ,争取一个sql查出所有数据,后来发现随着业务增加,关联的越来越多,而且方向都不尽相同,只能拆分成多个查询方法,以提供给service调用。非查询:service控制,事务控制,一个对象一个对象的处理,直到全部搞定。目前是这样解决的,但是总感觉sql很乱,风格不统一,不知道有没有啥好方法

解决方案

看了楼主的问题,有几点感慨:① 感觉楼主纯粹就是为分层而分层,根本没有理解为什么要分层!② IBatis就是一个持久层的工具,不知道为什么你还要让它自动生成业务层Service的东西?③ Service层的对象是业务对象,不是简单的Java POJO对象。楼主一直把IBatis层的对象和Service层的对象混为一谈,才会这么迷惑!不知道我有没有说错?④ Service层的对象只能调用Service层的对象,DAO层的对象只能调用DAO层的对象!这是基本原则,要不我们还有分层干嘛? 比如: 1)DAO层的UserMapper.findById()返回的User对象只包含:工号、姓名、年龄 2)Service层的UserMapper.findById()返回的User对象不仅包含:工号、姓名、年龄,还包含所属部门、拥有的角色列表…… 注意:这里Service层的User对象可不是DAO层的User对象!这就是你一直混淆的地方之一!
解决方案二:
和原来老项目比了下 老项目就是action,service,dao,每个业务都样这样老项目 java文件数量871个 1.9M大小 现在我建立的新项目java文件数量197个 551 KB
解决方案三:
大量程序生搬硬套分层思想,说下我目前项目的分层对于一般简单业务如只有CRUD在action中,直接用sqlsession调用sql xml,参数都是Map,不是java bean,自己写了一个ParameterInterceptor把request的参数,变成一个Map,在action中直接传入sql中,对于烦点的业务,要有事务,才会建xxxxService,不过在service类中还用sqlssesion直接调用各个sql,基本保持每个mapping xml文件只有一个表的相关sql,关于java bean我们是分两种一种vo是对应页面表单,一种pojo对应DB表结果 ,常常有这种代码xxxVo.getUser 得到一个pojo对应 然后再xxxVo.getDept 再得到一个pojo,把pojo给sql mapping.dao层我们基本没有,只有二三个表的操作有对应的dao类,那是因为这几个表都做了分表,不是一张物理表,是多张表,可能有人问,你们action层中怎么搞事务,我们action根本就没事务管理,action基本都是就一行insert ,update,delete要什么事务,别给数据库增加压力希望对你有用
解决方案四:
如果是我的话,我会一个业务对象一个service,然后service调用多个DAO,DAO层应该只做数据的查询和存储,不涉及业务逻辑。 如果一个service里面的代码太多了的话,再根据业务再细分。 一个对象一个对象的存储数据不是条理很清晰吗?修改起来也只需要修改相对较小的SQL段。为了条理性,牺牲一点性能也是可以接受的。如果全部的逻辑都在一块,后续的修改只会让代码越来越难以维护。

时间: 2024-11-10 05:25:12

持久化工具ibatis的问题的相关文章

iOS学习之数据持久化详解

前言 持久存储是一种非易失性存储,在重启设备时也不会丢失数据.Cocoa框架提供了几种数据持久化机制: 1)属性列表: 2)对象归档: 3)iOS的嵌入式关系数据库SQLite3: 4)Core Data. 在iOS开发中,持久化数据的方法也并不限于属性列表.对象归档.SQLite3和Core Data.它们只是四种最常用且简单的方法.其实也可以使用传统C语言I/O调用(比如,fopen())读写数据,也可以使用Cocoa的底层文件管理工具.只不过这两种方法都需要写很多代码,并且没有必要这么做.

最新C#开源资源项目

原文 http://www.cnblogs.com/jirigala/archive/2013/06/04/3116397.html 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率.        NKalore 是一款编程语言,它扩展了C#允许在.net平台使用AOP.NKal

.net开源框架开源类库(整理)

源:http://www.cnblogs.com/chinanetwind/p/3715809.html 常用库 Json.NET  https://github.com/JamesNK/Newtonsoft.Json Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据

C#开源系统大汇总

一.AOP框架         Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(aspects)的方法帮助缺少经验的开发人员提高开发效率.         NKalore是一款编程语言,它扩展了C#允许在.net平台使用AOP.NKalore的语法简单.直观,它的编译器是基于Mono C#编译器(MCS).NKalore目前只能在命令行或#Develop内部使用.N

《Spring技术内幕》——1.4节Spring的应用场景

1.4 Spring的应用场景 通过介绍Spring架构设计,我们了解到Spring是一个轻量级的框架.在Spring这个一站式的应用平台或框架中,其中的各个模块除了依赖IoC容器和AOP之外,相互之间并没有很强的耦合性.Spring的最终目标是简化应用开发的编程模型.它所提供的服务,可以贯穿应用到整个软件中,从最上层的Web UI到底层的数据操作,到其他企业信息数据的集成,再到各种J2EE服务的使用,等等.这些企业应用服务,Spring都通过其特有的IoC容器和AOP模块实现.在实现过程中,S

Spring源代码解析(八):Spring驱动Hibernate的实现

O/R工具出现之后,简化了许多复杂的信息持久化的开发.Spring应用开发者可以通过 Spring提供的O/R方案更方便的使用各种持久化工具,比如Hibernate:下面我们就 Spring+Hibernate中的Spring实现做一个简单的剖析. Spring对Hinberanate的配置是通过LocalSessionFactoryBean来完成的,这是一个工 厂Bean的实现,在基类AbstractSessionFactoryBean中: Java代码 /** * 这是FactoryBean

迁云架构实践

本文着笔介绍IT互联网化为传统企业带来的技术挑战,并对上云架构最佳实践进行了深入介绍,首发于阿里云&<程序员>联合出品的<凌云>杂志. 作者: 王宇德,张文生 云计算作为信息技术领域的一种创新应用模式,自其诞生以来一直备受关注.由于其具备低成本.弹性.易用.高可靠性.按需服务等特点,近年来被看作是新一代信息技术变革和商业模式变革的核心.互联网.游戏.物联网等新兴行业纷纷积极拥抱云计算,对大部分企业用户来说,受限于传统IT技术架构的束缚,往往缺乏迁移到云计算的动力和技术实现参

15个nosql数据库

1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL的10倍以上.MongoDB的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万~1.5万次读写请求.MongoDB还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储. MongoDB也有一个Ruby的项

2015移动安全漏洞年报

2015移动安全漏洞年报 第一章 2015年应用漏洞 1.1.业界公开的应用漏洞类型和分布 2015是不平凡的一年,各界媒体对移动应用的漏洞关注度也越来越高,漏洞的产生不仅带来用户设备与信息的安全影响,也给企业带来业务或声誉上的损失. 阿里聚安全每周对国内外50家著名安全公司.媒体.漏洞平台的态势进行分析,国内外移动安全事件和资讯的关注依然是围绕操作系统和移动应用的技术风险展开,其中国内更加关注移动应用的漏洞风险.以下数据结论来自于阿里聚安全对业界风险态势的统计. 1.  行业分布 根据公开的漏