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

网站开发的主要内容图文广告设计学徒一般要学多久

网站开发的主要内容,图文广告设计学徒一般要学多久,天津建设与管理局网站,胶州家园网站建设1.MyBatis 中 #{}和 ${}的区别是什么#xff1f; #{} 是预编译的占位符#xff0c;MyBatis会将其转化为一个占位符参数#xff0c;安全性较高#xff0c;可以防止 SQL注入#xff1b; ${} 是字符串替换#xff0c;直接将内容替换到SQL语句中#xff0c;不会进行参数处理…1.MyBatis 中 #{}和 ${}的区别是什么 #{} 是预编译的占位符MyBatis会将其转化为一个占位符参数安全性较高可以防止 SQL注入 ${} 是字符串替换直接将内容替换到SQL语句中不会进行参数处理潜在风险是 SQL注入 在 MyBatis 中#{} 和 ${} 都被用作参数绑定但它们在处理参数的方式和安全性上有很大的区别 ${}这是一个基本的字符串替换操作。比如你在 SQL 语句中写${column}MyBatis 就会直接把这个${column}替换成参数的值。由于它的这种直接替换特性它可能会引起 SQL 注入问题。比如如果用户恶意设置参数的值为一个 SQL 语句片段那么他就可以通过这种方式执行任意的 SQL 语句这就造成了严重的安全问题。因此我们需要非常小心地使用${}尽量避免在不受信任的输入或用户控制的输入上使用它。#{}MyBatis 会使用预编译语句PreparedStatement的方式通过在 SQL 中构建一个参数占位符?并设值参数来防止 SQL 注入来安全地处理#{}中的值。这也是 MyBatis 推荐的方式来处理动态参数。你可以在查询中写#{userId}然后在你的参数映射中有一个userId的字段MyBatis 就会安全地为你的 SQL 语句设值。 总结一下#{}比${}更安全因为它通过预编译的方式处理参数可以防止 SQL 注入。除非在你完全确定没有 SQL 注入风险的情况下一般情况下我们更推荐使用#{}。 2.MyBatis 有几种分页方式 MyBatis有两种分页方式一种是使用 RowBounds 进行内存分页另一种是使用插件进行物理分页。 RowBounds 是 MyBatis 中的一个分页对象它可以将所有符合条件的数据全都查询到内存中然后在内存中对数据进行分页。然而这种分页操作是对 ResultSet 结果集进行分页也就是人们常说的逻辑分页而非物理分页效率低下不建议使用。 3.RowBounds 是一次性查询全部结果吗为什么 是的 RowBounds 方式是一次性查询全部结果MyBatis会将整个结果集读取到内存中 然后进行分页操作。 Mybatis可以通过传递RowBounds对象来进行数据库数据的分页操作然而遗憾的是该分页操作是对ResultSet结果集进行分页也就是人们常说的逻辑分页而非物理分页物理分页当然就是我们在sql语句中指定limit和offset值。 4.MyBatis 逻辑分页和物理分页的区别是什么 逻辑分页是在数据库中查询所有结果然后在应用层进行分页物理分页是通过数据库的特 定语法如 LIMIT 、 OFFSET 进行分页只查询所需数据。 逻辑分页是在应用程序层面进行的它首先从数据库查询出所有的结果然后在应用程序中对这些结果进行分页显示。这种方法的优点是简单易用适用于数据量较小的情况。然而如果数据量很大查询所有的数据可能会消耗大量的内存和时间。 物理分页是利用数据库的特定语法如SQL中的LIMIT和OFFSET进行的这意味着数据库直接返回所需的数据记录而不是所有的数据。这种方法的优点是效率高适用于处理大量数据。然而使用不同的数据库系统可能会对LIMIT和OFFSET等关键字的支持程度不同因此可能需要进行一些调整。 5.MyBatis 是否支持延迟加载延迟加载的原理是什么 是的MyBatis支持延迟加载。延迟加载是指在需要时才真正查询关联对象原理是在查询 主对象时只查询主对象的数据当访问关联对象属性时再根据需要进行关联查询。 MyBatis 支持延迟加载。延迟加载Lazy Loading是一种常用的优化技术用于在需要时才加载数据。在 MyBatis 中可以通过配置来实现延迟加载。 延迟加载的原理是在初始加载时只加载必要的少量数据然后在需要的时候才加载更多的数据。这样可以减少初始加载的时间和内存消耗提高应用的启动速度和响应速度。 在 MyBatis 中可以通过配置 fetchType 属性来实现延迟加载。例如可以将 fetchType 设置为 lazy 来实现延迟加载。当设置为 lazy 时MyBatis 只会加载与当前查询结果相关的数据而不是一次性加载所有数据。 延迟加载的原理是基于对象代理实现的。在 MyBatis 中可以通过配置 association 和 collection 元素来实现对象代理。当配置了这些元素后MyBatis 会为相关对象生成代理对象从而实现在需要时才加载数据的效果。 需要注意的是延迟加载可能会增加数据库的查询次数从而影响应用的性能。因此在使用延迟加载时需要根据实际情况进行权衡和优化。 6.说一下 MyBatis 的一级缓存和二级缓存 一级缓存是指在同一个SqlSession中查询的结果会被缓存起来以提高性能二级缓存是 指多个SqlSession之间共享缓存可以跨Session共享数据。   MyBatis 是一个优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。 在 MyBatis 中一级缓存和二级缓存是两个重要的概念。 一级缓存也称为 SqlSession 级别的缓存。每一个新的 SqlSession 有自己的一级缓存当 SqlSession 进行查询时会先从一级缓存中查找是否已经存在相应的查询结果如果存在则直接返回如果不存在再去数据库进行查询并将查询结果存入一级缓存。一级缓存的生命周期和 SqlSession 保持一致当 SqlSession 被关闭或清空那么一级缓存就会消失。二级缓存也称为 Mapper 级别的缓存。二级缓存是多个 SqlSession 共享的因此不同的 SqlSession 可以访问、修改和更新二级缓存中的数据。二级缓存的数据会持久化到磁盘中因此可以跨多个 SqlSession 和多个会话对象进行共享。 MyBatis 的二级缓存可以跨多个 SqlSession因此它可以在多个数据库之间进行数据共享。然而需要注意的是由于二级缓存的数据是共享的因此如果一个 SqlSession 对数据进行修改那么这个修改会反映到其他所有的 SqlSession 中。为了避免这种情况可以在进行修改操作时关闭二级缓存。 总的来说一级缓存和二级缓存都是 MyBatis 中非常重要的特性它们可以提高数据库查询的效率减少对数据库的访问次数。然而在使用它们时需要注意数据的共享性和一致性问题。 7.MyBatis 和 Hibernate 的区别有哪些 MyBatis是基于SQL和映射配置的持久化框架需要手写SQL更加灵活Hibernate是 ORM框架将Java对象映射到数据库不需要写SQL更加面向对象。 MyBatis和Hibernate是两种广泛使用的Java持久化框架它们的主要区别体现在以下方面 原理不同MyBatis是一种基于SQL语句的持久化框架通过预编译SQL语句并执行来实现数据库访问。而Hibernate是一种基于对象的持久化框架通过将Java对象映射到数据库表来实现数据库访问。使用方式不同MyBatis的使用方式更加灵活允许用户编写自己的SQL语句并执行支持多种数据库查询方式如普通查询、存储过程等。Hibernate也有自己的SQL书写方式但相较于MyBatisHibernate更加注重映射机制开发者无需关心SQL的生成与结果映射可以更专注于业务流程。开发难度不同总体来说Hibernate的开发难度要大于Mybatis。这主要是因为Hibernate比较复杂、庞大学习周期较长。而Mybatis相对简单一些并且Mybatis主要依赖于sql的书写让开发者感觉更熟悉。日志统计和数据库扩展性Mybatis的SQL是手动编写的所以可以按需求指定查询的字段。不过没有自己的日志统计所以要借助log4j来记录日志。Hibernate也可以自己写SQL来指定需要查询的字段但这样就破坏了Hibernate开发的简洁性。不过Hibernate具有自己的日志统计。另外Mybatis由于所有SQL都是依赖数据库书写的所以扩展性、迁移性比较差。 综上所述MyBatis和Hibernate各有其优点和缺点。在选择使用时需要根据具体的项目需求和个人经验进行判断。 8.MyBatis有哪些执行器Executor MyBatis有三种执行器分别是 SimpleExecutor 、 ReuseExecutor 和 BatchExecutor 用于控制SQL语句的执行。 MyBatis 在其内部实现中使用了三种类型的执行器Executor分别是 SimpleExecutorReuseExecutor 和 BatchExecutor。 SimpleExecutor这是一个简单的执行器每次SQL语句都会重新生成SQL并且会创建新的结果映射器Mapper对象对于一些非常简单不需要映射的操作比较有用。ReuseExecutor这是MyBatis默认的执行器它会重用预处理语句PreparedStatement和结果映射器Mapper对象减少了创建和销毁对象的次数提高了性能。BatchExecutor这是批量执行器它主要用于执行批量操作可以一次执行多条SQL语句。 9.MyBatis 分页插件的实现原理是什么 MyBatis分页插件通过拦截SQL执行将原始SQL改写为带有分页参数的SQL然后执行修改后的SQL最终返回分页结果。 MyBatis 分页插件的实现原理主要是利用了 MyBatis 的插件机制。分页插件通过拦截 MyBatis 的执行语句在 SQL 执行前后进行相应的操作以达到分页的效果。 具体来说分页插件首先通过实现 MyBatis 的插件接口如 Interceptor来拦截待执行的 SQL 语句。在拦截到 SQL 语句后插件会根据 SQL 语句的内容和参数生成对应的物理分页语句和物理分页参数。然后插件会将这些物理分页语句和参数插入到原始 SQL 语句中并继续执行 SQL 语句。 在执行物理分页语句时插件会根据数据库方言dialect的不同使用不同的物理分页语法。例如对于 MySQL 数据库可以使用 LIMIT 和 OFFSET 关键字对于 Oracle 数据库可以使用 ROWNUM 关键字等。 另外为了提高性能分页插件通常会缓存已经执行过的 SQL 语句和对应的物理分页语句和参数。这样在下次执行相同 SQL 语句时可以直接使用缓存的物理分页语句和参数避免了重复的生成和执行过程。 需要注意的是虽然物理分页可以提高查询效率但也可能会增加数据库的负载。因此在使用物理分页时需要根据具体的应用场景和数据库性能来权衡选择。 10.MyBatis 如何编写一个自定义插件 编写MyBatis自定义插件需要实现 Interceptor 接口然后通过在MyBatis配置文件中配置 插件使其生效。插件可以在SQL执行前后进行拦截实现自定义的功能。 MyBatis 允许用户编写自定义的插件以便对 SQL 语句进行更细粒度的控制和扩展。以下是一个简单的 MyBatis 自定义插件的示例 首先创建一个新的 Java 类并让它实现 Interceptor 接口 import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.plugin.*; import java.sql.Connection; import java.util.Properties; Intercepts({ Signature(type StatementHandler.class, method prepare, args {Connection.class, Integer.class}) }) public class MyInterceptor implements Interceptor { Override public Object intercept(Invocation invocation) throws Throwable { StatementHandler statementHandler (StatementHandler) invocation.getTarget(); // 这里可以对 SQL 语句进行修改或扩展 // ... // 继续执行原始操作 return invocation.proceed(); } Override public Object plugin(Object target) { if (target instanceof StatementHandler) { return Plugin.wrap(target, this); } else { return target; } } Override public void setProperties(Properties properties) { // 可以设置自定义的属性 // ... } } 在 intercept 方法中你可以通过 StatementHandler 对象获取到 SQL 语句然后对 SQL 语句进行修改或扩展。这里是一个简单的示例它将 SQL 语句中的所有 SELECT 关键字替换为 SELECT * FROM Override public Object intercept(Invocation invocation) throws Throwable { StatementHandler statementHandler (StatementHandler) invocation.getTarget(); String sql statementHandler.getBoundSql().getSql(); String newSql sql.replace(SELECT, SELECT * FROM); // 设置新的 SQL 语句到 StatementHandler 中以便后续执行 ((BoundSql) statementHandler.getBoundSql()).setSql(newSql); // 继续执行原始操作 return invocation.proceed(); }
http://www.dnsts.com.cn/news/103195.html

