从零开始写ORM框架系列6——整合Spring连接池和事务

上一章,我们自己通过一个简单的SimpleTransaction让这个ORM工具支持了事务。虽然很简单,看起来也很实用,但想实际用于生产,肯定是不靠谱的, 仅仅作为学习用。这一章, 我们来看看,如何将数据库连接池和spring的事务管理器集成进来。让Spring来帮我们支持连接池和事务。
对连接池和事务的支持结果


这次, 我们先来看效果。
连接池测试 测试代码:


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
测试结果如下:


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
在这测试里,我们设置最大连接数为5, 开100个线程, 同时往表里插入数据,测试结果显示, maxActive和numActive都是5, 并且数据库里插入了100条数据,说明我们的连接池是起了作用的。


事务测试 测试代码:


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
测试结果:


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
这个测试里, 我们往foodinfo里插入了两条数据, 第二条数因为name属性为空, 会报一个异常。结果显示异常信息打出来了, 并且Foodinfo表的数据也没有插入第一条数据。说明我们完成了对事务的支持。




实现方式
引入相关的jar包。


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
2、配置datasource和事务


从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
【从零开始写ORM框架系列6——整合Spring连接池和事务】

3、修改BaseDao的add方法
从零开始写ORM框架系列6——整合Spring连接池和事务
文章图片
拼sql和参数的方法和前面文章讲到的方法一样, 不变。


总结
这个系列的文章到这里就暂时告一段落了,总结一下我们在这个ORM工具里完成了的工作:
1、支持SQLServer和MySql。
2、对比起ibatis,我们真正实现了零配置和零SQL,入手门槛极低。
3、支持查询指定SQL字段和查询条件里的指定where条件,防止SQL爆炸,防止因为select * 导致的数据库服务器、应用服务器的不必要开销(大多数下我们可能只需要表里的某一个字段)。
4、支持连接池。
5、支持事务。
6、实现了表到java实体代码的生成工具。


后面我们将继续考虑下,如何让我们的orm框架里支持水平拆分和垂直拆分的表。

    推荐阅读