首页 > 其他分享 >mybatis事务-支付流程笔记-含建表代码

mybatis事务-支付流程笔记-含建表代码

时间:2022-08-15 10:45:59浏览次数:96  
标签:info goods -- 笔记 DEFAULT mybatis 含建表 NULL id

相关表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for goods_info
-- ----------------------------
DROP TABLE IF EXISTS `goods_info`;
CREATE TABLE `goods_info`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `goods_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称',
  `goods_stock` int(0) NULL DEFAULT NULL COMMENT '库存',
  `goods_price` bigint(0) NULL DEFAULT NULL COMMENT '价格',
  `goods_unit` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '1包2箱',
  `version` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
  `update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 30 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of goods_info
-- ----------------------------
INSERT INTO `goods_info` VALUES (10, 'D手机', 98, 25, '1', '2', '2022-08-10 11:12:37', '2022-08-15 10:19:08');
INSERT INTO `goods_info` VALUES (20, 'BB机', 100, 25, '1', '1', '2022-08-10 11:12:48', '2022-08-15 10:19:08');
INSERT INTO `goods_info` VALUES (30, 'CC笔记本', 100, 25, '1', '1', '2022-08-10 11:12:50', '2022-08-15 10:19:08');

-- ----------------------------
-- Table structure for goods_info_log
-- ----------------------------
DROP TABLE IF EXISTS `goods_info_log`;
CREATE TABLE `goods_info_log`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `user_id` int(0) NULL DEFAULT NULL COMMENT '用户id-冗余-为了方便查询',
  `order_id` int(0) NULL DEFAULT NULL COMMENT '订单编号',
  `old_stock` int(0) NULL DEFAULT NULL COMMENT '下单前数量',
  `goods_num` int(0) NULL DEFAULT NULL COMMENT '订单下单数量',
  `new_stock` int(0) NULL DEFAULT NULL COMMENT '下单后数量',
  `create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间(出问题检查用)',
  `update_time` timestamp(0) NULL DEFAULT NULL COMMENT '修改时间(出问题检查用)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of goods_info_log
-- ----------------------------
INSERT INTO `goods_info_log` VALUES (1, 200, 3, 100, 2, 98, '2022-08-10 11:37:17', NULL);
INSERT INTO `goods_info_log` VALUES (2, 200, 6, 98, 10, 88, '2022-08-15 10:04:30', NULL);

-- ----------------------------
-- Table structure for order_info
-- ----------------------------
DROP TABLE IF EXISTS `order_info`;
CREATE TABLE `order_info`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '订单id',
  `user_id` int(0) NULL DEFAULT NULL COMMENT '用户id',
  `goods_id` int(0) NULL DEFAULT NULL COMMENT '商品id',
  `goods_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称-是否必须加?',
  `goods_num` int(0) NULL DEFAULT NULL COMMENT '商品数量',
  `goods_unit` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品单位(个包箱)',
  `goods_price` bigint(0) NULL DEFAULT NULL,
  `total_price` bigint(0) NULL DEFAULT NULL,
  `old_account` bigint(0) NULL DEFAULT NULL COMMENT '用户账户原金额',
  `new_account` bigint(0) NULL DEFAULT NULL COMMENT '用户账户新金额',
  `order_status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '订单状态(0-已下单1-已付款9-已退款)同学讨论',
  `create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '下单时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of order_info
-- ----------------------------
INSERT INTO `order_info` VALUES (3, 200, 10, 'AA手机', 2, '部', 25, 50, NULL, NULL, '1', '2022-08-15 09:48:25');

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  `account` bigint(0) NULL DEFAULT NULL,
  `version` int(0) NULL DEFAULT NULL,
  `last_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `hashed_password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 501 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, '李新3', 20, 1000, 6, 'aa1', '888888');
INSERT INTO `users` VALUES (3, '王新', 22, 1000, 6, 'aa2', '888888');
INSERT INTO `users` VALUES (4, '李三', 27, 1000, 6, 'aa3', '888888');
INSERT INTO `users` VALUES (200, '李33', 22, 1000, 6, '李mike99', '999999');
INSERT INTO `users` VALUES (312, 'abc', 20, 1000, 6, 'abc_def', '999999');
INSERT INTO `users` VALUES (322, '李四娘', 0, 1000, 6, NULL, '999999');
INSERT INTO `users` VALUES (500, '李500', 55, 1000, 6, '李_555', '999999');
INSERT INTO `users` VALUES (501, '李666', 0, 1000, 6, NULL, '999999');

SET FOREIGN_KEY_CHECKS = 1;

 

 

 

 

*、JDBC+scanner。
*、完成示例:转账(最简单):张三给李四转账200或2000元。
user_account(id,name,account)
id name account
10 张三 1000
20 李四 1000
要求:最低余额不能不少于0
*、要用try..catch..finally

*、自动提交,即没有事务: conn.setAutoCommit(true)
*、关闭自动提交,即开启事务: conn.setAutoCommit(false)

*、执行多次SQL,然后提交事务,如果出现异常,在catch语句中:回滚事务。

