首先看如下一张表
image.png
接下来我们创建一张表users_coin 用户虚拟币表 表的引擎必须为innerDB格式
image.png
image.png
我们要完成转账功能 就需要用到事物 否则可能会出现转账失败的情况
image.png
接下来我们通过文档 用代码演示下
在MyDB中
可以使用lamda表达式插入参数 还可以插入接口的具体实现(匿名内部类的方式)
需要重写run方法 就可以实现基本的事物
接下来对业务逻辑进行编写
首先用JOOQ的自动生成代码 将users_coin表 生成一个类 接下来才能用面向对象方式操作数据库
image.png
运行MyDB
image.png
目录中出现如下
image.png
接下来在MyDB中写转账代码
image.png
在main函数中调用
image.png
运行结果
image.png
数据库中数据
image.png
以上方法为取出某一个字段的具体值 那么我想要取出一条采用面向对象方式对其进行访问 比如实体类 这个要怎样做呢
接下来演示下
首先看自动生成代码的这张图
image.png
我们操作数据库时候用的是操作映射类 实体类存在tables下面的records下面
所以我们首先要得到实体对象
下面写下代码
image.png
运行结果
image.png
同样是5
下面写下转账的事务处理代码
image.png
运行结果
image.png
再看下数据库中的表
image.png
可以看见完成了转账的过程
那这时我们再次运行一下会有什么效果呢?
image.png
再次运行可以发现抛出了一个异常 因为余额不足了 转账肯定是不能成功的
看下数据库中表
image.png
发现没什么变化 因为钱不够了
接下来我们将数据库表恢复成原来的数据
image.png
将调用转账函数的参数做下修改 使接收转账的人在数据库中不存在 看下会出现什么效果
image.png
abc这个人在数据库中不存在
运行结果
image.png
可以发现转账成功了
然后看下数据库
image.png
可以发现钱转出去了 但是却不知道转给谁了
下面为了解决我们修改下代码
image.png
运行结果
image.png
可以发现抛出了异常 因为abc不存在数据库当中
再看下数据库中数据是否发生了改变
image.png
可以发现并没有转账
只有数据库中有接收转账用户如下
image.png
再次运行
image.png
数据库
image.png
bhc用户转账给了wulong
以上就是我们事务处理的简单过程
image.png
网友评论