【mybatis】记录优缺点说明-创新互联
- 读取mybatis的mybatis-config.xml配置文件
- 加载映射文件
- 构建SQLSessionFactory会话工厂(工厂模式)
- 构建SqlSession会话对象(工厂模式就是创建对象)
- Executor执行器根据SqlSession传递的参数动态地生成需要执行的SQL语句操作数据库
- 简单容易上手基于sql编程,与jdbc相比减少了一半以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
- 由于mybatis使用jdbc来连接数据库,所有只要jdbc支持的数据库mybatis都支持,而jdbc提供了可拓展性,所有只要数据库有针对java的jar包就可以与mybatis兼容。很好的与各个数据库兼容,开发人员不需要考虑数据库的差异性;
- 提供很多第三方插件,能够与spirng很好的集成;
- Mybatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,解除sql与程序代码的耦合,便于统一管理和优化并可重用;
- 提供XML标签,支持编写动态SQL语句;提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组建维护。
SQL语句编写的工作量较大,特别是在字段多和关系表多的时候,体现的淋漓尽致,对开发人员编写SQL语句的功底有一定要求;SQL语句依赖于数据库,导致数据库一致性差,不能随意更换数据库。(采用分数据库写)
其他Mybatis通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的,支持JDBC和JTA事务处理。Mybatis是半自动的,它仅有基本的字段映射,对象数据以及对象实际关系任然需要通过手写sql来实现和管理,由于mybatis需要手写sql,因此与数据库的耦合性直接取决于程序员写的sql的方法,如果sql不具通用性而用例很多某数据库特性的sql语句,移植性也会随之降低很多,成本很高。但是,由于mybatis的sql语句都是写在xml里,这样优化起来方笔,灵活度较高。这里再说一下mybatis缓存机制,Mybatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自动以不同的缓存机制,并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过cache-ref来实现。
补充mybatis中#{}
和${}
的区别:#{}
是预编译处理,会将sql中的#{}
替换为问号【?】,调用PreparedStatement的set方法来赋值${}
是字符串替换,就是把${}
替换成变量的值。
缓存 一级缓存使用#{}可以有效的防止sql注入,提供系统安全性。
基于PerpetualCache
的 HashMap 本地缓存,它的声明周期是和SQLSession
一致的,有多个SQLSession
或者分布式的环境中数据库操作,可能会出现脏数据。当Session flush
或 close 之后,该 Session 中的所有 Cache 就将清空,默认一级缓存是开启的。
基于PerpetualCache
的 HashMap 本地缓存,不同在于其存储作用域为 Mapper 级别的,如果多个SQLSession
之间需要共享缓存,则需要使用到二级缓存,并且二级缓存可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态)。
温馨提醒:如果有描述不符,可以评论说明,携手总结归纳
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:【mybatis】记录优缺点说明-创新互联
文章起源:http://cdiso.cn/article/dphodg.html