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元起,快前往官网查看详情吧