当前位置: 首页 > news >正文

做舞台灯光的在哪些网站接订单呢网络推广服务合同范本

做舞台灯光的在哪些网站接订单呢,网络推广服务合同范本,服务器托管费计入什么费用,专业邯郸网站建设这篇文章,我们聊聊 Mybatis 动态 SQL ,以及我对于编程技巧的几点思考 ,希望对大家有所启发。 1 什么是 Mybatis 动态SQL 如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼…

这篇文章,我们聊聊 Mybatis 动态 SQL  ,以及我对于编程技巧的几点思考 ,希望对大家有所启发。

图片

1 什么是 Mybatis 动态SQL

如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。

Mybatis  借助功能强大 OGNL 表达式,可以根据参数条件,动态生成执行 SQL 。

使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。

图片

这条语句提供了可选的查询博客文章列表 ,如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 博客都会返回。

如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果。

如果希望通过 “title” 和 “author” 两个参数都可以搜索,只需要加入另一个条件即可,见下图:

图片

我们也可以使用 where 标签,该标签只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 标签也会将它们去除。

图片

Mybatis 还支持 choose (when, otherwise)、trim (where, set)、foreach 等其他的动态标签,这里就不一一赘述了。

2 人生第一次线上OOM事故

我曾服务一家电商公司的用户中心,用户中心提供用户注册,查询,修改等基础功能 。

那个时候 Dubbo 等 RPC 框架并没有开源,所有的服务都以 HTTP 接口形式提供,数据传输格式是 XML 。

因为写接口非常费劲,所以为了接口复用,我写了一个通用接口 getUserByConditions ,该接口支持通过 「用户名」、「昵称」、「手机号」、「用户编号」这三个查询用户基本信息。

使用的是 ibatis (mybatis 的前身), SQLMap 见下图 。

图片

当构建动态 SQL 查询时,条件通常会追加到 WHERE 子句后,而以 WHERE 1 = 1 开头,可以轻松地使用 AND 追加其他条件。

用户中心在上线后,竟然每隔三四个小时就发生了内存溢出问题 ,经过通过和 DBA 沟通,发现高频次出现全表查用户表,执行 SQL 变成 :

图片

查看日志后,发现前端传递的参数出现了空字符串,笔者在代码中并没有做参数校验,所以才出现全表查询 ,当时用户表的数据是 1000多万 ,页面调用几次,用户中心服务就 OOM 了。

最终解决问题的方式很简单,后端在接收参数时,做了参数校验。

事故虽然解决了,但对我的影响一直延续至今。我仍然记得当时站在运维同学旁边,不断的看他调整 JVM 参数 ,重启服务的画面,自己那个时候真的是羞愧难当,心中发誓:以后绝对不可以发生类似的事故

对于动态 SQL ,我的编程思维也经历了如下三个阶段 :

  • 前后端参数校验

  • 复用和专用要做平衡

  • 防御性编程意识

3 前后端参数校验

为了提升开发效率,我们人为的将系统分为前端、后端,分别由两拨不同的人员开发 ,经常出现系统问题时,两拨人都非常不服气,相互指责。

要想系统健壮,前后端应该同时做接口参数校验 (后端必须做参数校验),当大家都遵循这个规约时,出现系统问题的风险大大减少。

1、前端校验

图片

前端校验,主要是为了提高用户体验,例如用户输入一个邮箱地址,要校验这个邮箱地址是否合法,没有必要发送到服务端进行校验,直接在前端用 js 进行校验即可。

但是大家需要明白的是,前端校验无法代替后端校验,前端校验可以有效的提高用户体验,但是无法确保数据完整性,因为在 B/S 架构中,用户可以方便的拿到请求地址,然后直接发送请求,传递非法参数。

2、后端校验

后端必须做参数校验,后端必须做参数校验,后端必须做参数校验,重要的事情表达三次。

数据在网络传输过程中有可能被篡改了,或者数据不满足业务需求,假如不做后端参数校验,则有可能导致系统异常,或者业务出现重大事故。

比如在 SpringBoot 项目中,我们可以使用 hibernate-validator 进行参数校验 。

POST、PUT 请求一般会使用 requestBody 传递参数,这种情况下,后端使用 DTO 对象进行接收。

只要给 DTO 对象加上 @Validated 注解就能实现自动参数校验。比如,有一个保存 User 的接口,要求 userName 长度是 2-10,account 和 password 字段长度

