DevExperience(1712)

【1】在 DML 或 DDL 语句中,不要添加 数据库表前缀: 因为开发环境的数据库表名 和 生产环境的数据库表名 有可能不一样; 这个时候就有可能报 SQL 异常;造成生产事故;
不推荐: select * from db_name.tbl_name where ....
推荐: select * from tbl_name 
当然了,也有可能开发环境的数据库表名 与 ST测试环境 或 UAT测试环境的 数据库表名 不一致;但这种错误都是可以在 测试阶段测试出来的。但是一旦项目上了生产环境,你就不能改了。

【2】对于开启数据库事务的操作: 特别要注意事务回滚。
设想这样一个场景:
有个班级表 class_tbl, 学生表 stu_tbl, 班级表有字段 学生数量 stu_num; 当执行删除学生操作时,要级联更新班级的学生数量 stu_num,其中通过学生来查询需要更新的班级。 
方法1)先执行删除学生操作, 然后通过学生(多)查询班级(一)并更新班级的 学生数量: 这个时候,更新操作不会成功,因为更新时 需要通过学生来查询需要更新哪个班级,但是学生记录又被您先删除了,所以更新失败。。这个时候,更新失败,事务回滚,被删除的学生又恢复了(没有删除)。。

所以这个时候就有一个奇怪的现象: 数据库当中明明有 这个学生记录(事务回滚后,该学生从删除状态恢复到在库状态),那为什么无法通过该学生 去级联更新班级的学生数量呢 ?? 那是因为你更新操作前,先在同一个事务中删除了这个学生,所以这个学生是不存在的,无法执行级联更新。。然后事务回滚,学生在数据库中又没有被删除。。。。然后你就陷入了 泥潭,久久无法自拔啊。。。

方法2)先通过学生(多)查询班级(一)并更新班级的 学生数量,再 执行删除学生操作(推荐):   这种方法的更新班级的学生数量 和 删除 学生记录 的方法是比较好的,不会出现方法1那种 奇怪的情况;


【总结】有减必有加,所以当你 新增学生的时候,同样的道理: 就要先执行更新学生数量操作,然后再执行新增学生操作;因为上述两个操作都在同一个事务中,一旦发生异常,事务回滚,数据库保持操作前后的数据一致性;


【3】关于数据分表权限拆分

1) 以四川省内的地级市 和 县级市为荔枝: 首先数据库表通过 地级市来分表,每个地级市一张表,如成都市的数据库表后缀suffix都是028,达州市的数据库表后缀是 0818;
每个表有字段 行政市id city_id 字段 用于存储市编号,如 tbl_*_028 的 city_id=028;
2)设想这样一种场景:因为成都天府国际机场修在简阳市,所以作为县级市的简阳市,其所有数据都挂在了 成都028的数据库表上,但通过 city_id=1214(假设简阳的区号是1214)来标识它是简阳的数据;
3)数据权限拆分需求: 地级市的用户可以查看 地级市 和 旗下所有县级市的数据,而县级市只能查看自己的县级市的数据,不能查看其它县级市的数据:
只需要通过比较 数据库表后缀suffix 与 city_id 是否相等来判断:
若两者相等,则表示地级市;
若两者不相等,则表示县级市;

【注意】上述数据权限拆分策略非常简单,只需要使用 mybatis 的 if 标签来判断就可以了;


【4】




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)

转载自 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去。 常见类型包括LFU、LRU、ARC、FIFO、MRU。最不经常使用算法(LFU): 这个缓存算法使…

动态资源Servlet接口

1.Servlet接口的作用 Servlet是运行在Web服务器上的应用程序。Servlet本身是一个Java接口&#xff0c;它定义了浏览器访问服务器程序的规则&#xff0c;我们写服务器程序只需要按照需求复写Servlet方法即可 2.Servlet的体系结构 <1>直接继承实现类结构 <2>其他…

thinking-in-java(14)类型信息

【0】开场白 1&#xff09;运行时类型信息使得你可以在程序运行时发现和使用类型信息&#xff1b;2&#xff09;java是如何在运行时识别对象和类信息的&#xff1f;两种方式&#xff1a; 方式1&#xff09;传统的RTTI&#xff08;RunTime Type Identification 运行时类型定义&a…

服务降级的概念及应用手段

转载自 服务降级的概念及应用手段什么是服务降级 服务降级&#xff0c;就是对不怎么重要的服务进行低优先级的处理。说白了&#xff0c;就是尽可能的把系统资源让给优先级高的服务。资源有限&#xff0c;而请求是无限的。如果在并发高峰期&#xff0c;不做服务降级处理&#xf…

Servlet其他关联类---ServletConfig类

1.ServletConfig介绍 a.ServletConfig是Servlet的配置参数对象&#xff0c;在Servlet的规范中&#xff0c;允许为每一个Servlet都提供一些初始化的配置。所以&#xff0c;每个Servlet都有一个自己的ServletConfig b.作用:在Servlet的初始化时&#xff0c;把一些配置信息传递给…

