做资源网站违法吗网络系统工程师

张小明 2025/12/26 3:11:56
做资源网站违法吗,网络系统工程师,购物网站开发的目的意义,wordpress获取文章简介一、动态SQL 动态SQL是Mybatis的强⼤特性之⼀#xff0c;能够完成不同条件下不同的sql拼接 可以参考官⽅⽂档#xff1a;Mybatis动态SQL 1.1动态 SQL 的if标签用法 #xff08;1#xff09;为什么要用动态 SQL#xff1f; 在业务场景中#xff08;比如注册用…一、动态SQL动态SQL是Mybatis的强⼤特性之⼀能够完成不同条件下不同的sql拼接可以参考官⽅⽂档Mybatis动态SQL1.1动态 SQL 的if标签用法1为什么要用动态 SQL在业务场景中比如注册用户存在必填字段比如用户名、密码和非必填字段比如性别、生日。如果直接写固定 SQL非必填字段没传值时会出现两种问题要么 SQL 语法错误比如多了逗号要么把数据库字段的默认值覆盖成null如果字段有默认值的话。所以 MyBatis 的动态 SQL 可以根据参数是否存在自动拼接 / 忽略对应的 SQL 片段。2if标签的核心逻辑if test条件.../if表示当test里的条件满足时才会把if包裹的 SQL 片段拼接到最终 SQL 中。以 “注册用户” 为例gender是非必填字段所以用if判断当传入的userInfo对象中gender ! null时才拼接gender对应的字段和值当gender null时自动忽略这部分 SQL。3代码示例拆解以 “插入用户” 的insertUserByCondition为例1. 接口定义这里传入的UserInfo是包含所有字段必填 非必填的实体类。2. Mapper.xml 中的if用法当gender有值最终拼接的 SQL 是当gender为null最终拼接的 SQL 自动忽略gender相关片段3. 注解方式不推荐也可以用Insert注解 script标签写动态 SQL但可读性差所以一般不用关键注意点test里的表达式是 “实体类属性”不是数据库字段比如testgender ! null中的gender是UserInfo类的属性名不是数据库表的列名。为什么不能直接写null如果不判断直接写gender字段当传值为null时若数据库中gender字段有默认值比如默认 “未知”会被null覆盖若字段允许null虽然语法没问题但不符合 “非必填则用默认值” 的业务逻辑。列名部分的if判断哪个字段要插入VALUES 值部分就必须用完全相同的if判断否则会出现 “列名和值数量不匹配” 的 SQL 语法错误。1.2动态SQL的trim标签用法1trim标签的作用当需要动态生成多个字段 / 条件时比如插入语句的列名、VALUES 值或者查询的 WHERE 条件trim可以通过属性自动处理 “前缀 / 后缀” 和 “多余符号”避免手动拼接 SQL 的冗余问题。2trim的 4 个核心属性属性名作用prefix给整个语句块添加一个前缀比如给列名块加(给 VALUES 加(suffix给整个语句块添加一个后缀比如给列名块加)给 VALUES 加)prefixOverrides自动去掉语句块开头的指定符号比如多余的AND/ORsuffixOverrides自动去掉语句块结尾的指定符号比如多余的逗号,3案例动态插入语句的trim用法以 “插入用户信息多字段动态可选” 为例解析trim的实际作用1. 动态生成 “插入列名”2.只传 agephoneusername/password 没传拼接后 SQL适配 “只补全用户联系方式” 的业务场景不用强制传用户名密码避免了 “没传的字段被插入 NULL” 的问题。trimif 动态插入的核心规则判断一致列名if判断哪个字段要插入 → VALUESif必须用完全相同的 test 条件字段名、非空判断都一致保证 “列数 值数”符号统一列名trim用了什么prefix/suffix比如()→ VALUEStrim也用完全一样的保证 SQL 语法对称逗号兜底所有if结尾都加,→ 统一靠trim的suffixOverrides,去掉最后一个冗余逗号不用手动判断 “最后一个字段要不要加逗号”。反例踩坑点如果违背这个规则比如列名判断username ! nullVALUES 判断userName ! null大小写不一致→ 可能导致列名有但值无SQL 报错列名trim加()VALUEStrim漏加 → 生成INSERT INTO user_info (username) VALUES #{username}语法错误手动控制逗号比如最后一个if不加,→ 字段顺序变动时容易少逗号 / 多逗号。拓展trim 不止用于插入还能用于查询比如动态 WHERE 条件去掉多余的 AND/OR逻辑prefixWHERE加前缀prefixOverridesAND | OR去掉开头多余的 AND/OR最终生成SELECT * FROM user_info WHERE username #{username} AND age #{age}。简单说只要是 “动态拼接 SQL 块需要补前后缀 / 清冗余符号”trimif 都是最优解核心就是 “判断对称、符号对称、冗余交给 trim 处理”。1.3动态SQL的where标签用法1where标签的作用当需要动态组装查询条件比如根据入参非空情况拼接 WHERE 子句时where可以自动处理两个核心问题自动补 WHERE 关键词只有当子元素比如if有内容时才会插入WHERE自动去冗余 AND/OR如果条件块开头是AND或OR会自动去掉避免 SQL 语法错误。2案例动态查询条件的实现以 “根据用户对象的非空属性查询” 为例看where的实际效果原始需求入参UserInfo对象中非 null 的属性作为查询条件比如入参age18、gender1则查询条件为WHERE age18 AND gender1。代码逻辑Mapper.xml3不同场景下的最终 SQL 效果场景 1入参age18、gender1两个条件非空MyBatis 解析后生成的 SQLwhere的作用子元素有内容 → 插入WHERE第一个条件开头的and→ 自动去掉最终条件块为WHERE age18 AND gender1语法正确。场景 2入参只有deleteFlag0一个条件非空最终生成的 SQLwhere的作用去掉条件开头的and插入WHERE。场景 3入参所有属性为 null无查询条件最终生成的 SQLwhere的作用子元素无内容 → 不插入WHERE避免生成WHERE后无条件的语法错误。4where与trim的关系where本质是trim的 “语法糖”可以用trim手动实现相同逻辑但trim有个小缺点当子元素无内容时会保留WHERE关键词比如场景 3 会生成from userinfo WHERE导致 SQL 语法错误。因此where是动态 WHERE 条件的更优选择自动处理空条件 去冗余 AND/OR。核心总结where的价值是 “智能拼接 WHERE 条件”有条件 → 补WHERE 去开头的 AND/OR无条件 → 不补WHERE避免语法错误替代手动拼接让动态查询更简洁、安全。维度where标签trim标签核心定位专门解决「动态 WHERE 条件」拼接问题通用型标签解决各类 SQL 块的拼接问题插入 / 查询 / 更新自动补前缀仅补WHERE仅当子元素有内容时可自定义前缀如WHERE/SET/(等自动去冗余符号仅去掉开头的AND/OR可自定义去掉「开头 / 结尾」的任意符号如AND/,/OR等空条件处理子元素无内容 → 不生成WHERE无语法错误子元素无内容 → 仍会生成自定义前缀如prefixWHERE会导致WHERE无后续条件报错等价trim写法trim prefixWHERE prefixOverridesANDOR无固定等价写法按需配置prefix/suffix/prefixOverrides/suffixOverrides典型使用场景动态查询的 WHERE 条件拼接最常用1. 动态插入的列名 / VALUES 拼接去结尾逗号2. 动态更新的 SET 子句去结尾逗号3. 自定义复杂拼接规则优势专为 WHERE 条件设计无需手动配置更简洁通用性强适配所有动态 SQL 拼接场景劣势功能单一仅能处理 WHERE 条件需手动配置属性空条件场景需额外判断优先用where的场景只要是「动态组装 WHERE 查询条件」优先选where无需配置属性自动处理空条件 冗余 AND/OR不易出错。必须用trim的场景动态插入拼接列名 / VALUES去结尾逗号动态更新拼接 SET 子句如trim prefixSET suffixOverrides,需要自定义前缀 / 后缀 / 冗余符号比如拼接 IN 条件的括号。避坑点用trim模拟where时一定要加额外判断比如if兜底避免子元素无内容时生成WHERE关键词导致 SQL 报错。示例trim模拟where并兜底避免空条件1.4动态SQL的set标签用法(1)set标签的作用在动态UPDATE语句中set可以自动处理两个关键问题自动补SET关键词仅当子元素比如if有内容时才插入SET自动删冗余逗号如果更新字段列表的结尾有多余的逗号,会自动去掉避免 SQL 语法错误。(2)案例动态更新用户数据以 “根据用户对象非空属性更新数据ID 为更新条件” 为例看set的实际效果需求入参UserInfo对象中非 null 的属性作为更新字段必须传入id定位要更新的用户比如入参usernamenewName、age20则更新 SQL 为update userinfo set usernamenewName, age20 where id?。代码逻辑Mapper.xml(3)不同场景下的最终 SQL 效果场景 1入参usernamenewName、age20两个字段非空生成的 SQLset的作用子元素有内容 → 插入SET去掉字段列表结尾的冗余逗号第二个字段age20后的逗号被自动删除。场景 2入参只有deleteFlag1一个字段非空生成的 SQLset的作用去掉delete_flag1后的逗号避免生成set delete_flag1,的语法错误。场景 3入参只有id无更新字段其他属性为 null生成的 SQL注意这种情况会触发 SQL 语法错误update后无SET子句实际开发中需要加兜底判断比如确保至少有一个更新字段非空。(4)set与trim的关系set是trim的 “语法糖”可以用trim手动实现相同逻辑prefixset→ 补SET关键词suffixOverrides,→ 去掉结尾的冗余逗号。但set是专门为UPDATE语句设计的写法更简洁优先推荐使用。(5)核心总结set的价值是 “智能拼接 UPDATE 的 SET 子句”有更新字段 → 补SET 去结尾逗号写法简洁避免手动控制逗号导致的语法错误实际开发中需加 “至少一个更新字段非空” 的判断避免场景 3 的语法错误。1.5动态SQL的foreach标签用法1foreach的核心属性属性名作用collection绑定方法入参的集合 / 数组如List/Set/ 数组需与方法参数名一致item遍历过程中集合的每个元素的别名用于 SQL 中引用open遍历结果的开头拼接的字符串如IN条件的左括号(close遍历结果的结尾拼接的字符串如IN条件的右括号)separator遍历元素之间的分隔符如IN条件的逗号,2案例批量删除用户根据多个 ID以 “根据ListInteger ids删除多个用户” 为例解析foreach的效果接口方法Mapper.xml 代码3最终 SQL 效果若入参ids [1,2,3]foreach会动态拼接为open(→ 开头加(close)→ 结尾加)separator,→ 元素间加逗号itemid→ 每个元素用#{id}引用。4foreach的其他常见场景除了IN条件foreach还常用于批量插入若入参是包含 2 个用户的List生成 SQL5核心总结foreach是 MyBatis 实现集合 / 数组动态拼接 SQL的核心标签通过collection/item/open/close/separator的组合可灵活适配IN条件、批量操作等场景避免手动拼接集合元素的繁琐与错误。1.6动态SQL的include标签的用法1问题背景SQL 片段重复的痛点在 Mapper.xml 中多个 SQL 语句常包含重复的片段比如查询时的字段列表、通用条件若直接重复编写代码冗余维护成本高修改字段需改所有 SQL易出错不同 SQL 中字段列表不一致。2核心标签sqlinclude通过 **sql定义可复用片段 ** include引用片段实现 SQL 代码的复用标签作用核心属性sql封装可复用的 SQL 片段id片段唯一标识include引用已定义的sql片段refid对应sql的id3案例复用查询字段列表以 “多个查询 SQL 复用相同的字段列表” 为例1. 定义 SQL 片段用sql2. 引用 SQL 片段用include将原来重复的字段列表替换为include4效果与优势代码复用重复的字段列表只需写一次减少冗余维护便捷若字段有变更比如新增email字段只需修改sql idallColumn中的内容所有引用该片段的 SQL 都会自动更新一致性确保所有查询 SQL 的字段列表完全一致避免漏写 / 错写字段。5拓展场景sqlinclude不仅可复用字段列表还能复用通用条件比如逻辑删除的delete_flag06核心总结includesql是 MyBatis 中SQL 代码复用的核心方案通过 “定义片段 引用片段” 的方式解决了重复 SQL 片段的冗余与维护问题是企业级开发中提升代码可维护性的常用技巧。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