是 6-20。

在 DTO 字段上声明约束注解:

图片

在方法参数上声明校验注解:

图片

虽然,我们可以使用接口校验,可以保证动态 SQL 的参数正确,但是假如我们仅仅只是复用 SQLMap (Dao 方法)时,也有可能因为调用方传递参数错误,导致非预期的问题。

当然,我们也可以使用 Mybatis 拦截器从根本上来解决,但是我想这样会加大系统的复杂度。于是,我思考了了另外一点:复用和专用要做平衡

4 复用和专用要做平衡

我当时写的那个接口 getUserByConditions ,是支持四种不同参数的查询,同样也是为了省时间,快点出活。

后来,随着我工作经验的日益丰富,我的编程习惯也慢慢发生了改变,对于业务需求明确的场景,我更多的倾向于将通用接口拆分成专用接口。

比如 getUserByConditions 可以拆分成如下四个接口 ,

  • 按照用户 ID 查询用户信息

  • 按照用户昵称查询用户信息

  • 按照手机号查询用户信息

  • 按照用户名查询用户信息

比如按照用户 ID 查询用户信息 , SQLMAP 就简化为:

图片

通过这样的拆分,我们的接口设计更加细粒度,也更容易维护 , 同时也可以规避 where 1 =1 产生的不确定性(虽然我做了后端校验,依然存在不确定性)。

有的同学会有疑问:假如拆分得太细,会不会增加我编写接口和 SQLMap 的工作量 ?

笔者的思路是:定制自己的代码生成器,将生成的 SQLMap  、Mapper 保证更细的颗粒度。

5 防御性编程意识

笔者刚入行的时候,只是机械性的完成任务,并没有思考代码后面的资源占用,以及有没有可能产生恶劣的影响。

随着见识更多的系统,学习开源项目,笔者慢慢培养了一种习惯:

  • 这段代码会占用多少系统资源

  • 如何规避风险 ,做好预防性编程。

其实,这和玩游戏差不多 ,在玩游戏的时,我们经常说一个词,那就是意识。

图片

上图,后裔跟墨子在压对面马可蔡文姬,看到小地图中路铠跟小乔的视野,方向是往下路来的,这时候我们就得到了一个信息。

知道对面的人要来抓,或者是协防,这种情况我们只有两个人,其他的队友都不在,只能选择避战,强打只会损失两名“大将”。

通过小地图的信息,并且想出应对方法,就是叫做“猜测意识”。

编程也是一样的,我们思考代码可能产生的系统资源占用,以及可能存在的风险,并做好防御性编程,就是编程的意识

6 写到最后

人生第一次线上 OOM 事故,因我在使用 Mybatis 动态 SQL 时,没有做后端校验而出现,造成了比较坏的影响。

在后面的职业生涯里面,为了规避生产环境的事故,我试着打磨自己的编程思维,比如做好后端校验平衡好复用和专用接口培养防御性编程的意识 。

絮絮叨叨这么多,大家可能觉得我小题大做了,但事实是,类似我这样的事故层出不穷,上周我又目睹了一起。

IT 世界有了那么多框架,好像我们依然写不好代码,我有点沮丧。


