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

济南网站制作运营wordpress文章页个性化定制

济南网站制作运营,wordpress文章页个性化定制,百度智能小程序是什么,中国容桂品牌网站建设Mybatis 定义 Mybatis是一个半ORM#xff08;对象关系映射#xff09;框架#xff0c;它内部封装了JDBC#xff0c;加载驱动、创建连接、创建statement等繁杂的过程#xff0c;开发者开发时只需要关注如何编写SQL语句#xff0c;可以严格控制sql执行性能#xff0c;灵…Mybatis 定义 Mybatis是一个半ORM对象关系映射框架它内部封装了JDBC加载驱动、创建连接、创建statement等繁杂的过程开发者开发时只需要关注如何编写SQL语句可以严格控制sql执行性能灵活度高。 作为一个半ORM框架MyBatis 可以使用 XML 或注解来配置和映射原生信息将 POJO映射成数据库中的记录避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 通过xml 文件或注解的方式将要执行的各种 statement 配置起来并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句最后由mybatis框架执行sql并将结果映射为java对象并返回。从执行sql到返回result的过程。 优缺点 优点 基于SQL语句编程相当灵活不会对应用程序或者数据库的现有设计造成任何影响SQL写在XML里解除sql与程序代码的耦合便于统一管理提供XML标签支持编写动态SQL语句并可重用。与JDBC相比减少了50%以上的代码量消除了JDBC大量冗余的代码不需要手动开关连接很好的与各种数据库兼容因为MyBatis使用JDBC来连接数据库所以只要JDBC支持的数据库MyBatis都支持。能够与Spring很好的集成提供映射标签支持对象与数据库的ORM字段关系映射提供对象关系映射标签支持对象关系组件维护。 缺点 SQL语句的编写工作量较大尤其当字段多、关联表多时对开发人员编写SQL语句的功底有一定要求。SQL语句依赖于数据库导致数据库移植性差不能随意更换数据库。 Hibernate 和 MyBatis 的区别 相同点 都是对jdbc的封装都是持久层的框架都用于dao层的开发。 不同点 Mybatis 和 hibernate 不同它不完全是一个 ORM 框架因为 MyBatis 需要 程序员自己编写 Sql 语句。 Mybatis 直接编写原生态 sql可以严格控制 sql 执行性能灵活度高非常 适合对关系数据模型要求不高的软件开发因为这类软件需求变化频繁一但需 求变化要求迅速输出成果。但是灵活的前提是 mybatis 无法做到数据库无关性 如果需要实现支持多种数据库的软件则需要自定义多套 sql 映射文件工作量大。 Hibernate 对象/关系映射能力强数据库无关性好对于关系模型要求高的 软件如果用 hibernate 开发可以节省很多代码提高效率 JDBC编程有哪些不足之处MyBatis是如何解决这些问题的 1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能如果使用数据库链接池可解决此问题。 解决在SqlMapConfig.xml中配置数据链接池使用连接池管理数据库链接。 2、Sql语句写在代码中造成代码不易维护实际应用sql变化的可能较大sql变动需要改变java代码。 解决将Sql语句配置在XXXXmapper.xml文件中与java代码分离。 3、 向sql语句传参数麻烦因为sql语句的where条件不一定可能多也可能少占位符需要和参数一一对应。 解决 Mybatis自动将java对象映射至sql语句。 4、 对结果集解析麻烦sql变化导致解析代码变化且解析前需要遍历如果能将数据库记录封装成pojo对象解析比较方便。 解决Mybatis自动将sql执行结果映射至java对象。 MyBatis编程步骤是什么样的 1、创建SqlSessionFactory 2、通过SqlSessionFactory创建SqlSession 3、 通过sqlsession执行数据库操作 4、 调用session.commit()提交事务 5、 调用session.close()关闭会话 #{}和${}的区别 #{}是占位符预编译处理${}是拼接符字符串替换没有预编译处理。 Mybatis在处理#{}时#{}传入参数是以字符串传入会将SQL中的#{}替换为?号调用PreparedStatement的set方法来赋值。 变量替换后#{} 对应的变量自动加上单引号 ‘’变量替换后${} 对应的变量不会加上单引号 ‘’ #{} 可以有效的防止SQL注入提高系统安全性${} 不能防止SQL 注入 #{} 的变量替换是在DBMS 中${} 的变量替换是在 DBMS 外 通常一个Xml映射文件都会写一个Dao接口与之对应那么这个Dao接口的工作原理是什么Dao接口里的方法、参数不同时方法能重载吗 Dao接口即Mapper接口。接口的全限名就是映射文件中的namespace的值接口的方法名就是映射文件中Mapper的Statement的id值接口方法内的参数就是传递给sql的参数。Mapper接口是没有实现类的当调用接口方法时接口全限名方法名的拼接字符串作为key值可唯一定位一个MapperStatement。 Dao接口里的方法是不能重载的因为是全限名方法名的保存和寻找策略。如果重载可能会出现相同的id发生id冲突和错误。 Dao接口的工作原理是JDK动态代理Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象代理对象proxy会拦截接口方法转而执行MappedStatement所代表的sql然后将sql执行结果返回。 在Mapper中如何传递多个参数 1、若Dao层函数有多个参数那么其对应的xml中#{0}代表接收的是Dao层中的第一个参数#{1}代表Dao中的第二个参数以此类推。 2、使用Param注解在Dao层的参数中前加Param注解,注解内的参数名为传递到Mapper中的参数名。 3、多个参数封装成Map以HashMap的形式传递到Mapper中。 Mybatis动态sql有什么用执行原理是什么有哪些动态sql Mybatis动态sql是一种可以根据不同的参数条件来动态拼接sql语句的功能。它可以让开发者在xml文件里以标签的形式编写动态sql。更灵活地控制sql的执行避免写出冗余或不合法的sql语句。Mybatis提供了9种动态sql标签分别是 if根据表达式的值判断是否拼接某个sql片段。choose类似于Java中的switch语句从多个when子句中选择一个满足条件的执行如果都不满足就执行otherwise子句。trim用于修改sql语句的前缀或后缀可以添加或移除某些字符。where用于生成where子句只有当至少有一个子元素返回sql片段时才插入where并且会自动去除多余的and或or。set用于生成set子句用于动态更新语句只有当至少有一个子元素返回sql片段时才插入set并且会自动去除多余的逗号。foreach用于遍历集合或数组生成in条件或批量插入语句。bind用于创建OGNL表达式以外的变量可以在后面的sql语句中引用。when配合choose使用表示一个分支条件。otherwise配合choose使用表示默认分支条件。 Mybatis动态sql的执行原理是基于OGNL表达式和XML解析技术。Mybatis会从sql参数对象中计算OGNL表达式的值并根据值的结果动态拼接sql语句。然后Mybatis会使用XML解析器解析XML映射文件中的动态sql标签并生成对应的sql节点。最后Mybatis会将sql节点转换为可执行的PreparedStatement对象并执行数据库操作。 xml映射文件中不同的xml映射文件id是否可以重复 不同的xml映射文件如果配置了namespace那么id可以重复如果没有配置namespace那么id不能重复 原因是namespaceid是作为MapString,MapperStatement的key使用的如果没有namespace就剩下id那么id重复会导致数据互相覆盖。有了namespace自然id就可以重复namespace不同namespaceid自然也不同。 Mybatis实现一对一有几种方式具体是怎么操作的 有联合查询和嵌套查询两种方式。 联合查询是几个表联合查询通过在resultMap里面配置association节点配置一对一的类就可以完成 嵌套查询是先查一个表根据这个表里面的结果的外键id再去另外一个表里面查询数据也是通过association配置但另外一个表的查询是通过select配置的。 Mybatis实现一对多有几种方式具体是怎么操作的 有联合查询和嵌套查询两种方式。 联合查询是几个表联合查询只查询一次通过在resultMap里面的collection节点配置一对多的类就可以完成 嵌套查询是先查一个表根据这个表里面的结果的外键id再去另外一个表里面查询数据也是通过collection但另外一个表的查询是通过select配置的。 Mybatis一级二级缓存 根据web搜索结果Mybatis的一级缓存和二级缓存的区别如下 一级缓存是SqlSession级别的缓存缓存的数据只在SqlSession内有效当SqlSession关闭或者执行增删改操作时缓存会被清空。一级缓存默认是开启的可以通过设置localCacheScope为STATEMENT来关闭。二级缓存是mapper级别的缓存同一个namespace下的所有操作语句都影响着同一个Cache即二级缓存被多个SqlSession共享。二级缓存默认是关闭的需要在mapper.xml中配置标签来开启。一级缓存和二级缓存的查询顺序是二级缓存 - 一级缓存 - 数据库。当开启二级缓存后会使用CachingExecutor装饰Executor先在CachingExecutor中进行二级缓存的查询再进入一级缓存的查询流程。一级缓存和二级缓存都可以提高查询效率避免频繁访问数据库。但是也要注意缓存数据的更新和失效问题避免出现脏读或者不一致的情况。 使用MyBatis的Mapper接口调用时有哪些要求 1、Mapper接口方法名和mapper.xml中定义的每个sql的id相同 2、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType类型相同 3、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同 4、Mapper.xml文件中的namespace即是mapper接口的类路径。 hotspot比jit zing虚拟机 https://blog.csdn.net/21aspnet/article/details/88667880 原生代码Native Code是电脑的CPU可直接解读的数据也就是机器码machine code。原生代码是计算机可以直接执行并且执行速度最快的代码。字节码Bytecode是一种中间码它比机器码更抽象需要直译器转译后才能成为机器码的中间代码。字节码通常不像源码一样可以让人阅读而是编码后的数值常量、引用、指令等构成的序列。字节码是解释器能够理解的代码但是对于CPU来说它是无法直接执行的。所以字节码还需要被解释器转换成机器码才能被CPU执行。 原生代码比字节码效率高的原因是原生代码不需要经过任何转换就可以被CPU直接执行而字节码需要经过解释器的转换才能变成机器码这个过程会消耗一定的时间和资源。另外原生代码是针对特定平台和硬件优化过的而字节码是与特定机器码无关的所以原生代码可能会利用一些平台或硬件特有的优势来提高性能。 select user_id, count(*) daysCount from ( select distinct user_id, sales_date, dense_rank() over ( partition by user_id order by sales_date ) rn from sales_tb ) a group by user_id, DATE_ADD (sales_date, INTERVAL - rn day) having daysCount 2 order by user_id
http://www.w-s-a.com/news/355908/

