hibernate

『互联网架构』软件架构-mybatis体系结构(14)

你。 提交于 2020-11-11 19:47:51
今天说说mybatis,之前说过spring ioc,aop,mvc,接下来就到数据库的持久层了。从上到下的顺序,mvc,ioc,最下面就是数据库的持久层。mybatis是互联网和企业内广为应用的框架。官方参考文档这个文档很详细: http://www.mybatis.org/mybatis-3/zh/index.html <!--more--> 数据库访问层的4种实现方案对比 JDBC 当初最早的实现dao层,都是通过jdbc的方式 获取链接,通过DriverManager.getConnection 构建sql语句,可能这个sql语句,增删改查都有可能 设置参数,跟jdbc数据库是一一对应的 执行sql,通过execute 获取返回结果 基于结果构建DO 关闭链接 非常的繁琐,可以基于一个组件,开发一个工具类,获取链接和关闭链接肯定是两个方法,1-7步可以通过代理方法构建。第二步可以通过参数的形式传递给方法。自动帮我们获取链接,设置参数,执行sql。大大简化了我们开发。后来就开始企业开发使用jdbc template。 JdbcTemplate 构建sql语句 构建参数 调用jdbc模板方法 3.1 获取链接 3.2 设置参数 3.3 执行sql 3.4 获取返回结果 3.5 基于result对象属性映射构建DO 4 返回DO对象 虽然JdbcTemplate

阿里弃用Hibernate,却用MyBatis,竟然是因为这个!

一世执手 提交于 2020-11-11 10:25:19
最近一直在研究MyBatis源码,作为国内经常使用的持久层框架,其内部代码的设计非常优秀。比如在开发过程中,有能力对框架进行深度的定制化开发,解决BUG也更加得心应手! 另外学习开发者是如何设计高扩展性、低耦合性的代码,便于在自己的开发场景中应用。 而在Mybatis中,缓存是一个绕不开的话题。比如说,MyBatis的一级缓存竟然还会引来麻烦? MyBatis 一级缓存与 SpringFramework 的声明式事务有冲突吗?在 Service 中开启事务,连续查询两次同样的数据,结果两次查询的结果不一致。这些应该如何解决? 使用 Mapper 的 selectById 查出来实体,修改实体的属性值,然后再 selectById 查找实体,发现之前查出来的是刚才修改过的实体,不是由数据库查出来的 如果不开启事务,则两次请求查询的结果是相同的,控制台打印了两次 SQ 然而大多数人对Mybatis框架的理解仅仅局限于使用,并不熟悉框架底层的实现原理。但MyBatis框架在互联网大厂是非常重要的角色,比如说阿里巴巴的持久层抛弃hibernate,采用的就是MyBatis框架 为什么阿里巴巴的持久层抛弃hibernate,采用MyBatis框架? 原因大概有以下4点: 阿里在mysql上下了大功夫,他们对数据查询的要求也比较高,很多sql查询都要精心设计