cnnic可信网站必须做吗石岩做网站公司

FaceFusion人脸检测与分析技术详解 在AI内容创作领域,换脸技术早已不是新鲜事。但真正让人头疼的,从来不是“能不能换”,而是“换得自不自然”——边缘穿帮、表情僵硬、五官错位……这些问题背后,往往源于一个被忽视的关键环节&am…

张小明 2025/12/24 0:47:21 网站建设

路由器做网站终端青浦网站设计制作

本文基于QCon全球软件开发大会专家讨论,探讨AI时代工程师应对策略。专家认为AI是提升生产力的工具而非替代者,工程师应将其视为辅助伙伴,核心竞争力在于理解需求意图和解决问题能力。建议主动学习AI工具,培养求证习惯,…

张小明 2025/12/24 0:47:19 网站建设

百度医疗网站建设音乐网站如何建设的

C#中值类型和引用类型参数传递的区别 1. C#中的参数传递机制 在C#中,参数传递主要分为两种情况: 值类型传递 :传递的是变量的副本,方法内的修改不会影响原始变量。引用类型传递 :传递的是对象引用的副本,方…

张小明 2025/12/24 2:24:09 网站建设

磁县网站设计公司网站开发毕业设计开题报告

5步实现基于openpi框架的UR5机械臂AI控制完整指南 【免费下载链接】openpi 项目地址: https://gitcode.com/GitHub_Trending/op/openpi 工业机器人控制正迎来AI技术革命,传统示教编程难以应对复杂任务变化,而专用AI方案开发周期长、兼容性差。op…

张小明 2025/12/24 2:24:07 网站建设

做外贸电商网站设建网站

还在为深度强化学习训练缓慢而苦恼吗?同样的算法,为什么别人的模型在100个回合内就能收敛,而你的却需要300个回合?问题的核心可能就隐藏在经验回放机制中!本文将通过实战演练,带你掌握优先级经验回放&#…

张小明 2025/12/24 2:24:05 网站建设

火星免费建网站上海发布最新消息今天

PostCSS 是现代前端工程化中不可或缺的 CSS 处理工具。它本身不提供任何 CSS 扩展语法,而是通过插件系统实现代码分析、转换、优化和增强。本文将深入解析 PostCSS 的原理、核心能力、典型插件、工程配置,并厘清它与 Less、SCSS 等预处理器的本质区别与协…

张小明 2025/12/24 2:24:03 网站建设