网站功能简介淘宝优惠券查询网站怎么做

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

网站功能简介,淘宝优惠券查询网站怎么做,网页模板素材,用ps做网站的临摹一、引言 目前互联网大厂在搭建后端Java服务时#xff0c;常使用Springboot搭配Mybatis/Mybatis-plus的框架。Mybatis/Mybatis-plus之所以能成为当前国内主流的持久层框架#xff0c;与其本身的优点有关#xff1a;支持定制动态 SQL、存储过程及高级映射#xff0c;简化数…一、引言 目前互联网大厂在搭建后端Java服务时常使用Springboot搭配Mybatis/Mybatis-plus的框架。Mybatis/Mybatis-plus之所以能成为当前国内主流的持久层框架与其本身的优点有关支持定制动态 SQL、存储过程及高级映射简化数据库操作。 可能有人会问 为什么要用动态SQL在开发过程中把SQL写死不是比较方便、更加不容易出错吗其实这是由开发过程中具体业务需求决定的比如在用户注册场景下用户注册填写信息时会有必填字段和非必填字段不同用户注册时传给后端的参数有区别对应的插入用户表的SQL也不一样因此在这些的场景下开发人员需要使用动态SQL来完成。本文首先介绍Springboot项目中SQL映射方式最后介绍动态SQL和支持动态SQL的核心标签。 欢迎关注工 众号ItBeeCoder查看更多高质量技术文章发送“后端”获取资料 二、SQL映射方式 1、XML映射文件该文件通常位于 resources/自定义的包路径/mapper 目录。 示例 !– UserMapper.xml –mapper namespacecom.example.UserMapperselect idselectUserById resultTypeUserSELECT * FROM user WHERE id #{id}/select/mapper2、注解映射 适用场景简单 SQL 可直接在接口方法上使用注解。 示例 public interface UserMapper {Insert(INSERT INTO user(name) VALUES(#{name}))Options(useGeneratedKeys true, keyProperty id)void insertUser(User user);}欢迎关注工 众号ItBeeCoder查看更多高质量技术文章发送“后端”获取资料 三、动态SQL及常用标签 在 MyBatis中动态SQL允许开发人员根据不同的条件构建不同的 SQL 语句。执行原理为使用OGNL从SQL参数对象中计算表达式的值根据表达式的值动态拼接SQL以此来完成动态SQL的功能。动态SQL中常用的核心标签有、、、、、等。 1、动态 SQL 以下SQL为XML文件中复杂动态SQL的示例 select idsearchUsers resultTypeUserSELECT * FROM userwhereif testname ! nullAND name LIKE CONCAT(%, #{name}, %)/ifif testroles ! nullAND role INforeach itemrole collectionroles open( separator, close)#{role}/foreach/if/where/select2、常用标签 1if 标签 a用途条件判断满足条件时包含 SQL 片段。 b示例 select idfindUser resultTypeUserSELECT * FROM userWHERE 11if testname ! nullAND name #{name}/if/select2where 标签 a用途自动添加 WHERE 关键字并去除首条多余的 AND/OR。 b示例 select idselectByStudent resultMapBaseResultMap parameterTypecom.xxx.entity.Studentselectinclude refidBase_Column_List /from studentwhereif testname ! null and name !and name like concat(%, #{name}, %)/ifif testsex ! nulland sex#{sex}/if/where/select说明以上SQL中当条件都不满足时此时 SQL 中应该要不能有 where 否则导致出错。当 if 有条件满足时SQL 中需要有 where 且第一个成立的 if 标签下的 and | or 等要去掉这时候我们可以使用 where 标签。 3set 标签 a用途主要用于SQL的UPDATE命令中自动添加 SET 关键字并去除末尾多余的逗号。 b示例 update idupdateUserUPDATE usersetif testname ! nullname #{name},/ifif testage ! nullage #{age},/if/setWHERE id #{id}/update4foreach 标签 a用途遍历集合如 IN 查询、批量插入。 b该标签的属性 - collection集合参数名。- item遍历元素的变量名。- open/close包裹结果的前缀/后缀。- separator元素间的分隔符。c示例 !– IN 查询 –SELECT * FROM user WHERE id INforeach itemid collectionids open( separator, close)#{id}/foreach!– 批量插入 –INSERT INTO user (name) VALUESforeach itemuser collectionlist separator,(#{user.name})/foreach注意在使用标签时最好在标签前加上标签判断列表是否为null或者有数据如果列表没数据不加标签直接使用标签会报错。第一个查询SQL的动态SQL建议写法 SELECT * FROM user if test ids ! null and ids.size 0WHERE id IN foreach itemid collectionids open( separator, close)#{id} /foreach /if5choose/when/otherwise 标签 a用途多条件分支功能类似于switch-case。 b示例 select idfindUser resultTypeUserSELECT * FROM userwherechoosewhen testname ! nullAND name #{name}/whenwhen testemail ! nullAND email #{email}/whenotherwiseAND is_active 1/otherwise/choose/where/select6trim 标签 a用途自定义字符串修剪可替代 标签 或 标签。 b属性 - prefix添加前缀。- prefixOverrides去除首部匹配的字符。- suffix添加后缀。- suffixOverrides去除尾部匹配的字符。c示例 !– 替代 where –trim prefixWHERE prefixOverridesAND |OR if testname ! null and name ! AND name #{name} /if/trim!– 替代 set –trim prefixSET suffixOverrides,if testname ! nullname #{name},/if/trim7bind 标签 a用途创建变量并绑定到上下文用于复杂表达式或重复逻辑。 b示例 select idsearchUserbind namepattern value% keyword % / !– 拼接模糊查询参数 –SELECT * FROM userWHERE name LIKE #{pattern}/select欢迎关注工 众号ItBeeCoder查看更多高质量技术文章发送“后端”获取资料 四、使用注意事项 1OGNL表达式中test 属性中使用的表达式语言支持复杂逻辑例如, !, , || 等操作。例如 if testname ! null and name ! !– 同时检查非空和非空字符串 –2参数处理 mapper接口中抽象方法的集合参数需通过 Param 命名 ListUser findUsersByIds(Param(ids) ListInteger ids);空值检查需显式处理如 testname ! null and name ! 。 3动态 SQL 性能避免写过度复杂的动态SQL过度复杂的SQL可能影响数据库执行计划导致查询性能差。 4动态表名/列名不建议使用 \({}建议使用#{}以防止 SQL 注入。 5在Springboot搭配使用Mybatis时为了能将Mapper接口上加了Mapper或Dao的Bean注入到spring容器中需要在启动类中添加MapperScan注解MapperScan注解中的包路径名称为mapper接口的路径。如下所示 SpringBootApplicationMapperScan(com.example.mapper)public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);// 其它业务代码}}欢迎关注工 众号ItBeeCoder查看更多高质量技术文章发送“后端”获取资料 五、一些最佳实践 1、在Mybatis的XML文件中对于某些频繁用到的SQL为了避免重复写以及重复写导致的出错可以引用某个常用的SQL如下即为引用SQL的做法 sql idall select * from user /sqlselect idselectUserByUid resultTypeuser include refidall/ where uid #{uid} /selectselect idselectIf resultTypeuser include refidall/ where if testusername ! null username #{username} /if /where /select2、判断list集合是否包含指定数据 if testlist.contains(0) #{逻辑} /if3、XML的SQL中比较符号的写法 gt 对应 gte 对应 lt 对应 (会报错 相关联的 test 属性值不能包含 字符) lte 对应 (会报错 相关联的 test 属性值不能包含 字符) ![CDATA[ sql 语句 ]] ![CDATA[ ]]4、MyBatis的XML中使用内部类的方式 内部类需要使用\)符号连接而不是点.以下为正确写法 com.xxx.model.SMSESBResult\(ReceiveResult\)ResultInfo六、写在最后的话 总之MyBatis的动态SQL功能允许开发者根据不同条件灵活构建SQL语句避免手动拼接字符串另外常用查询列和查询SQL还可以借助动态SQL实现复用提高XML中SQL代码的可维护性和安全性。 欢迎关注工 众号ItBeeCoder查看更多高质量技术文章发送“后端”获取资料 又到了金三银四求职季我整理了一些互联网大厂的面试题有需要的可关注工 众号ItBeeCoder发送“后端”获取