MyBatis面试题

1、 MyBatis 的优点和缺点
优点:
(1)基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响, SQL 写在 XML里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML 标签,支持编写动态 SQL 语句,并可重 用。
(2)与 JDBC 相比,减少了 50% 以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接; (
3 )很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据库 MyBatis都支持)。
(4)能够与 Spring 很好的集成;
(5)提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象关系
组件维护。
缺点
(1) SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定 要求。
(2) SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
2、 #{} ${} 的区别是什么?
#{} 是预编译处理, ${} 是字符串替换。
Mybatis 在处理 #{} 时,会将 sql 中的 #{} 替换为 ? 号,调用 PreparedStatement set 方法来赋值;
Mybatis 在处理 ${} 时,就是把 ${} 替换成变量的值。
使用 #{} 可以有效的防止 SQL 注入,提高系统安全性。
3、 如何执行批量插入?
首先 , 创建一个简单的 insert 语句 :
                
        < insert id = ”insertname” >
                insert into names ( name ) values ( # { value })
        </ insert >
然后在 java 代码中像下面这样执行批处理插入 :
        
        list < string > names = new arraylist ();
        names . add ( “fred” );
        names . add ( “barney” );
        names . add ( “betty” );
        names . add ( “wilma” );
        sqlsession sqlsession = sqlsessionfactory . opensession ( executortype . batch );
        try {
        namemapper mapper = sqlsession . getmapper ( namemapper . class );
        for ( string name : names ) {
        mapper . insertname ( name );
        }
        sqlsession . commit ();
        } catch ( Exception e ){
        e . printStackTrace ();
        sqlSession . rollback ();
        throw e ;
        }
        finally {
        sqlsession . close ();
        }
4、 Mybatis 的一级、二级缓存 :
1 )一级缓存 : 基于 PerpetualCache HashMap 本地缓存,其存储作用域为 Session ,当 Session
flflush close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。
2 )二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache HashMap 存储,不同在于其存 储作用域为 Mapper(Namespace) ,并且可自定义存储源,如 Ehcache 。默认不打开二级缓存,要开启 二级缓存,使用二级缓存属性类需要实现Serializable 序列化接口 ( 可用来保存对象的状态 ), 可在它的映射 文件中配置 ;
3)对于缓存数据更新机制,当某一个作用域 ( 一级缓存 Session/ 二级缓存 Namespaces) 的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear 掉并重新更新,如果开启了二级缓存,则只根 据配置判断是否刷新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值