`
wfzhanga
  • 浏览: 68805 次
  • 性别: 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面试合集

    struts2,hibernate,spring,ibatis的一些面试题,很详细,向北京,杭州,这些大城市很实用

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

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

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

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

    Java框架面试题总结

    Java常用框架常见面试问题 Struts Ajax Spring Hibernate iBatis

    ORM、DB面试题

    DB知识,ORM框架Mybatis,ibatis,索引等面试常见问题

    java面试宝典和学习必备

    方案二、jsf+richfaces+extjs+ibatis+spring+tomcat+sql server。 方案三、struts2+jsp+hibernate+spring+tomcat+oracle。 四、jsf+xhtml+ibatis +spring+maven+sqlserver。 1、最常用的三大框架,hibernate,struts2...

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

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

    中关村软件园基地面试题

    java的面试题包括corejava javaweb ssh xml http webservice ibatis等

    java面试题.txt

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

    20180916BIGO面试准备

    BIGO公司面试前准备材料(java开发) 任职要求: 1. 本科及以上学历。 2. 扎实的计算机、网络相关基础知识。 3. 学习能力强,能够快速适应新的环境。 4. 有一定的linux、JAVA、html/css/js开发经验。 5. 良好的分析和...

    Struts2.0+Springframework2.5+ibatis2.3完美整合实例

    Struts2.0+Springframework2.5+ibatis2.3完美整合实例

    ibatis的教程

    ibatis的教程 集SSH框架,android,行业资讯,数据库,web开发,设计模式希望大家一起分享

    java面试题.rar

    搜集最全面的java面试题,java核心,javascript,数据库,oracle,存储过程,servlet,spring,struts,spring,ibatis等等

    java基本面试题葵花宝典

    java最基本的面试题 葵花宝典版本 个人觉得还是不错的,很适合刚刚出来的新人》附加一个 ibatis学习指南!

    Java面试宝典-经典

    3、用jdom解析xml文件时如何解决中文问题?如何解析? 114 4、编程用JAVA解析XML的方式. 115 5、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 117 七. 流行的框架与新技术 117 1、谈谈你...

    Java面试宝典2010版

    3、用jdom解析xml文件时如何解决中文问题?如何解析? 114 4、编程用JAVA解析XML的方式. 115 5、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 117 七. 流行的框架与新技术 117 1、谈谈你...

    java面试题大全(2012版)

    3、用jdom解析xml文件时如何解决中文问题?如何解析? 114 4、编程用JAVA解析XML的方式. 115 5、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 117 七. 流行的框架与新技术 117 1、谈谈你...

    2013java面试题搜集

    都是传智播客收集的面试题希望对面有用 1、HTTP请求的过程 2、那说说数据库连接池的原理 3、Java的内存管理机制是什么 4、Javascript中怎么实现继承?有几种方式? 5、spring底层用什么实现? 6、hibernate和...

Global site tag (gtag.js) - Google Analytics