*、在finally中:关闭各种资源
================
流程:
*、请输入来源账户:10
*、请输入目标账户:20
*、请输入要转账的金额:200或2000或其它
(回车执行)
开启事务
update user_account set ... where id=10;
update user_account set ... where id=20;
提交事务或回滚事务
关闭资源

=====实际支付流程==(课堂笔记),然后用户单击“支付”以后的后台执行流程。

用户单击支付(WX):
1、(前置条件):公司运维在经过领导授权的前提下,会给研发人员相关的商户信息,包括KEY。
2、代码:
1、调用WX或ZFB的接口 (百度:文档),要求:面试时要会讲过程(看资料,步骤整理到思维导图)
2、如果不成功,通常会重试3次,3次以后还不成功,则提示:支付失败,请稍后查询。 (面试时讲)
3、如果成功,则往下面3张表中插入数据:
/*
select * from users;


select * from goods_info;
select * from order_info;
select * from goods_info_log;
select *from user_info;

 


-- 200号用户下单,购买手机的全流程:

 

--假设用户的编号是:200
insert into order_info(user_id,goods_id,goods_name,goods_num,goods_price,goods_unit,order_status)
values(200,10,'AA手机',2,25,'部','1');

select * from order_info;

--为了运营能够查询用户下单那一个时刻的基本信息,此字段要保留(运营)
--可以为财务审计留下数据,提高数据的可信度。

-- 先查询库存和版本号(多个用户都得到相同的数据)
--开启事务
-- 修改库存(加锁)
select * from goods_info where id=10;
现在能拿到 id=10 stock=100 version=1
select * from users where id=200;
现在能拿到 id=200 account=1000 version=6

-- update goods_info set goods_stock=100-2 where id=10 ;
update goods_info set goods_stock=100-2,version=version+1 where id=10 and version=1;
--修改用户余额
-- update goods_info set goods_stock=100-2 where id=10 ;
update users set account=1000-25,version=version+1 where id=10 and version=1;

---假设另一个用户
-- update goods_info set goods_stock=100+2000,version=version+1 where id=10 and version=1;

-- 增加库存和用户扣款日志(重点)
insert into goods_info_log(order_id,user_id,old_stock,goods_num,new_stock,old_account,new_acccount)
values(2,200,100,2,98,?,?);
--提交事务
--出错则回滚事务
--关闭资源

-- 在order_info中,商品名称:goods_name要还是不要?还是必须要,还是可以不要?

 

 


两种:
1、是用标记的Mybatis方式。
2、是用自定义SQL
总结:这个场景,用哪种方案更适合?
*/

搜索

复制

标签:info,goods,--,笔记,DEFAULT,mybatis,含建表,NULL,id
From: https://www.cnblogs.com/xiaoyongdata/p/16587422.html

相关文章

  • HCIA学习笔记十七:Trunk接口
     一、配置Trunk接口\\创建VLAN[SWA]vlan3[SWA]vlan5\\配置端口类型[SWA-Ethernet0/3]portlink-typetrunk\\配置Trunk-Link端口PVID[SWA-Ethernet0/3]port......
  • SpringMVC笔记
    SrpingMvcSSM:Spring+SpringMvc+MybatisMvc三层架构狂神说SSM框架系列笔记链接:http://dwz.date/ac271、回顾MVC1.1、什么是MVCMVC是模型(Model)、视图(View)、......
  • Nginx学习笔记
    Nginx简介Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,Nginx和Apache的区别Apache和Nginx最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;......
  • HCIA学习笔记十六:Access接口
    一、配置Access接口属性 • Access端口收报文:如果收到对端设备发送的帧是untagged(不带VLAN标签),交换机将强制加上该端口的PVID。如果收到对端设备发送的帧是tagged(带VL......
  • mybatis 10: 动态sql --- part2
    <foreach>标签作用用来进行循环遍历,完成循环条件的查询,批量删除,批量增加,批量更新用法包括循环查询+批量删除+批量增加+批量更新的用法UsersMapper.javap......
  • (未完)【算法学习笔记】04 最近公共祖先LCA
    【算法学习笔记】04最近公共祖先LCA原理顾名思义,就是求两点的最近公共祖先(自己也是自己的祖先)。也就是两点在走到根节点的路径上最先遇到的共同的点。向上标记法比较......
  • 动手学强化学习(笔记)
    RLChina强化学习社区动手学强化学习官方网站第3章马尔可夫决策过程MDP3.3MRP回报价值函数3.4MDP状态价值函数动作价值函数这两个价值函数是相互融合的......
  • Java8新特性学习笔记
    java8JavaNIOjavaNIO(NewIO,Non-BolckingIO)是从java1.4版本引入的一套新的IOAPI,可以替代标准的javaioapi。nio支持面向缓冲区的(io是面向流的)、基于通道的IO操作......
  • TS学习笔记(1)
    TypeScript是JavaScript的超集,因为它扩展了JavaScript,有JavaScript没有的东西。硬要以父子类关系来说的话,TypeScript是JavaScript子类,继承的基础上去扩展。TS是出现是为......
  • 【学习笔记】线段树优化建图
    先开坑,有时间再说。例题CF786BLegacyCode//线段树优化建图,从寒假一直咕到暑假//之前觉得难得不行,现在看还是挺好理解的#include<queue>#include<cstdio>#includ......