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

个人做网站的流程引流app推广软件

个人做网站的流程,引流app推广软件,wordpress 论坛,wordpress 无法登录后台目录 一、MyBatis动态sql 1.1 是什么 1.2 作用 1.3 优点 1.4 特殊标签 1.5 代码演示 二、#和$的区别 2.1 #使用 2.2 $使用 2.3 综合 2.4 代码演示 三、resultType与resultMap的区别 3.1 关于resultType 3.2 关于resultMap 3.3 两者区别 3.4 代码演示 一、MyBati…目录 一、MyBatis动态sql 1.1 是什么 1.2 作用 1.3 优点 1.4 特殊标签 1.5 代码演示 二、#和$的区别 2.1 #使用 2.2 $使用 2.3 综合 2.4 代码演示 三、resultType与resultMap的区别 3.1 关于resultType 3.2 关于resultMap  3.3 两者区别 3.4 代码演示 一、MyBatis动态sql 1.1 是什么 是一种在SQL语句中根据不同条件动态拼接SQL的方式。通过使用动态SQL可以根据不同的条件生成不同的SQL语句从而实现灵活的查询和更新操作。动态SQL可以使用if、choose、when、otherwise等标签来实现条件判断和循环操作同时还可以使用foreach标签来实现对集合类型参数的遍历操作。这样可以避免在代码中使用大量的字符串拼接提高代码的可读性和维护性。 1.2 作用 Mybatis的动态SQL具有以下作用 1. 灵活的条件查询通过动态SQL可以根据不同的条件生成不同的SQL语句实现灵活的条件查询。可以根据用户输入的不同条件动态拼接SQL从而实现动态的查询操作。2. 动态更新操作通过动态SQL可以根据不同的条件生成不同的更新SQL语句实现动态的更新操作。可以根据不同的业务需求动态拼接更新语句从而实现灵活的数据更新。3. 避免SQL注入通过使用动态SQL可以使用预编译的方式来拼接SQL语句避免了直接拼接字符串的方式从而有效防止SQL注入攻击。4. 提高代码可读性和维护性通过使用动态SQL的标签和语法可以将复杂的SQL语句拆分为多个小块提高了代码的可读性和维护性。可以根据不同的条件使用不同的标签和语法使代码更加清晰易懂。总之动态SQL是Mybatis的重要特性之一可以帮助开发者灵活地拼接SQL语句实现动态的查询和更新操作提高代码的可读性和维护性。 动态SQL在扩展方面有以下几个方面的作用 1#. 支持多表关联查询通过动态SQL可以根据不同的条件动态拼接多表关联查询的SQL语句。可以根据业务需求动态选择关联的表和关联条件从而实现复杂的多表查询操作。2#. 支持分页查询通过动态SQL可以根据不同的条件动态拼接分页查询的SQL语句。可以根据分页参数动态计算查询结果的起始位置和数量并将其拼接到SQL语句中实现分页查询操作。3#. 支持动态排序通过动态SQL可以根据不同的条件动态拼接排序查询的SQL语句。可以根据排序参数动态选择排序字段和排序方式并将其拼接到SQL语句中实现动态排序查询操作。4#. 支持动态字段选择通过动态SQL可以根据不同的条件动态拼接字段选择的SQL语句。可以根据字段选择参数动态选择需要查询的字段并将其拼接到SQL语句中实现动态字段选择查询操作。5#. 支持动态更新字段通过动态SQL可以根据不同的条件动态拼接更新字段的SQL语句。可以根据更新参数动态选择需要更新的字段并将其拼接到SQL语句中实现动态更新字段操作。 总之动态SQL在扩展方面可以根据不同的条件动态拼接SQL语句满足复杂的查询和更新需求。通过动态SQL可以灵活地处理多表关联查询、分页查询、动态排序、动态字段选择和动态更新字段等扩展操作提高了系统的灵活性和可扩展性。 1.3 优点 Mybatis的动态SQL具有以下优点 -1. 灵活性动态SQL可以根据不同的条件生成不同的SQL语句实现灵活的查询和更新操作。可以根据不同的业务需求动态拼接SQL从而满足不同的查询和更新需求。-2. 可读性通过使用动态SQL的标签和语法可以将复杂的SQL语句拆分为多个小块提高了代码的可读性。可以根据不同的条件使用不同的标签和语法使代码更加清晰易懂。-3. 维护性使用动态SQL可以将SQL语句的拼接逻辑与业务逻辑分离使代码更易于维护。可以根据需要修改或添加条件而不需要修改大段的SQL语句减少了代码的维护成本。-4. 防止SQL注入通过使用动态SQL可以使用预编译的方式来拼接SQL语句避免了直接拼接字符串的方式从而有效防止SQL注入攻击。-5. 性能优化动态SQL可以根据不同的条件生成不同的SQL语句可以根据业务需求进行优化。可以根据查询条件动态选择索引从而提高查询效率。 总之动态SQL是Mybatis的强大特性之一具有灵活性、可读性、维护性、安全性和性能优化等优点能够帮助开发者更好地处理复杂的查询和更新需求提高代码质量和开发效率。 1.4 特殊标签 Mybatis的动态SQL是一种在SQL语句中根据不同条件动态生成不同SQL片段的技术。它通过使用Mybatis提供的一些特殊标签和语法可以根据不同的条件动态拼接SQL语句从而实现灵活的查询和更新操作。  Mybatis提供了以下几种常用的动态SQL标签和语法 1. if标签if标签可以根据条件判断是否包含某段SQL语句。可以在if标签中使用OGNL表达式来判断条件如果条件满足则包含if标签中的SQL语句。2. choose、when、otherwise标签choose标签类似于Java中的switch语句可以根据不同的条件选择不同的SQL语句执行。可以在choose标签中使用when标签定义多个条件分支当条件满足时执行对应的SQL语句可以使用otherwise标签定义默认的SQL语句。3. trim标签trim标签可以根据不同的条件动态拼接SQL语句的开头或结尾部分。可以使用trim标签来去除或添加不需要的SQL关键字从而实现灵活的SQL拼接。4. foreach标签foreach标签可以遍历集合或数组并根据集合中的元素动态生成SQL语句。可以使用foreach标签来实现批量插入或批量更新操作。5. set标签set标签可以根据不同的条件动态生成更新操作中的set语句。可以使用set标签来根据更新参数动态选择需要更新的字段并将其拼接到SQL语句中。通过使用这些动态SQL标签和语法可以根据不同的条件动态生成不同的SQL语句从而实现灵活的查询和更新操作。动态SQL使得Mybatis可以根据不同的业务需求动态拼接SQL语句提高了代码的可读性、维护性和扩展性。 1.5 代码演示 根据我们自动生成的xml接口实体进行增加代码进行动态SQL的演示操作如下  Book package com.Kissship.model;public class Book {private Integer bid;private String bname;private Float price;public Book(Integer bid, String bname, Float price) {this.bid bid;this.bname bname;this.price price;}public Book() {super();}public Integer getBid() {return bid;}public void setBid(Integer bid) {this.bid bid;}public String getBname() {return bname;}public void setBname(String bname) {this.bname bname;}public Float getPrice() {return price;}public void setPrice(Float price) {this.price price;}Overridepublic String toString() {return Book{ bid bid , bname bname \ , price price };} } BookMapper package com.Kissship.mapper;import com.Kissship.model.Book; import org.apache.ibatis.annotations.Param;import java.util.List;public interface BookMapper {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);//增加根据多个ID(bid)查询多个数据的方法ListBook selectByBll(Param(bids) List bids);} BookMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.Kissship.mapper.BookMapper resultMap idBaseResultMap typecom.Kissship.model.Book constructor idArg columnbid jdbcTypeINTEGER javaTypejava.lang.Integer /arg columnbname jdbcTypeVARCHAR javaTypejava.lang.String /arg columnprice jdbcTypeREAL javaTypejava.lang.Float //constructor/resultMapsql idBase_Column_List bid, bname, price/sqlselect idselectByPrimaryKey resultMapBaseResultMap parameterTypejava.lang.Integer select include refidBase_Column_List /from t_mvc_bookwhere bid #{bid,jdbcTypeINTEGER}/selectdelete iddeleteByPrimaryKey parameterTypejava.lang.Integer delete from t_mvc_bookwhere bid #{bid,jdbcTypeINTEGER}/deleteinsert idinsert parameterTypecom.Kissship.model.Book insert into t_mvc_book (bid, bname, price)values (#{bid,jdbcTypeINTEGER}, #{bname,jdbcTypeVARCHAR}, #{price,jdbcTypeREAL})/insertinsert idinsertSelective parameterTypecom.Kissship.model.Book insert into t_mvc_booktrim prefix( suffix) suffixOverrides, if testbid ! null bid,/ifif testbname ! null bname,/ifif testprice ! null price,/if/trimtrim prefixvalues ( suffix) suffixOverrides, if testbid ! null #{bid,jdbcTypeINTEGER},/ifif testbname ! null #{bname,jdbcTypeVARCHAR},/ifif testprice ! null #{price,jdbcTypeREAL},/if/trim/insertupdate idupdateByPrimaryKeySelective parameterTypecom.Kissship.model.Book update t_mvc_bookset if testbname ! null bname #{bname,jdbcTypeVARCHAR},/ifif testprice ! null price #{price,jdbcTypeREAL},/if/setwhere bid #{bid,jdbcTypeINTEGER}/updateupdate idupdateByPrimaryKey parameterTypecom.Kissship.model.Book update t_mvc_bookset bname #{bname,jdbcTypeVARCHAR},price #{price,jdbcTypeREAL}where bid #{bid,jdbcTypeINTEGER}/update!-- 根据多个bid(编号)进行查询出多个Book(对象)bids参数需要是一个ListInteger 集合--select idselectByBll resultTypecom.Kissship.model.Book parameterTypejava.util.List selectinclude refidBase_Column_List /from t_mvc_bookwhere bid inforeach collectionbids itembid open( close) separator,#{bid}/foreach/select/mapper 其中的动态SQL可以根据自己的需要进行编写 :   select idselectByBll resultTypecom.Kissship.model.Book parameterTypejava.util.List     select     include refidBase_Column_List /     from t_mvc_book     where bid in     foreach collectionbids itembid open( close) separator,       #{bid}     /foreach   /select  然后再将以下代码增加到增加编写的接口中 // 封装方法ListBook selectByBll(List bids); 接着在实现类中增加以下代码 // 方法实现Overridepublic ListBook selectByBll(List bids) {return bookMapper.selectByBll(bids);} 最后我们就可以在Demo测试类中进行方法调用测试 在Demo中增加以下代码进行测试 :   Testpublic void Bll(){ListInteger bids Arrays.asList(new Integer[]{41,42,43,45,47});//jdk1.8的新特性写法 bookBiz.selectByBll(bids).forEach(System.out::println); // for (Book book: bookBiz.selectByBll(bids)) { // System.out.println(book); // }}     其中方法调用的输出代码是jdk 1.8的新特性提倡大家可以去探索有很大收获。  输出的结果  二、#和$的区别 2.1 #使用 1#占位符语法 #占位符会将传入的参数值自动进行预编译处理可以防止SQL注入攻击。使用#占位符时Mybatis会将参数值以安全的方式替换到SQL语句中使用JDBC的预编译语句来执行SQL查询。#占位符在生成SQL语句时会对参数值进行类型处理将参数值转换为对应的JDBC类型。#占位符可以防止SQL注入攻击但是无法实现动态拼接SQL片段。 2优点  #占位符语法在使用动态SQL时具有以下优点 1. 防止SQL注入攻击#占位符语法会将传入的参数值进行预编译处理将参数值转换为对应的JDBC类型。这样可以防止恶意输入对SQL语句造成的安全威胁提高了系统的安全性。2. 参数值类型处理#占位符语法会对参数值进行类型处理将参数值转换为对应的JDBC类型。这样可以避免在SQL语句中手动进行类型转换的麻烦提高了开发效率。3. 可读性和可维护性使用#占位符语法可以使SQL语句更加清晰和可读因为参数值被封装在占位符中不会直接出现在SQL语句中。这样可以方便后续的维护和修改减少出错的可能性。4. 兼容性#占位符语法是Mybatis的特有语法相对于$占位符语法更具有兼容性。如果项目需要切换到其他ORM框架使用#占位符语法可以减少代码的修改量。 综上所述#占位符语法具有防止SQL注入攻击、参数值类型处理、可读性和可维护性、兼容性等优点。因此在项目中使用动态SQL时推荐使用#占位符语法。 2.2 $使用 1$占位符语法 $占位符会直接将传入的参数值替换到SQL语句中不进行预编译处理。使用$占位符时Mybatis会将参数值直接替换到SQL语句中生成最终的SQL语句。$占位符在生成SQL语句时不会对参数值进行类型处理参数值会直接拼接到SQL语句中可能存在安全风险。$占位符可以实现动态拼接SQL片段但是可能存在SQL注入攻击的风险。 2$优点 $占位符语法在使用动态SQL时具有以下优点 动态拼接SQL片段$占位符语法允许在SQL语句中直接使用参数值可以方便地进行动态拼接SQL片段。这样可以在某些特殊情况下更灵活地构建SQL语句。字段名动态替换$占位符语法可以用于动态替换字段名。这在某些场景下非常有用比如需要根据用户的选择动态查询不同的字段。SQL语句灵活性$占位符语法允许在SQL语句中使用任意有效的SQL表达式。这样可以在SQL语句中进行一些复杂的计算、字符串拼接等操作。 2.3 综合 综上所述$占位符语法在某些特殊情况下具有灵活性和动态拼接SQL的优势但需要注意SQL注入攻击的风险并且可能会降低SQL语句的可读性和可维护性。因此在使用动态SQL时#占位符语法具有防止SQL注入攻击、参数值类型处理、可读性和可维护性、兼容性等优点。因此在项目中使用动态SQL时推荐使用#占位符语法。只有在特殊情况下需要动态拼接SQL片段或动态替换字段名时才考虑使用占位符语法并且需要确保参数值的安全性。 2.4 代码演示 在自动生成的 BookMapper.xml 配置文件中增加以下代码  select idlike01 resultTypecom.Kissship.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like #{bname}/selectselect idlike02 resultTypecom.Kissship.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like ${bname}/selectselect idlike03 resultTypecom.Kissship.model.Book parameterTypejava.lang.String selectinclude refidBase_Column_List /from t_mvc_bookwhere bname like concat(%,#{bname},%)/select 自己在配置文件中根据自己需求来进行编写动态SQL 注意 :  这里如果使用$占位符语法的话需要在${bname}的左右增加单引号 列如:  ${bname}  这已是$占位符语法的一个小缺陷在我们日常使用中一般使用的是第三种方法( like03 ) 在自动生成的 BookMapper 接口中增加以下代码  //增加模糊查询的方法ListBook like01(Param(bname) String bname);ListBook like02(Param(bname) String bname);ListBook like03(Param(bname) String bname); 编写动态SQL后进行封装方法 在自己创建的接口中增加以下代码 ListBook like01(String bname);ListBook like02(String bname);ListBook like03(String bname); 在自己创建的实现类中增加以下代码 Overridepublic ListBook like01(String bname) {return bookMapper.like01(bname);}Overridepublic ListBook like02(String bname) {return bookMapper.like02(bname);}Overridepublic ListBook like03(String bname) {return bookMapper.like03(bname);} 在测试类( Demo )中增加以下代码并且进行一一调用测试  Testpublic void like01(){bookBiz.like01(%斗破%).forEach(System.out::println);}Testpublic void like02(){bookBiz.like02(%斗破%).forEach(System.out::println);}Testpublic void like03(){bookBiz.like03(%斗破%).forEach(System.out::println);} like01的方法测试结果如下 like02的方法测试结果如下 like03的方法测试结果如下 三、resultType与resultMap的区别 3.1 关于resultType 在Mybatis的动态SQL中resultType和resultMap都是用于指定查询结果的类型或映射关系的配置项。 resultType resultType用于指定查询结果的类型可以是Java基本类型、Java对象类型或自定义的Java类。当使用resultType时Mybatis会根据查询结果的列名和Java对象的属性名进行自动映射。例如如果查询结果的列名为usernameJava对象中有对应的属性userName则Mybatis会自动将查询结果映射到Java对象中。 示例 select idgetUser resultTypecom.example.UserSELECT id, username, email FROM user WHERE id #{id} /select 在上述示例中resultType指定了查询结果的类型为com.example.User类Mybatis会根据查询结果的列名和User类的属性名进行自动映射。 3.2 关于resultMap  resultMap resultMap用于自定义查询结果的映射关系可以通过指定映射关系来实现更灵活的结果映射。resultMap需要在映射文件中进行配置通过定义resultMap标签来指定映射关系。在resultMap标签中可以使用id、result、association等标签来定义主键、普通列和关联对象之间的映射关系。 示例 resultMap iduserResultMap typecom.example.Userid propertyid columnuser_id/result propertyusername columnuser_name/result propertyemail columnuser_email/ /resultMapselect idgetUser resultMapuserResultMapSELECT id as user_id, username as user_name, email as user_email FROM user WHERE id #{id} /select 在上述示例中resultMap指定了自定义的映射关系userResultMap通过resultMap标签中的id和result标签来定义查询结果列和User类属性之间的映射关系。 3.3 两者区别 resultType用于简单的结果映射适用于查询结果列与Java对象属性名一致的情况自动进行映射。resultMap用于复杂的结果映射适用于查询结果列与Java对象属性名不一致或需要自定义映射关系的情况需要手动定义映射关系 总结 resultType适用于简单的结果映射可以自动进行映射 resultMap适用于复杂的结果映射需要手动定义映射关系。 根据具体的需求和情况选择合适的配置项来实现查询结果的映射。 3.4 代码演示 resultType的使用场景 当查询结果与Java对象的属性名一致并且查询结果较为简单时可以使用resultType。这样可以简化配置避免过多的映射配置。当查询结果只包含少量列并且不需要进行复杂的映射操作时也可以使用resultType。 resultMap的使用场景当查询结果与Java对象的属性名不一致或者查询结果需要进行复杂的映射操作时可以使用resultMap。通过自定义映射关系可以灵活地将查询结果映射到Java对象中。当查询结果包含多个关联对象需要进行关联查询和关联映射时也可以使用resultMap。通过association、collection等标签可以定义关联对象之间的映射关系。 综上所述resultType适用于简单的结果映射而resultMap适用于复杂的结果映射。在实际项目中根据查询结果的复杂度和需求的灵活性选择合适的配置项来进行结果映射。如果查询结果较为简单且与Java对象属性名一致可以使用resultType如果查询结果复杂或需要进行自定义映射操作可以使用resultMap。 在自动生成的 BookMapper.xml 配置文件中增加以下代码 如下 select idBookList01 resultTypecom.Kissship.model.Book selectinclude refidBase_Column_List /from t_mvc_book/selectselect idBookList02 resultMapBaseResultMap selectinclude refidBase_Column_List /from t_mvc_book/select 在自动生成的 BookMapper 接口中增加以下代码如下 ListBook BookList01();ListBook BookList02(); 在自己创建的接口  BookBiz 中增加以下代码如下 ListBook BookList01();ListBook BookList02(); 在自己创建的实现类  BookBizImpl 中增加以下代码如下 Overridepublic ListBook BookList01() {return bookMapper.BookList01();}Overridepublic ListBook BookList02() {return bookMapper.BookList02();} 在测试类 Demo 中 增加以下代码如下 Testpublic void List01(){bookBiz.BookList01().forEach(System.out::println);}Testpublic void List02(){bookBiz.BookList02().forEach(System.out::println);} List01测试结果如下 List02测试结果如下 最后MyBatis之动态sql及分页就到这里祝大家在敲代码的路上一路通畅! 感谢大家的观看 !
http://www.pierceye.com/news/204362/