相关文章:

  • 兰州市做网站的深圳企业名录深圳黄页
  • 门户网站是什么意思?wordpress閱讀主题
  • 什么是网站建设需求分析永康新站优化
  • 拼多多网站建设的目的全国网站建设
  • 湖北网站设计制作多少钱选择做华为网站的目的和意义
  • 用php做美食网站有哪些网站底部连接怎么做
  • 建设文化网站好处百度一下你就知道官方网站
  • 网页设计与网站建设教学视频网络营销的目的
  • 可以建网站的网络公司有哪些网站建设移动端
  • 福建省建设执业注册资格管理中心网站广州自助公司建网站企业
  • 专门做音乐的网站WordPress链接变色
  • phpcms学校网站模板海外网页
  • 备案查询网站中山自助建站系统
  • 现在做一个网站大概多少钱抚顺网站建设费用
  • 西安网站建设发布腾讯云服务器搭建网站
  • 福州贸易公司网站制作南宁外贸网站建设
  • 昆明免费网站制作汕头好的建站网站
  • 网站制作的公司哪家效果好wordpress+挂马+清除
  • 高明网站开发志愿者网站 建设方案
  • 金华做网站网站建设 流程图
  • 北京做网站的好公司有哪些wordpress 隐私设置
  • 网站开发研究内容怎么写商丘整站优化
  • 溧阳做网站价格商业空间设计案例分析
  • 如何入侵网站后台网站建设公司兴田德润专业
  • 自己做国际网站wordpress完整网址
  • 小说网站做封面要钱吗防疫优化措施
  • 企业响应式网站建设报价郑州装修公司排名推荐
  • 建站公司论坛班级网站开发环境
  • 广州网站开发建设大型网站怎样做优化PHP
  • 公司没有销售网站怎么做业务做好网站外链建设的最新方法