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

深圳营销型企业网站蝉知cms

深圳营销型企业网站,蝉知cms,sem扫描电镜,本地网站模板修改目录 前言 一、MyBatis动态SQL 1.动态SQL是什么 2.动态SQL的作用 3.常用动态SQL元素 1. where if 元素 2. set if 元素 3. choose when otherwise 元素 4. 自定义 trim 元素 1. 自定义 trim 元素改写上面的 where if 语句 2. 自定义 trim 元素改…目录 前言 一、MyBatis动态SQL 1.动态SQL是什么 2.动态SQL的作用 3.常用动态SQL元素 1. where if 元素 2. set if 元素 3. choose when otherwise 元素 4. 自定义 trim 元素 1. 自定义 trim 元素改写上面的 where if 语句 2. 自定义 trim 元素改写上面的 set if 语句 5. foreach 元素 6.SQL片段重用 二、模糊查询的三种SQL方式、#和$的区别 三种模糊查询的方法是 1.使用#{字段名} 2.使用${字段名} 3.使用concat{%,#{字段名},%} #与$的区别  1.$ 符号sql拼接符号)  2. # 符号占位符)  四、MyBatis结果映射 映射场景 resultType进行结果映射 resultMap进行结果映射 总结 前言 在我们编写的sql语句的内容并不是固定的会通过一些条件判断拼接成最终符合要求的sql语句。 本篇所讲的动态SQL是mybatis通过标签元素的形式 如if, choose, when, otherwise, trim, where, set, foreach等标签完成对sql的拼接功能使用起来也非常灵活方便大大提高了开发人员的工作效率 一、MyBatis动态SQL 1.动态SQL是什么 动态SQL是一种根据不同条件动态生成SQL语句的技术。在MyBatis中我们可以使用动态SQL来根据不同的查询条件生成不同的SQL语句从而实现更灵活的查询。 2.动态SQL的作用 1. 条件查询通过动态SQL我们可以根据用户输入的条件动态生成查询语句从而实现灵活的条件查询。例如根据用户选择的不同筛选条件我们可以动态地拼接SQL语句实现根据不同条件查询不同的结果。 2. 动态排序有时候我们需要根据用户的选择对查询结果进行排序。通过动态SQL我们可以根据用户选择的排序字段和排序方式动态生成排序语句从而实现按照不同的规则对查询结果进行排序。 3. 动态更新有时候我们需要根据不同的条件更新数据库中的数据。通过动态SQL我们可以根据不同的条件动态生成更新语句从而实现根据不同的条件更新不同的数据。 4. 动态插入有时候我们需要根据不同的条件插入数据到数据库中。通过动态SQL我们可以根据不同的条件动态生成插入语句从而实现根据不同的条件插入不同的数据。 3.常用动态SQL元素 下面我们将以用户表为例举例说明 1. where if 元素 先来个简单的需求根据 username 和 sex 来查询user用户首先看下普通的sql select idselectUserByNameAndSex resultTypecom.ctb.model.User parameterTypecom.kzy.entity.Userselect * from user where username#{username} and sex#{sex} /select 这种方式如果其中一个参数为空可能就会导致最终查询不到数据。 我们现在想实现如果username为空将只根据sex来查询如果sex为空我们将只根据username来查询。那么可以使用 where if 标签进行判断sql如下 select idselectUserByNameOrSex resultTypecom.ctb.model.User parameterTypecom.ctb.model.Userselect * from user whereif testusername ! nullusername#{username}/ifif testsex ! nulland sex#{sex}/if/where /select if 元素即根据条件判断是否显示其里面的内容。                                                                  where 元素自行判断若下面的子元素有内容则此处会添加一个where如果下面的子元素无内容即条件判断都为空则此处不添加where。此外如果where标签内容以and 或 or开头的话会将and/or自动剔除(否则 where and/or 连在一起会报语法错误)。 2. set if 元素 不仅查询操作可能会用到动态sql有时一些更新操作也会需要根据前端传来的参数进行判断拼接符合条件的sql语句如下 update idupdateUserById parameterTypecom.ctb.model.Userupdate user usetif testusername ! null and username ! u.username #{username},/ifif testsex ! null and sex ! u.sex #{sex}/if/setwhere id#{id} /update 若第一个条件 username 为空那么 sql 语句为update user u set u.sex? where id? 若第一个条件不为空那么 sql 语句为update user u set u.username ? ,u.sex ? where id? 多个条件以此类推最后一个if标签里的内容结尾不用加逗号是为了防止出现 ... , where ... 语法错误。 3. choose when otherwise 元素 有时候我们不想使用所有的条件而只是想从多个条件中选择一个使用。针对这种情况MyBatis 提供了 choose 元素它有点像 Java 中的 switch 语句。 select idselectUserByChoose resultTypecom.ctb.model.User parameterTypecom.ctb.model.Userselect * from userwherechoosewhen id ! null and testid ! id#{id}/whenwhen testusername ! null and username ! and username#{username}/whenotherwiseand sex#{sex}/otherwise/choose/where /select 业务还是查询user三个条件分别为 id,username,sex但是策略变为只选择一个作为查询条件传入 “id” 对应的sql语句就是 select * from user where  id?  传入 “username” 对应的sql语句就是 select * from user where  username? 如果前两者都没有传入那么默认选择otherwise标签里的内容对应的查询语句为 select * from user where sex? 4. 自定义 trim 元素 如果 where 或者 set 元素与你期望的不太一样你也可以通过自定义 trim 元素来定制 where 或 set 的功能非常实用 1. 自定义 trim 元素改写上面的 where if 语句 select idselectUserByNameOrSex resultTypecom.ctb.model.User parameterTypecom.ctb.model.Userselect * from user!-- whereif testusername ! nullusername#{username}/ifif testsex ! nulland sex#{sex}/if/where  --!-- 改写后的效果 --trim prefixwhere prefixOverridesand | orif testusername ! nullusername#{username}/ifif testsex ! nulland sex#{sex}/if/trim /select prefix插入 prefix 属性中指定的内容即前缀。 prefixoverride前缀覆盖去掉第一个and 或者or即 prefixoverride 属性中的内容此处为了防止拼接sql时出现 where and 这种情况。 2. 自定义 trim 元素改写上面的 set if 语句 update idupdateUserById parameterTypecom.ctb.model.Userupdate user u!-- setif testusername ! null and username ! u.username #{username},/ifif testsex ! null and sex ! u.sex #{sex}/if/set --!-- 修改后的内容 --trim prefixset suffixOverrides,if testusername ! null and username ! u.username #{username},/ifif testsex ! null and sex ! u.sex #{sex},/if/trimwhere id#{id} /update suffixoverride后缀覆盖去掉最后一个逗号即 suffixoverride 属性中的内容此处为了防止拼接sql时出现尾部多个逗号这种情况。 5. foreach 元素 foreach 元素的非常强大它允许你指定一个集合声明可以在元素体内使用的集合项item和索引index变量它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符不会有不必要的语法错误。 你可以将任何可迭代对象如 List、Set 等、Map 对象或者数组对象作为集合参数传递给 foreach 。当使用可迭代对象或者数组时index 是当前迭代的序号item 的值是本次迭代获取到的元素。当使用 Map 对象或者 Map.Entry 对象的集合时index 是键item 是值。 例如现在我们有个简单的sql语句select * from user where id in (1,2,3) 现在我们来对它进行改写 select idselectUserByListId parameterTypejava.util.List resultTypecom.ctb.model.Userselect * from userwhere id in!--collection:指定输入对象中的集合属性,可以是array数组,也可是list集合item:每次遍历生成的对象open:开始遍历时的拼接字符串close:结束时拼接的字符串separator:遍历对象之间需要拼接的字符串select * from user where id in (1,2,3)--foreach collectionlist itemid open( close) separator,#{id}/foreach /select foreach 元素内各个属性对应的含义                                                                                  collection:指定输入对象中的集合属性,可以是array数组,也可是list集合 item:每次遍历生成的对象 open:开始遍历时的拼接字符串 close:结束时拼接的字符串 separator:遍历对象之间需要拼接的字符串 6.SQL片段重用 该作用于当我们经常需要使用某表的某些字段时我们可以它分装起来便于直接引用。 sql iduserColumnsid, name, sex,birthday /sqlselect idselectUsers resultMapBaseResultMapSELECT include refiduserColumns /FROM t_user /selectselect idselectUsersWithPrice resultMapBaseResultMapSELECT include refiduserColumns /, infoFROM t_user /select 在这个示例中通过sql标签定义了一个名为bookColumns的SQL片段包含了书籍表的列名。然后在不同的查询语句中通过include标签引用了该SQL片段实现了列名的重用。 二、模糊查询的三种SQL方式、#和$的区别 三种模糊查询的方法是 1.使用#{字段名} select idlike1 resultTypecom.ctb.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like #{bname}/select 测试结果 2.使用${字段名} select idlike2 resultTypecom.ctb.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like ${bname}/select 测试结果   3.使用concat{%,#{字段名},%} select idlike3 resultTypecom.ctb.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like concat(%,#{bname},%) /select 测试结果  #与$的区别  1.$ 符号sql拼接符号)  $符号占位符是简单的字符串替换不进行预编译和参数类型处理也不会进行转义。$符号占位符直接将参数的值替换到SQL语句中可以用于动态拼接SQL语句的部分内容。$符号占位符存在SQL注入的风险因为参数值直接替换到SQL语句中可能导致恶意注入攻击。没有 引号 2. # 符号占位符)  #符号占位符是预编译的占位符会对参数进行类型处理和安全处理。#符号占位符将参数值作为预编译参数传递给数据库可以防止SQL注入攻击。#符号占位符可以用于动态生成SQL语句的条件部分例如WHERE子句、ORDER BY子句等。有引号 注 1) mybatis中使用OGNL表达式传递参数 2) 优先使用#{...} 3) ${...}方式存在SQL注入风险  #{...}更加安全可靠适用于大多数情况下。而${...}则更加灵活但需要注意潜在的安全风险。在使用${...}时要确保参数值的来源可信避免直接将用户输入的数据作为参数值传递进去。 四、MyBatis结果映射 Mybatis中结果集的处理分为两种 resultMap适合使用返回值是自定义实体类的情况 resultType适合使用返回值的数据类型是非自定义的即jdk的提供的类型 映射场景 ①返回单表的对应的实体类仅有一个查询结果可以用resultType/resultMap。 ②返回单表的对应的实体类有多个查询结果可以用resultType/resultMap。 ③返回多表对应结果仅有一个查询结果通常用resultType也可以用resultMap。 ④返回多表对应结果有多个查询结果通常用resultType也可以用resultMap。 ⑤返回单个列段仅有一个查询结果就用resultType。 ⑥返回单个列段有多个查询结果就用resultType。  resultType进行结果映射 首先我们需要定义一个User类用于存储查询结果 public class User {private int id;private String name;private int age;private String gender;private String email;// getter和setter方法省略 } 然后在MyBatis的mapper文件中我们可以使用resultType来映射查询结果到User对象上。具体配置如下 select idgetUserById resultTypecom.ctb.model.UserSELECT id, name, age, gender, emailFROM userWHERE id #{id} /select 在上面的配置中我们使用了resultType属性来指定查询结果映射到的Java对象的全限定名。这样当执行查询语句时MyBatis会自动将查询结果映射到指定的Java对象上。 resultMap进行结果映射 首先我们需要定义一个Order类用于存储查询结果 public class Order {private int id;private int userId;private int productId;private double price;private int quantity;// getter和setter方法省略 } 然后在MyBatis的mapper文件中我们可以使用resultMap来映射查询结果到Order对象上。具体配置如下 resultMap idOrderResultMap typecom.example.Orderid propertyid columnid /result propertyuserId columnuser_id /result propertyproductId columnproduct_id /result propertyprice columnprice /result propertyquantity columnquantity / /resultMapselect idgetOrderById resultMapOrderResultMapSELECT id, user_id, product_id, price, quantityFROM orderWHERE id #{id} /select 在上面的配置中我们定义了一个名为OrderResultMap的resultMap它的type属性指定了要映射的Java对象的全限定名。接下来我们为每个字段指定了对应的属性名和数据库表中的列名。最后在查询语句中引用这个resultMap即可将查询结果映射到Order对象上。 需要注意的是如果查询结果中的某个字段在Java对象中没有对应的属性那么该字段将被映射为null。此外如果查询结果中的某个字段在Java对象中有多个对应的属性那么该字段的值将被映射为一个列表或数组。 总结 resultType用于指定查询结果的类型。它可以是Java的基本数据类型如int、String等也可以是自定义的Java对象。当查询结果只有一列时可以使用resultType来指定该列的类型。例如如果查询结果只有一个整数列可以将resultType设置为int。 resultMap用于定义复杂的查询结果映射关系。当查询结果包含多个列并且需要将这些列映射到一个Java对象中时可以使用resultMap来定义映射规则。resultMap可以指定每个列与Java对象的属性之间的映射关系以及一些其他的映射规则如类型转换、关联关系等。 resultType适用于简单的查询结果映射而resultMap适用于复杂的查询结果映射。 MyBatis动态SQL、模糊查询与结果映射到这就结束了 祝大家在编程之路越走越顺越走越宽
http://www.zqtcl.cn/news/433365/