相关文章:

  • 织梦制作网站如何上线做网站 当站长
  • 如何知道一个网站是用什么做的树莓派搭建wordpress
  • 怎么制作网站登录电子商务网上购物网站建设规划
  • 大连外贸网站制作做文案公众号策划兼职网站
  • 400网站建设推广通王网站内容管理系统
  • 上海专业网站制作开发wordpress 一级目录下
  • 要查询一个网站在什么公司做的推广怎么查济南集团网站建设报价
  • 手机静态网站建设课程设计报告形象型网站
  • 网站建设接单渠道百度网站内容
  • 企业网站pv是什么手机网站开发价格
  • 北京网站优化团队oppo开放平台
  • 购物商城外贸网站福州营销型网站建设公司
  • 白酒pc网站建设方案网站不符合个人备案性质
  • 做视频网站程序多少钱免费人体做爰网站
  • 做海外网站 服务器放哪网页设计师通常是设计两套ui吗
  • 海拉尔网站建设做html网站模板下载
  • 为什么网站找不到了东莞智通人才市场招聘官网
  • 如何注册网站名称中国煤炭建设协网站
  • 一个网站为什么做的不好看软件源码成品资源下载网站
  • 网站建设 环讯传媒建设网站要多久到账
  • 溧阳城乡建设厅网站惠州专业网站建设
  • app嵌入手机网站dw旅游网站怎么做
  • wpf做网站烟台做网站工资
  • 做网站公司名字网站建设方案对比分析报告
  • 网站360优化网站开发所需技术
  • 宁河做网站公司wordpress漏洞扫描工具
  • 单位网站建设的目的手机可以做网站服务器吗
  • 上海网站建设有限公司lnmp安装wordpress限权
  • 大航母网站建设服务php一般网站空间多大
  • 中性衣服印花图案设计网站做网站的工作