`
wfzhanga
  • 浏览: 70575 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ibatis面试问题

阅读更多
1) Ibatis中使用like ‘%#filedName#%’ 时,有什么问题?
在xml映射文件中,如果直接按如上写法,会报异常:java.sql.SQLException: Invalid argument in JDBC call: parameter index out of range: 1。
所以一般会采用如下两种方式:
1) 将#换成$,如like ‘%$ filedName $%’,这样就没有问题了..
2) 采用字符串联接符||,如:like ‘%’||# filedName #||’%’
2) Ibatis中#与$的区别?
1 #是把传入的数据当作字符串,如#field#传入的是id,则生成sql语句:order by "id";
2 $传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id ;
3 #方式能够很大程度防止sql注入, 但$方式无法防止sql注入;
4 $方式一般用于传入数据库对象.例如传入表名;
5 一般能用#的就别用$ ;
 
3) ibatis 的动态SQL语句问题:

 

<select id="findHelpTopicByCondition"
        resultType="org.apache.ibatis.zsamples.entities.HelpTopic"
        parameterType="org.apache.ibatis.zsamples.entities.HelpTopic"
        useCache="true">
        select help_topic_id as id, name as name, help_category_id,
        description as description, example as example, url as url from
        help_topic
        <where>
            <if test="name!=''">
                name=#{name}
            </if>
            <if test="id!=null">
                and id=2
            </if>
            <if test="name!=''">
                and description=#{description}
            </if>
            <if test="name!=''">
                and example=#{example}
            </if>
            <if test="name!=''">
                and url=#{url}
            </if>
        </where>

    </select>
 
SELECT help_topic_id AS id, 
       name          AS name, 
       help_category_id, 
       description   AS description, 
       example       AS example, 
       url           AS url 
FROM   help_topic 
WHERE  name =? 
       AND id = 2 
       AND description =? 
       AND example =? 
       AND url =? 
 
    public List<HelpTopic> findHelpTopicByCondition(HelpTopic ht){
        List<HelpTopic> hts=null;
        SqlSession session=getSqlSessionFactory().openSession();
        hts=session.selectList("HelpTopicSpace.findHelpTopicByCondition",ht);
        close(session);
        return hts; 
    }
 
4) iBatis与Hibernate区别? 写道
1. iBatis 需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比 Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
2. iBatis 可以进行细粒度的优化
比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。
3. 开发方面:
开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
4. 运行效率
在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多。
 

 

 

 

 

分享到:
评论

相关推荐

    struts2,hibernate,spring,ibatis面试合集

    这三个框架组合使用,可以构建出高效、可维护的Java企业级应用,尤其在北京、杭州等大城市,它们在面试中经常被提及,对于开发者来说,掌握SSH框架的知识至关重要,因为这不仅能提高开发效率,还能为大型项目的稳定...

    JAVA面试问题,自己和别人总结

    JAVA面试问题总结 JAVA是一种广泛应用的编程语言,作为一名JAVA开发者,需要具备扎实的基础知识和实践经验。本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。...

    Java面试题56.ibatis和hibernate有什么不同.mp4

    Java面试题56.ibatis和hibernate有什么不同.mp4

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    阿里巴巴面试总结DOC版

    本资源摘要信息主要总结了阿里巴巴面试中的问题和答案,涵盖了 Java 编程语言、设计模式、JVM 内存模型、ClassLoader 结构、UML 模型图、OSGi 框架、Spring 框架、iBatis 框架、Java 序列化、NIO 编程、HTTP 协议、...

    ibatis 资料

    【标题】:“iBatis 资料” 【正文】: ...同时,iBatis的易用性和灵活性使其在中小型项目中广泛被采用,也是面试中常问的技术点之一。因此,熟练掌握iBatis对于提升Java开发者的技能水平至关重要。

    ORM、DB面试题

    本文将深入探讨这两个主题,帮助你准备相关的面试问题。 首先,我们来理解数据库(DB)。数据库是存储和管理数据的系统,它允许用户以结构化方式访问和操作数据。在Java领域,常见的关系型数据库有MySQL、Oracle、...

    iBATIS3 GA.源码,含案列

    iBATIS3是一款开源的Java持久层框架,它为开发者提供了在SQL Maps和Data Access Objects(DAOs)之间的一个...对于想要深入了解Java持久层技术或者准备面试数据库访问相关职位的开发者来说,这是一个非常有价值的资源。

    JAVA工程师面试常见问题及答案

    ### JAVA工程师面试常见问题及答案解析 #### 1. 事务隔离级别 事务隔离级别是数据库系统为了保证数据的一致性和防止并发操作引起的问题而设置的不同级别。主要有四种不同的隔离级别: - **READ UNCOMMITTED (未...

    ibatis的教程

    面试中,Ibatis的使用和设计模式的理解常常是考察点。在实际项目中,熟悉这些知识可以增加就业竞争力。 【压缩包子文件的文件名称列表】:虽然未提供具体文件内容,但我们可以假设这个压缩包包含了Ibatis的使用示例...

    Java框架面试题总结

    ### Java框架面试题总结 #### Struts篇 **1. Struts的工作流程** Struts框架是一种基于MVC(Model-View-Controller)架构模式的Java Web应用框架。它的工作流程如下: - **客户端发起请求**:客户端通过浏览器或...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题56.ibatis和hibernate有什么不同 Java面试题57.hibernate对象状态及其转换 Java面试题58:hibernate的缓存 Java面试题59.webservice的使用场景 Java面试题60.activiti的简单介绍 Java面试题61.linux的使用...

    struts2+hibernate+spring+ibatis.rar

    Struts2、Hibernate、Spring 和 iBatis 是四个在Java Web开发中...同时,掌握这样的整合能力对于面试和职业发展也极其重要。通过实践和研究这个压缩包中的内容,开发者可以更好地理解和掌握企业级Java应用开发的精髓。

    Spring面试题总结.pdf

    在描述中提到,文档是“Spring面试题和答案”,这暗示文档会按照面试题的格式,提供问题以及对应的答案或解释,帮助读者更好地准备面试,对知识点有更深入的理解。 文档中提到的Spring概述包含了以下几个核心知识点...

    阿里面试题总结

    - iBatis框架中#与$符号的区别 - 基础技术、框架及面向对象的理解 - 架构层面的数据库设计与Linux操作系统的熟悉程度 - Spring框架的基本概念与servlet线程安全概念 - AOP与IOC原理 - 数据库表设计、索引使用...

    面试题集默写

    根据提供的文件信息,以下是关于Java面试题集默写的知识点总结: 标题为“面试题集默写”,描述为“这是我默写的java面试知识,小知识在于积累,尽量默写还是好些”,标签为“java知识”。文件中显示的内容是对...

    java面试宝典和学习必备

    Java 技术是现代软件开发领域中的核心组件,尤其在面试和学习过程中,掌握Java的相关知识点至关重要。以下是一些关键的Java技术要点: 1. **Java三大框架**:SSH(Struts2、Hibernate、Spring)是Java开发中最常见...

    java面试题.txt

    java面试题 Struts 1 2+ Spring + Hibernate + ibatis + JavaScript + Ajax + jQuery EasyUI + WebService +

Global site tag (gtag.js) - Google Analytics