《深入浅出MyBatis--技术原理与实战》读书笔记

来源:互联网 发布:怎样连接网络电视 编辑:程序博客网 时间:2024/06/07 14:38

2017年11月30日

       这本书目前为止我仔细看到了第6章,还有3章没有仔细看,这本书的确如作者所说,基于官方文档,因为我仔细读过mybatis的官方文档,基本和官方文档一直,不过官方文档有些不太重要的部分,该书没有讨论。同时还有一些作者对于mybatis运行机制的简单讲解,还有一些实战经验,总的的来说此书还是值得一读。这里有个问题就是源码的问题,该书是博文出的,在博文该书的主页上没有源码下载,其实这本书的大部分章节原封不动的移到了《Java EE互联网轻量级框架整合开发》,这本书在博文的主页上是有源码链接下载的。

2017年11月2日

前言

移动互联网的特点是大数据、高并发、对服务器往往要求分布式、高性能、高灵活等,而传统模式的Java数据库编程框架已经不再适用了。在这样的背景下,一个Java持久层框架MyBatis走入了我们的世界,它以封装少、高性能、可优化、维护简单。它特备适合分布式和大数据网络数据库的编程。

其实我一直对分布式数据库和大数据网络数据库不太理解。

MyBatis (独立使用)有两个子项目,一个是MyBatis-Spring(和Spring一起结合使用),还有一个是MyBatis-Guice(MyBatis-Guice子项目是干什么的?)

其实这里貌似有个历史是,spring上一次升级的时候本来可以把MyBatis内置到Spring框架里的,但是由于当时Mybatis 3.0还没有完全准备好。所以错过了,所以就有MyBatis-Spring这个项目的存在。

作者邮箱:ykzhen2013@163.com

作者博客:http://blog.csdn.net/ykzhen2015


第1章

  • JDBC大概的工作步骤:
  • 使用jdbc编程需要连接数据库,注册驱动和数据库信息。
  • 操作Connection,打开Statement对象。
  • 通过Statement执行SQL,返回结果到ResultSet对象。
  • 使用ResultSet读取数据,然后通过代码转化为具体的POJO对象。
  • 关闭数据库相关资源。针对于资源型对象,一定要记得主动关闭。

JDBC的弊端:其一,工作量相对较大。我们需要先连接,然后处理JDBC底层事务,处理数据类型。我们还需要操作Connection对象、Statement对象和ResultSet对象去拿到数据,并准确关闭它们。其二,我们要对JDBC的编程可能产生的异常进行捕捉处理并正确关闭资源。

Hibernate的缺点:

----全表映射带来的不便,比如更新时需要发送所有的字段。

----无法根据不同的条件组装不同的SQL。

----对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO。

----不能有效支持存储过程。

----虽然有HQL,但是性能较差。大型网站往往需要优化SQL,而Hibernate做不到。


这里讲解的通过映射类来讲解例子的时候,我都没发现可以在映射类里面可以不用写sql代码,而是通过命名空间的对应,使用xml中的代码。


2017年11月3日

第二章 MyBatis入门

MyBatis提供两种方式创建SqlSessionFactory:一种是XML配置的方式(推荐),这样一方面可以避免硬编码,一方面方便日后配置人员的修改,避免重复编码;另外一种是代码的方式。

2017年11月15日

上述说到的两种方式,通过代码的方式的好处是,可以让关键信息在XML文件中不可见。达到加密的目的。

红框处检查文档正确性的配置文件。其实这个地方的深入理解应该好好看看《Java核心卷 2》里面关于XML的讨论章节。

2017年11月4日

SqlSession使用完毕后一定要关闭,如果不及时关闭资源,数据库的连接资源将很快被耗尽,系统很快因为数据库资源的匮乏而瘫痪。

生命周期

SqlSessionFactoryBuilder  存在于方法的局部

SqlSessionFactory  单例模式,MyBatis生命周期

SqlSession  一个请求数据库事务处理的过程

Mapper  它最大的范围和SqlSession是相同的



log4j是个什么鬼东西?并且第二章最后,我实现了书中的demo,但是最后log4j没有工作,弹出的警告。为什么要使用log4j?要读入默认配置后就可以运行起来了。

session打开后一定要记着关闭,出现错误后一定要记得回滚。


2017年11月27日

第三章 配置

如下的MyBatis配置XML文件的层次结构是不能够颠倒顺序的,如果颠倒顺序,MyBatis在解析XML文件的时候就会出现异常。



MyBatis配置XML文件的层次结构。注意,这些层次是不可以颠倒顺序的,如果颠倒顺序,MyBatis在解析的时候就会出现异常。

更多的时候,我们希望使用properties配置文件来配置属性值,以方便我们在多个配置文件中重复使用它们,也方便日后维护和随时修改。在MBatis中的配置方法是引入属性文件

<properties resources="属性文件名">


通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的是properties属性中指定的属性。


系统定义的别名中,有些是支持数组的。意思就是可以有这样的类型int,map就不支持数组,所以其不能有这样的形式map[]。


2017年11月6日

JDBC的使用大概可以分为下面几步

--使用JDBC编程需要连接数据库,注册驱动和数据库信息。

--操作Connection,打开Statement。

--通过Statement执行SQL,返回结果到ResultSet对象。

--使用ResultSet读取数据,然后通过代码转化为具体的POJO对象。

--关闭数据库相关资源。


映射器由两部分组成:1-java文件;2-XML文件\注解

映射器是MyBatis最复杂、最核心的组件。

引入映射器的方法一般分为4中:1234

插件(plugins)是比较复杂的,使用时要特别小心。

当MyBatis在构建一个结果返回的时候,都会使用ObjectFactory(对象工厂)去构建pojo,在MyBatis中可以定制自己的对象工厂。org.apache.ibatis.refelection.factory.DefaultObject


2017年11月9日

目前流行的缓存服务有MongoDB、Redis、Ehcache。如果缓存命中率很低,那么缓存就不存在使用的意义了,所以使用缓存的关键在于存储内容访问的命中率。


select元素的配置对于statementType resultType  resultOrdered  resultSets都不太明白。

在实际的情况中,大部分的数据库规范都是要求每个单词用下划线分隔,而Java则是用驼峰命名法来命名,于是使用列的别名就可以使得MyBatis自动映射,或者直接在配置文件中开启驼峰命名方式。


传递多个参数:

----使用Map传递参数。因为Map导致业务可读性的丧失,从而导致后续扩展和维护的困难,我们应该在实际的应用中果断废弃这样的传递参数的方式。

----使用@Param注解传递多个参数,这种方式的使用受到参数个数的影响。当n小于等于5时,它是最佳的传参方式,它比用JavaBean更好,因为它更加直观;当n>5时,多个参数将给调用带来困难。

----当参数个数多于5个时,建议使用JavaBean方式。


resultMap通过id元素定义属性,这个对象代表着使用哪个属性作为其主键。result元素定义普通列的映射关系。

resultMap可没有你所看见的那么简单,它是映射器最为复杂的元素,它一般用于复杂,级联这些关联的配置。在简单的情况下,我们可以使用resultType通过自动映射来完成,这样配置的工作量就会大大减少,未来随着进一步的学习深入,我们还会讨论resultMap的高级应用。

自定义主键生成规则,完全没明白

插入和删除执行完成MyBatis会返回一个整数显示更新或删除了几条记录。

MyBatis现有的版本只支持resultMap查询,不支持更新或者保存,更不必说级联的更新、删除和修改了。

阅读全文
0 0