相关文章:

  • 类似qq空间的网站wordpress 简历主题
  • 专业网站运营制作怎么写代码做网站
  • 安徽免费网站制作西安做行业平台网站的公司
  • 我想做服装网站怎么做网页设计优秀案例分析
  • 网站建设技术教程视频wordpress中文模版
  • 高端企业网站 程序纸牌网站建设
  • html制作网站推广最有效的办法
  • 做网站推广的工作内容凡客诚品创始人
  • 网站开发pc端和手机端外贸建设网站公司
  • 长沙哪家网站设计好上海成品网站
  • wordpress商城插件收费哪里可以做网站优化
  • 中国建设银行u盾下载假网站吗wordpress有没有付费
  • 海南哪家公司做网站开发一套管理系统多少钱
  • 做网站建设费用百姓网
  • 西安建设厅网站wpf做网站教程
  • 好的网页网站设计wordpress对外发邮件
  • 湖北网站建设贴吧信用宁波企业网查询
  • 佛山市官网网站建设多少钱网站建设与管理书籍
  • 网站建设佰金手指科杰二八佛山有那几家做网站
  • 网站建设刂搜金手指下拉贰伍wordpress 外链自动nofflow
  • 搭建一个网站多少钱手机软件开发用什么语言
  • 太原专业网站建设杭州网络推广专员
  • 广西专业建网站橙米网站建设
  • 百度做的网站能优化吗html网站系统
  • php素材网站源码免费下载网站维护的内容有哪些
  • 打鱼跟电子游戏网站怎么做佛山微网站开发哪家好
  • 知名的网站建设网站在工信部备案
  • 网站首页的快照更新慢爆wordpress密码
  • dw做网站背景图片设置铺平微博通 wordpress
  • 勉县网站建设电商网站要素