相关文章:

  • 沈阳红方城网站建设专业的微网站哪家好
  • 医院网站asp东营信息发布平台
  • 网站全站建设开题报告范文南京本地网站
  • 网站漏洞扫描工具wampserver集成环境搭建了一个织梦cms网站
  • 如何在局域网上做网站宁波设计公司排行榜
  • 自己的电脑做网站服务器吗百度搜索风云榜总榜
  • 做化妆品的一些网站企业网站建设与营运计划书
  • 重庆速代网络科技seo整站优化服务教程
  • 成都比较好的装修设计公司seo3的空间构型
  • 开发商建设审批网站成都创意设计公司
  • 百度快照比网站上线时间早wordpress新建阅读量字段
  • 国家工程建设标准化协会网站网站开发工具有
  • 上海网站建设集中公关公司组织架构图
  • wordpress副标题的作用百度网站标题优化
  • 大连哪家公司做网站比较好wordpress 判断用户组
  • 网站空间1g多少钱东莞公司高端网站建设
  • 网站服务器出错是什么意思做餐饮酒店网站
  • 房地产网站建设策划方案网站建设教程简笔画
  • 3d室内设计软件wordpress本地优化加速版
  • 南京高新区规划建设局网站石家庄哪里做网站比较好
  • 免费培训课程网站优化的方式
  • 做网站要固定电话在家自己做网站
  • 招聘网站开发视频新手如何做网站维护
  • flash 网站欣赏国外做的比较好的网站有哪些
  • 推广一个网站需要什么官网首页设计
  • 淘宝建设网站的理由企业官网建设哪家好
  • 青岛网站推wordpress主题切换
  • 天元建设集团有限公司资质郑州网站seo推广
  • 免费网站后台管理系统模板下载百度网盘app下载安装
  • 开封网站建设培训郑州高端网站建设哪家好