网站怎么建设商城,asp.net mvc 统计网站流量数据,wordpress 5.0.2 发布失败,色块设计网站SpringBoot增删改的细节研究 一、Spring boot增的安全性
1.开启数据库的事务
SpringBoot中Service层有事务#xff08;保证操作成功#xff09;
两个用户操作#xff0c;同时增加同一条数据#xff08;用户名#xff0c;密码一致#xff09;
验证内容#xff0c;开启… SpringBoot增删改的细节研究 一、Spring boot增的安全性
1.开启数据库的事务
SpringBoot中Service层有事务保证操作成功
两个用户操作同时增加同一条数据用户名密码一致
验证内容开启事务
Set autocommit0 不提交操作表在内存中 两个用户开启事务插入同一条数据会出现线程阻塞某个用户一直死机。
当业务出现问题时会有rollback方法回滚。
Commit提交提交后会内存数据到表中。 当B成功commit后数据表有新的数据B成功等待A的动作A动作取消B就成功。
看出插入同一条数据会出现线程阻塞某个用户一直死机
实质插入同一个idid是主键primary key
Sql语句: 原因用户不知道id 结论
插入数据时insert不要求用户输入primary key这是主键值就可以成功解决插入数据的阻塞问题。
解决学号学号用户输入查询学号是否重然后插入。
二、Spring boot删的安全性
两个事务删除同一id的用户
(1)有无阻塞在删除同一id时有阻塞问题.
(2)数据是否安全.数据是安全,,回滚不删除,提交就删除了.
解决阻塞:不允许删除同一个id,用户把表加载内存,不存在一个id
进入事务前,先查是否有id,有id中可以删除,没有id不允许删除. 三、Spring boot更新的安全性
两个事务两个用户同时更新一个数据的 得现结论:更新时数据不安全
解决方法: 乐观锁悲观锁 加锁. Synchronized,速度下降 乐观锁
CAB模式 内存有一个旧值修改时把旧值改新值修改时旧值与内存旧值对比如果一致允许修改不一致不允许改。
实现在数据表多一个字段version版本。
为myuser表添加一列 查询表时有版本version 使用乐观锁 为表增加一列version发生更新更新一次把version值加1,更新条件是id和version一起作用的结果 第一步改sql语句 第二步表加一列version,对应java bean多一个字段version 最后提交更新的页面多一个version的提交
Updatepage页面多一个version的提交 四、前端页面
使用bootstrap 开发按API文档
移动端 自适应内容随宽度缩小而缩小
响应式宽度达到一定程度时元素发生变化折叠或隐藏
不使用文档中的支持文件
百度页面搜索bootcdn 网站调用前端框架,速度快
击bootcdn的开源页面 在网站中搜bootstrap 第一个链接就是网站 进入链接
一个是css文件,没有后缀 ,只有bootstrap 点击后面的复制link标签
复制到myuser.html的head中 再找js,bootstrap5找bundle后缀的 复制的script标签,放在myuser.html的head中. 从官方得到,需要两个 了解bootstrap 一行12列 布局以row和col为准,container居中,text-center文字居中. 三列左右留空白
把table表格放中间 看bootstrap,左边有tables 表格项设置 在表格上使用table表格样式table-warning表示警告色黄色table-striped表示单数行深色偶数行浅色 还有按钮 这里可以选择合适的 红色的按钮删除蓝色的用于修改。
Btn-danger红色, btn-primary 蓝色
加入背景图片
可以网络地址 加在body上 加图片的相关属性 改addpage
与输入表单有关的找输入框组 用到的输入框组选择合适的样式 然后设置按钮的样式. 使用br调整竖向距离。 最后可以加背景 updatepage页面
同addpage页面然后代码做修改. 代码实现 !DOCTYPE html
html langen xmlnshttp://www.w3.org/1999/html
headmeta charsetUTF-8title添加用户/titlelink hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.css relstylesheetscript srchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/js/bootstrap.bundle.js/script
/head
bodydiv classcontainer text-centerdiv classrowdiv classcol/divdiv classcolbr/br/h3注册页面/h3br/!--添加用户使用表单formaction提交地址(由谁处理--form action/user/add methodpostdiv classinput-group input-group-lgspan classinput-group-text用户名/spaninput typetext classform-control nameusername//divbr/div classinput-group input-group-lgspan classinput-group-text密nbsp;nbsp;nbsp;码/spaninput typetext classform-control namepassword//divbr/button typesubmit classbtn btn-outline-success注册/button/form/divdiv classcol/div/div
/div/body
/html
!DOCTYPE html
html xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8title显示用户/titlelink hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.css relstylesheetscript srchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/js/bootstrap.bundle.js/script/head
body div classcontainer text-centerdiv classrowdiv classcol/divdiv classcolbr/h1 classtext-center用户列表展示/h1br/table classtable table-bordered border-primarytr classtable-infobr/td classtable-infoid/tdtd classtable-info用户名/tdtd classtable-info用户密码/tdtd classtable-info操作/td/trtr th:eachitem:${myusers} classtable-infotd th:text${item.id} classtable-info/tdtd th:text${item.username} classtable-info/tdtd th:text${item.password} classtable-info/tdtdbutton typebutton th:onclick|ondel(${item.id})| classbtn btn-danger删除/buttonbutton typebutton th:onclick|onupdate(${item.id})| classbtn btn-primary修改/button/td/tr/table/divdiv classcol/div/div
/divscriptfunction onupdate(id){//修改不需要跳转显示原始信息window.location.href/user/orign?idid;}function ondel(id){//先确认是否删除answerconfirm(是否需要执行删除操作)if(answertrue){// 地址栏地址window.location.href/user/del?idid;}}
/script/body
/html
!DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8title更新页面/titlelink hrefhttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/css/bootstrap.css relstylesheetscript srchttps://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.3/js/bootstrap.bundle.js/script/head
body
div classcontainer text-centerdiv classrowdiv classcol/divdiv classcolbr/br/br/h3用户信息更新/h3br/br/form action/user/update methodpostinput typehidden th:value${oneuser.id} nameid/input typehidden th:value${oneuser.version} nameversion/div classinput-group input-group-lgspan classinput-group-text用户名/spaninput th:value${oneuser.username} nameusername//divbr/div classinput-group input-group-lgspan classinput-group-text密nbsp;nbsp;nbsp;码/spaninput th:value${oneuser.password} namepassword//divbr/br/button typesubmit classbtn btn-outline-dark更新/button/form/divdiv classcol/div/div
/div/body
/html