终于到了三层架构的DAO层封装了,本章上传到GitHub的代码就一个Dao类,封装的东西相对前面11章节而言是最抽象的,测试功能的正确性也是最为复杂的,因为涉及到了数据库事务的操作,数据库事务控制我会在后续的MVC框架中讲诉。
先来看一下封装后使用的效果,绝对让你耳目一新:
上面的截图是我之前写好的Dao类打印出来的,可以看到打印的内容分耗时、参数、原始、执行,分别代表的意思是:SQL执行耗时、SQL执行的入参、SQL在XML文件的模板内容、SQL替换参数后的可执行文件。
相比传统的数据库第三方插件输出的SQL文件要么就是一行里面有很多空白,要么就是一片中间空很多空白行,我这个对日志打印的效果做到了极致,所见即所得。
开启事务
开启事务方法是用于MVC中做事务控制采用得到的,在业务代码中开发不用关注,代码很简单。因为我写的注释比较少,里面参杂的逻辑需要读者稍微琢磨琢磨。
手动提交事务
在一些MVC框架下不同的事务切面有时候需要在切入点做事务提交,方便后一个事务逻辑下的代码能够查询到已执行SQL的数据。同样上面的代码也不需要开发在业务逻辑开发中关注,都是由框架的事务控制来处理的。
系统提交事务
系统提交事务也是由框架来控制的,目前系统提交事务代码和手动提交事务的唯一差别是数据库连接的始发,在整个请求执行完成后,系统需要提交事务,并把数据库连接归还给连接池。
回滚事务
可以看到上面的事务操作中,出现异常都在异常捕获里面做了事务回滚。同样这个方法也不需要开发在业务代码中使用,交由框架处理。
打印
这里的代码就是最开始展示的SQL执行的日志打印效果代码了,要打印出那个效果还需要后续对数据库Mapper文件的解析做封装,这里不展开。
查询
查询很简单,传查询参数,调用返回结果,不过这里到最后我还是会交由框架处理,因为dao的接口代理和反射是面向接口实现的编程,开发不需要直接调用dao等方法就能实现接口的调用逻辑,这一点在后续的集成中会介绍到,开发只需要定义好接口,调用接口即可,上手开发相当简单轻松。
新增
同上,新增也是同样的代码处理。
编辑
同上,新增也是同样的代码处理。
删除
同上,新增也是同样的代码处理。
到此,DAO层的核心操作Dao类开发完成,但是到最后发现,开发在写代码的时候一个方法都不用调用,都是面向接口编程,所有dao的操作都是交由框架处理了,这一点初学者可能觉得很神奇,不要急我后面的章节会介绍如何做到不调用dao方法来实现数据库的操作。