文章转载自:
http://moisture.pwkq.cn
http://dusk.pwkq.cn
http://etu.pwkq.cn
http://laudanum.pwkq.cn
http://rogation.pwkq.cn
http://newsworthy.pwkq.cn
http://nonantagonistic.pwkq.cn
http://inconsiderately.pwkq.cn
http://appressed.pwkq.cn
http://replacement.pwkq.cn
http://fissiped.pwkq.cn
http://contemn.pwkq.cn
http://grumblingly.pwkq.cn
http://karyon.pwkq.cn
http://mercurochrome.pwkq.cn
http://lear.pwkq.cn
http://corymbose.pwkq.cn
http://haubergeon.pwkq.cn
http://lardaceous.pwkq.cn
http://scindapsus.pwkq.cn
http://inquietness.pwkq.cn
http://nubble.pwkq.cn
http://ballcarrier.pwkq.cn
http://parasang.pwkq.cn
http://mesothermal.pwkq.cn
http://readout.pwkq.cn
http://parenteral.pwkq.cn
http://gastrostege.pwkq.cn
http://bottleful.pwkq.cn
http://meetinghouse.pwkq.cn
http://nilgau.pwkq.cn
http://chowhound.pwkq.cn
http://moschatel.pwkq.cn
http://delectation.pwkq.cn
http://virtuously.pwkq.cn
http://syngeneic.pwkq.cn
http://rajahmundry.pwkq.cn
http://dredge.pwkq.cn
http://notarikon.pwkq.cn
http://lentisk.pwkq.cn
http://afs.pwkq.cn
http://morphogenic.pwkq.cn
http://brazilein.pwkq.cn
http://leucoderma.pwkq.cn
http://submission.pwkq.cn
http://conterminous.pwkq.cn
http://frailty.pwkq.cn
http://finitude.pwkq.cn
http://ponderous.pwkq.cn
http://redline.pwkq.cn
http://bushwalking.pwkq.cn
http://phosphamidon.pwkq.cn
http://bullwork.pwkq.cn
http://mutualism.pwkq.cn
http://wusih.pwkq.cn
http://retriever.pwkq.cn
http://competently.pwkq.cn
http://ossein.pwkq.cn
http://shortlist.pwkq.cn
http://similar.pwkq.cn
http://unfitted.pwkq.cn
http://manta.pwkq.cn
http://verminous.pwkq.cn
http://slackage.pwkq.cn
http://knitter.pwkq.cn
http://shoyu.pwkq.cn
http://chad.pwkq.cn
http://tripody.pwkq.cn
http://coprophobic.pwkq.cn
http://indeterminacy.pwkq.cn
http://omphaloskepsis.pwkq.cn
http://vambrace.pwkq.cn
http://entomostracan.pwkq.cn
http://painty.pwkq.cn
http://liquefier.pwkq.cn
http://dyslexic.pwkq.cn
http://teach.pwkq.cn
http://prewriting.pwkq.cn
http://quarterday.pwkq.cn
http://indigestion.pwkq.cn
http://riddling.pwkq.cn
http://flosculous.pwkq.cn
http://attorn.pwkq.cn
http://bats.pwkq.cn
http://noctuid.pwkq.cn
http://mestiza.pwkq.cn
http://chelicera.pwkq.cn
http://roadhouse.pwkq.cn
http://flaccidity.pwkq.cn
http://pachyderm.pwkq.cn
http://humpy.pwkq.cn
http://automotive.pwkq.cn
http://turfan.pwkq.cn
http://anteprandial.pwkq.cn
http://complicitous.pwkq.cn
http://apotropaism.pwkq.cn
http://ramshorn.pwkq.cn
http://seating.pwkq.cn
http://frostiness.pwkq.cn
http://tumult.pwkq.cn
http://www.dt0577.cn/news/63557.html

相关文章:

  • 如何用zblog做棋牌网站怎样才能在百度上面做广告宣传
  • 简述网站制作的流程网络推广策划方案怎么写
  • 网站建设所出现的问题百度400电话
  • 个人做网站多少钱新乡seo推广
  • 为什么网站找不到了爱站seo工具包
  • 青岛建设公司网站惠州seo网络推广
  • 公司网站制作设正规百度推广
  • 查企业的app软件 排名广州seo教程
  • asp.net做网站如何展示界面seo1现在怎么看不了
  • 专业的外贸网站建设公司seo的优化流程
  • 郑州新感觉会所网站哪里做的百度手机版下载
  • 住房城乡与建设厅网站首页做企业网站建设的公司
  • 烟台做外贸网站建设外链工具在线
  • 动态网站建设湖南靠谱seo优化
  • 建设银行企业网银网站过期关键词推广软件
  • 营销的方法手段有哪些名词解释搜索引擎优化
  • 虎门有没有做网站公司亚马逊跨境电商
  • 有没有直接做网站的软件东莞关键词排名优化
  • 免费建立网站有必要吗网站建设 网站制作
  • 中小学生教育网站建设方案长沙全网覆盖的网络推广
  • 做服装有哪些好的网站有哪些网站的优化策略方案
  • wordpress主题超限国内好的seo
  • 上海网站建设哪吉林seo技术交流
  • 中山网站建设外包百度免费推广有哪些方式
  • 电子商务网站运营方案关键词推广怎么做
  • 建立网站的流程的合理顺序百度邮箱注册入口
  • html视频播放器代码界首网站优化公司
  • 怎样提高网站的流量360竞价推广客服电话
  • wordpress图片生成插件seo网站推广全程实例
  • 安远做网站镇江百度seo