0 0

持久化工具ibatis的问题0

使用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很乱,风格不统一,不知道有没有啥好方法
2014年1月14日 11:43

4个答案 按时间排序 按投票排序

0 0

采纳的答案

看了楼主的问题,有几点感慨:

① 感觉楼主纯粹就是为分层而分层,根本没有理解为什么要分层!

② 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对象!这就是你一直混淆的地方之一!  



2014年1月15日 13:33
0 0

和原来老项目比了下 老项目就是action,service,dao,每个业务都样这样
老项目 java文件数量871个 1.9M大小
现在我建立的新项目java文件数量197个 551 KB

2014年1月15日 11:22
0 0

大量程序生搬硬套分层思想,说下我目前项目的分层

对于一般简单业务如只有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要什么事务,别给数据库增加压力

希望对你有用

2014年1月15日 11:09
0 0

   如果是我的话,我会一个业务对象一个service,然后service调用多个DAO,DAO层应该只做数据的查询和存储,不涉及业务逻辑。
   如果一个service里面的代码太多了的话,再根据业务再细分。
   一个对象一个对象的存储数据不是条理很清晰吗?修改起来也只需要修改相对较小的SQL段。为了条理性,牺牲一点性能也是可以接受的。如果全部的逻辑都在一块,后续的修改只会让代码越来越难以维护。

2014年1月14日 17:44

相关推荐

    持久层框架Ibatis

    1. **SqlSessionFactoryBuilder**:用于创建SqlSessionFactory的工具类,通常在应用启动时初始化一次。 2. **SqlSessionFactory**:是整个Ibatis的核心,它是线程安全的,可以为每个线程创建SqlSession实例。 3. *...

    Ibatis/mybatis代码生成工具

    总的来说,Ibatis/mybatis代码生成工具通过自动化的方式,有效地减轻了开发人员的工作负担,提高了开发效率,是现代Java开发不可或缺的辅助工具。它们将数据库操作的模板化和自动化提升到了新的层次,使得开发者可以...

    持久层框架ibatis学习笔记

    iBatis 是一款轻量级的持久层框架,它极大地简化了 Java 开发者在处理数据库交互时的工作量。相比于传统的 JDBC 编程方式,iBatis 能够减少大约 61% 的代码量。这主要是通过将 SQL 语句从 Java 代码中分离出来实现的...

    ibatis自动生成工具

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在开发过程中,Ibatis可以极大提高开发效率,减少手动编写SQL和DAO(Data Access Object)实体类的工作量。本文将详细...

    sqlserver Ibatis XML自动生成工具

    SQLServer Ibatis XML自动生成工具是一款实用的开发辅助软件,主要针对Java开发人员,特别是那些在项目中使用Ibatis作为持久层框架的开发者。这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML...

    ibatis生成实体工具

    这个"ibatis生成实体工具"是为了简化开发过程,自动化创建与数据库表对应的Java实体类,从而减轻开发人员的工作负担。 在传统的Ibatis开发中,我们需要手动编写SQL映射文件(Mapper XML)以及对应的Java Bean(实体...

    ibatis生成工具

    标题 "ibatis生成工具" 指向的是一个与iBATIS相关的自动化工具,它可能用于简化数据库交互层代码的生成工作。iBATIS是一个Java持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,提供了一种灵活的数据访问...

    持久层和持久化

    在Java中,尤其是通过ORM(对象关系映射)工具如Hibernate进行持久化操作时,它将对象与数据库之间的映射过程自动化,使得开发者可以直接操作对象,而无需关注底层的SQL语句和关系映射,简化了数据库交互的工作。...

    ibatis反向生成工具

    Ibatis,原名MyBatis,是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以被用来完全替代JDBC进行数据库操作,大大简化...

    IBatis 代码生成工具

    IBatis 是一款流行的数据持久层框架,主要用于简化Java应用程序与数据库之间的交互。它引入了SQL映射的概念,将SQL语句直接写在XML配置文件中,使得SQL与业务逻辑分离,提高了代码的可读性和可维护性。在这个场景中...

    mybatis和ibatis代码生成工具

    MyBatis是由Google Code托管,后迁移到GitHub的开源项目,它是一个基于Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用...

    表自动生成ibatis工具

    在IT行业中,数据库管理和自动化工具的使用是提升开发效率的关键环节。Ibatis,作为一个轻量级的Java持久层框架,以其灵活的SQL映射和强大的数据访问能力深受开发者喜爱。本篇文章将深入探讨如何利用特定工具自动...

    ibatis sql生成工具

    Ibatis,作为一个轻量级的持久层框架,与传统的ORM(对象关系映射)工具相比,提供了更为灵活的SQL映射机制,使得开发者可以直接编写SQL语句,从而更好地掌控数据库查询性能。 该SQL生成器被设计成Web应用的形式,...

    工作流引擎 Osworkflow 及其持久化机制的研究

    本文旨在探讨OSWorkflow的核心技术架构,并深入研究其持久化机制,特别是如何通过ibatis实现持久化。 #### 2. Osworkflow 的核心技术架构 ##### 2.1 工作流程描述 OSWorkflow的核心是工作流描述文件,该文件采用...

    ibatis.util包

    在Java开发领域,Ibatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在配置文件中,从而简化了数据访问层的实现。...同时,良好的版本控制和构建自动化工具,如Maven或Gradle,可以帮助减少这类问题的发生。

    ibatis的SqlMap辅助生成工具

    为了解决这个问题,出现了"ibatis的SqlMap辅助生成工具",它旨在提高开发效率,减少错误,确保字段与SQL语句的准确对应。 SqlMap辅助生成工具的功能主要包括两大部分: 1. **SqlMap自动生成**:该工具能够根据...

    ibatis2mybatis-master.zip

    描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...

    log数据分析工具 struts ibatis实现

    综上所述,"log数据分析工具 struts ibatis实现"涉及了日志工具的选择与使用、MVC框架Struts2和持久层框架iBatis2的日志配置与应用、日志的收集、分析以及在整个项目生命周期中的作用。理解和掌握这些知识点,对于...

    HIbernate,Ibatis等持久层开发文档

    本压缩包包含两个关键的持久层框架——Hibernate和iBATIS的开发文档,将帮助我们深入理解并有效使用这两个强大的工具。 **Hibernate** 是一个对象关系映射(ORM)框架,它允许Java开发者用面向对象的方式处理数据库...

Global site tag (gtag.js) - Google Analytics