看了论坛上高手和新手对Ibatis的讨论,抱着学习的态度,写写自己的一点理解和感想。
首先,应该鼓励不懂的人谈自己的看法,暴露自己知识的缺乏,这没什么不好,大家都需要进步。只有那些虽然无知却还不敢承认,或者怕别人知道自己无知的人才最可怕。每个人都可以坦诚自己的观点,但是不应以人身攻击为手段。
然后,作为高手或者自认为对问题有比较透彻了解的人应该回复有建设性的文字,而不该以嗤之以鼻来应对。要知道并非所有的人都那么聪明。再,或者不要回复,一笑而过也好,总强过打嘴仗,脱离问题本身。
我的理解也是浅显的,自认为没有学得那么好。我理解这个问题不单纯是要讨论Ibatis怎么使用的问题。还涉及到数据模型和整体架构的问题。
(1)先从数据模型的层面来说。
其一、我理解尽量避免出现结构很大的表,拥有N多字段,甚至里面包括了大对象字段BLOB或者CLOB。特别是这个表将来会成为拥有N多数据,甚至海量数据的表。对于这样的表进行查询是比较费时的。如果,业务上要求有这样一个entity,那最好对其进行拆分。拆分的原则我理解将基础的信息拆分出来,特别是要作为查询条件的部分。特别是要将大对象和占用空间比较大的字段拆分到其他子表中。理想情况下,我们当然希望只将作为查询条件的字段拆分到主表中。这样能够使得表足够小。但是,业务可能会变化,查询的条件可能会变化,调整也可能会出现。所以在主表中的字段除了查询条件还可以多些,只要认为适当就可以了。
其二、对于主从表的结构尽量能做到层次不要太多,自己认为2层足够了,如果超过3层就显得很多了。操作起来就会非常麻烦和复杂。这里也包括上面大表拆分的情况。
其三、对于主从表的个数,一个主表对应多个从表。这里从表的数量也最好能够得到控制。因为,如果我们采用单表查询的方式,先查主表,再分别查从表,其速度就会跟从表的数量有关。当然对于一个特定的业务查询,也并非要查询所有的从表。
(2)从页面显示的层面来说
其一、通常应用会分为列表页面或者叫查询页面和详细页面。对于列表页面应该显示业务主数据,通常是主表的内容。注意,我是说通常。页面设计应该秉承这样的原则。进入详细页面以后再显示相关子表的内容。这样的设计会和(1)中的一的原则相吻合。
(3)从Ibatis的层面说
其一、查询条件可能涉及主表、从表多个表。使用Ibatis我建议传入参数还是使用Map。这样避免新建JavaBean,扩展也很灵活。比如新增查询项。
其二、对于结果集,Ibatis中使用ResultMap来映射JavaBean与数据库表字段的关系。这其实跟Hibernate没太大区别。如果满足(1)中一和(2)中一的设计原则。其ResultMap可以只是针对一个数据库表,或者说返回的结果集类型只是一个已经存在的PO,它与数据库表一一对应的。
其三、有人担心如二中处理会出现N+1或者说M*N+1的问题。但是该问题可大可小,通常我认为问题不大,除非特殊情况下,比如需要查询的子表很多。因为,对于列表页面,通常是要分页的,其中对于主表的查询返回结果集在10个左右。当然,这确实增加了查询次数,但是只要系统能够响应比较快,问题可以不用考虑。特别是查询如果只返回主表结果集的时候,就更不会出现N+1的问题。
其四、最糟糕的是,要求查询结果集包括主表和多个从表的记录一起,而且又是多个超大的表进行关联查询。对于这样的问题的处理本身就是个棘手的问题。涉及到SQL的性能调优。Ibatis本身也支持定义嵌套的ResultMap。当然也可以定义一个新的ResultMap对应一个结果集建立一个JavaBean。而且结果集还可以定义为Map。但是,这样的查询应该在设计中尽量减少。
其实直接处理复杂SQL是Ibatis的特点。所以特别是复杂的查询,使用Ibatis才更合适。即使为此,新建立一些JavaBean也是很值得的。当然,在速度允许的情况下,也没有必要一味的要躲避所谓的N+1,在一般情况下的N+1也是可以接受的。如果速度实在慢,再考虑返回多个表的结果集在一起的情况。
分享到:
相关推荐
教学随笔1.doc
1. **培养儿童自我服务和助人为乐精神**: 文中提到,教师鼓励孩子们在用餐后帮忙清理餐桌,这不仅锻炼了他们的动手能力,也培养了他们为他人服务的意识。通过参与劳动,孩子们不仅改掉了不良习惯,还在帮助他人的...
这篇文档实际上并不是关于IT行业的,而是个人的生活随笔,描述了作者在八月中的某些日子中的经历和感受。尽管如此,我们可以从中提炼出一些与日常生活和技术应用相关联的知识点。 首先,作者提到了"停电"这一事件。...
华为计划在未来几年内建立IT流程管理,目标是达到SEI 1级,以增强其在全球市场中的竞争力。 总的来说,印度的IT教育系统在培养高技能人才方面表现出色,但面临人才外流的挑战。华为等中国公司通过与印度高校合作,...
### 图解HTTP随笔知识点详解 #### 一、概述 本文档是对《图解HTTP》一书中的知识点进行深入解析的补充文档。原文档可参考链接:https://blog.csdn.net/qq_38746380/article/details/102688140。本篇补充文档旨在...
随笔1探讨的主题是“公平分配与轮流制度”。文中提到教师在组织幼儿排队时遇到的问题,孩子们为了争当排头而出现混乱和冲突。教师通过询问了解到孩子们想要当排头的原因,主要是为了离老师更近、帮助老师做事以及...
1.1.标签 2.1.选择器 2.2.边距 3.1.sql拼写方法问题 3.1.在同一个页面同时使用两个ng-app问题
1. **散文与随笔的区别**:散文通常指的是结构自由、形式灵活、语言优美、情感丰富的文学体裁,它强调的是意境和情感的表达;而随笔则更为随意,通常是作者对某一主题的即时感悟,篇幅短小,但富有哲理。 2. **黄牛...
很抱歉,但根据您给出的信息,标题和描述中提到的是"网恋随笔散文随笔散文.rar",这明显与IT行业知识不相符,而更倾向于文学或个人创作。标签虽为"教育",但没有具体的IT教育相关知识点。压缩包子文件的文件名称列表...
随笔1:"类与对象的关系.txt"介绍了OOP的基础,即类和对象的概念。类是创建对象的蓝图,定义了对象的属性和方法。对象则是类的实例,拥有类定义的属性并能执行类中定义的操作。理解类和对象的关系是学习面向对象编程...
工程数学软件实用入门资料,可视很好,不需要专门的语言。
关于描写夏天的散文随笔.doc
【小忆故乡随笔】是一本以回忆故乡为主题的随笔集,主要涵盖了作者对家乡的点滴记忆、情感体验以及对乡土文化的深刻洞察。这不仅是一部文学作品,也是一份珍贵的文化记录,对于读者来说,它既能够带来阅读的愉悦,也...
### 1. 幼儿教育的重要性 - **基础知识**:从婴幼儿出生到成长的过程是不断进步发展的。幼儿园阶段是这一过程中的重要环节,它不仅关系到孩子们的身体健康,还涉及到情感、社交技能、认知能力等多方面的培养。 - **...
1. **Java基础**:这部分可能包括了Java的基本语法,如变量、数据类型、运算符、流程控制(if语句、for循环、while循环)、方法定义和调用等。 2. **面向对象编程**:Java的核心特性是面向对象,可能的笔记内容有类...
1. **RAR文件格式**:RAR是一种常见的压缩文件格式,用于减少文件大小以便存储和传输。它支持分卷压缩,可以在多个文件中存储一个大型文件。 2. **PDF文件格式**:PDF(Portable Document Format)是Adobe公司开发...
一年级数学第一学期教学随笔.pdf
关于小学一年级数学下册教学随笔.docx
信息技术教学随笔主要探讨了如何在信息技术教学中应对教材陈旧和激发学生兴趣的问题。作者指出,信息技术学科因其快速发展,教学内容应及时更新,以适应不断变化的信息环境。针对使用过时教材的情况,教师采取了以下...
有关家风的经典散文随笔.doc