经过几天对mybatis的学习,对于mybatis这个框架有了一些自己的感悟,以此记录
在我看来,学习框架还是比较无聊但是又是比较实用的技术,在我看来mybatis整体比较有趣的地方就是基于注解开发,虽然原理是和写配置文件是一样的,但我认为使用注解开发大大提高了开发效率。以注解方式完成ORM映射、开启延迟加载以及开启二级缓存都极大的引起了我的兴趣,直接以代码截图记录一下。


再记录一下mybatis比较实用的使用技巧。俩个别名标签,要知道mybatis框架再寻找其映射对象和寻找执行SQL语句都需要其全限定类名,而如果再每一个方法都采用全限定类名的方式定义,会略显繁琐,这时候mybatis就为我们提供了俩个别名标签<typeAliases>和<package>,再SqlMapConfig配置文件中配置<typeAliases>可以完成对映射对象的一个引用,在写映射配置文件的时候ResultMap就可直接使用对象的类名进行表示,而不需要使全限定类名的方式。在<mappers>标签下配置<package>标签,可完成对mapper配置文件包的引用过程,在有很多的mapper的时候,这种方式便大大提高开发效率。
另外,我认为mybatis与传统方式最大的一个区别就是默认开启一级缓存,我们知道使用传统方式连接数据库的时候,如果不采用一些NoSql的方式,那么便意味着每次查询都是与数据库的一次交互。即使你每次查询的数据都一样,它也同样完成与数据库的交互;一级缓存是SqlSession级别的缓存,也就意味着在同一个sqlSession中,执行同样的sql语句,第一次查询会去查询数据库并且写入到缓存中,之后的查询则会查询缓存以减少与数据库之间的交互。那么如果数据有所改变,即对数据进行了CUD操作,再去执行之前的sql语句会不会得到之前缓存中存储的数据,而导致查询结果与数据库数据不一致。答案则是否定的,mybatis的一级缓存机制保护了数据的一致性,即当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。
至于mybatis提供的二级缓存是默认不开启的,需要手动开启,二级缓存是mapper级别的缓存,即就是同一个SqlSessionFactory创建出sqlSession共用这个二级缓存。我认为二级缓存是具有一定的局限性,当一个sqlSession去执行了修改,添加,删除,commit(),close()等方法,则会清空整个二级缓存,也就意味着其他的sqlSession对象没有执行这些操作,再次查询时也不得不去查询数据库,所以其实用价值以我现在的经验还未发现,希望在之后的学习有更深层次的学习。