thinking-in-java(19)枚举类型

【0】开场白 1&#xff09;关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型&#xff0c;而这些具名的值可以作为常规的程序组件使用&#xff1b;2&#xff09;所有的枚举类都继承自 Enum&#xff0c;通过 enumClass.getSuperclass() class java.lang.Enum 得知。…

8条关于Web前端性能的优化建议

转载自 8条关于Web前端性能的优化建议 一般网站优化都是优化后台&#xff0c;如接口的响应时间、SQL优化、后台代码性能优化、服务器优化等。高并发情况下&#xff0c;对前端web优化也是非常重要的。 下面说说几种常见的优化措施。 1、HTML CSS JS位置 一般需要将CSS放页面最上…

Servlet其他关联类---ServletContext类

1.ServletContext介绍 <1>域对象 域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象&#xff0c;共享数据的能力也不一样。在Servlet规范中&#xff0c;一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最…

分布式Session共享解决方案

转载自 分布式Session共享解决方案 Session是服务器用来保存用户操作的一系列会话信息&#xff0c;由Web容器进行管理。单机情况下&#xff0c;不存在Session共享的情况&#xff0c;分布式情况下&#xff0c;如果不进行Session共享会出现请求落到不同机器要重复登录的情况&…

thinking-in-java(20)注解

【1】注解介绍 1&#xff09;注解是什么&#xff1f; 注解&#xff08;元数据&#xff09;是 java提供的一种对程序元素&#xff08;如类&#xff0c;方法&#xff0c;变量&#xff09;打标记的方法&#xff1b;以便运行程序或编译器可以识别这些元素进行特殊处理&#xff1b…

Servlet---注解开发

1.引入 在Servlet3.0以后的版本提供了Servlet注解配置&#xff0c;大大简化了代码编写。它可以替代xml文件的配置 2.代码实现 <1>注解开发代码如下&#xff1a; WebServlet(value "/servlet1", initParams {WebInitParam(name "charset", val…

Git操作常用的命令都在这里了

转载自 Git操作常用的命令都在这里了 创建仓库 git init 在当前目录执行&#xff0c;会生成 .git目录文件&#xff0c;这个和SVN一致。 提交到仓库 git commit -m "first commit" -m&#xff1a;表示提交描述&#xff0c;必须要填。 添加到远端仓库 git remote …

DevExperience(1801)

【1】 关于路径和文件名命名规范&#xff1a;1&#xff09;window 操作系统 的路径名和文件名是不区分大小写的&#xff0c;Linux等其他操作系统都区分大小写的&#xff1b;2&#xff09;某些部署在 Linux系统的项目&#xff0c;其路径名和文件名建议均用小写&#xff1b;不然一…

web项目的创建和发布

1.Web项目的目录结构 2.Web项目的创建 <1>首先创建一个空的java项目 <2>选择模块,创建一个新模块 <3>选择javaq企业开发块,先勾选javaEE版本再勾选下方的Web Application才会出现对应的版本 <4>一路next之后给模块取名点击finish,再点击Apply后ok则…

telnet实现本地回显

下面以访问 localhost:8080 站点为荔枝说明如何设置 telnet的回显&#xff1b;1&#xff09;操作系统命令行输入 telnet localhost 8080 回车&#xff1b;2&#xff09;同时键入 ctrl 和 ] 键&#xff0c;进入 telnet 命令行&#xff1b;3&#xff09;记不住 telnet 命令的童鞋…

DevOps到底是什么鬼?DevOps介绍及工具推荐

转载自 DevOps到底是什么鬼&#xff1f;DevOps介绍及工具推荐 什么是DevOps DevOps是Development和Operations的组合&#xff0c;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xf…

请求对象Request

1.概念 <1>请求&#xff1a;请求:获取资源。在BS架构中&#xff0c;就是客户端浏览器向服务器端发出询问。 <2>请求对象&#xff1a;就是在项目当中用于发送请求的对象。 <3>对象创建&#xff1a;需要实现ServletRequest和HttpservletRequest接口&#xff0…

Oracle-26-内连接(等值、不等值连接、自然连接)外连接(左外、右外、全连接)using子句

转自&#xff1a; http://blog.csdn.net/wy_0928/article/details/51155498 【总结】连接分类 【0】什么是数据库连接&#xff1f; 1&#xff09;当一次查询涉及到两个表时&#xff1a;就要使用连接查询了&#xff0c;其中join如果不带有其他标识&#xff0c;则默认是内连接 …

百度分布式配置管理平台-Disconf

转载自 【推荐】百度分布式配置管理平台-DisconfDisconf介绍 全称&#xff1a;Distributed Configuration Management Platform&#xff0c;即分布式配置管理平台。 Disconf专注于各种分布式系统配置管理的通用组件和通用平台, 提供统一的配置管理服务。主要目标&#xff1a; 部…

运算符优先级的问题

注意&#xff1a;逻辑非>逻辑与>逻辑或