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

手机网站 制作网站开发合同免费模板

手机网站 制作,网站开发合同免费模板,网站3d特效源码,wordpress上加地图目录 1.什么是Mybatis#xff1f; 2.Mybatis的优缺点#xff1f; 3.#{} 和 ${} 的区别是什么#xff1f; 4.xml 映射文件中有哪些标签#xff1f; 5.模糊查询 like 语句该怎么写? 6.Mapper 接口的工作原理是什么#xff1f;Mapper 接口里的方法#xff0c;参数不同…目录 1.什么是Mybatis 2.Mybatis的优缺点 3.#{} 和 ${} 的区别是什么 4.xml 映射文件中有哪些标签 5.模糊查询 like 语句该怎么写? 6.Mapper 接口的工作原理是什么Mapper 接口里的方法参数不同时方法能重载吗 7.MyBatis 是如何进行分页的分页插件的原理是什么 8.Mybatis是如何将sql执行结果封装为目标对象并返回的都有哪些映射形式 9.如何执行批量插入?能返回主键id吗 10.MyBatis 动态 sql 是做什么的都有哪些动态 sql能简述一下动态 sql 的执行原理不 11.MyBatis 能执行一对一、一对多的关联查询吗都有哪些实现方式以及它们之间的区别。 12.MyBatis 是否支持延迟加载如果支持它的实现原理是什么 13.MyBatis 的 xml 映射文件中不同的 xml 映射文件的id 是否可以重复 14.MyBatis 都有哪些 Executor 执行器它们之间的区别是什么 15.MyBatis 中如何指定使用哪一种 Executor 执行器 16.MyBatis 是否可以映射 Enum 枚举类 17.简述 MyBatis 的 xml 映射文件和 MyBatis 内部数据结构之间的映射关系 18.为什么说 MyBatis 是半自动 ORM 映射工具它与全自动的区别在哪里 19.Mybatis 的一级、二级缓存 20.简述 Mybatis 的插件运行原理以及如何编写一个插件 1.什么是Mybatis Mybatis是一种流行的Java对象关系映射ORM框架它将Java对象映射到关系型数据库中的表格。它提供了一种简单的方式来编写SQL语句并将其映射到Java对象同时避免了很多传统JDBC的冗长代码。在使用Mybatis时开发人员可以编写简洁的SQL语句并且可以使用动态SQL和参数映射来进行高效和灵活的数据操作。 除了ORM之外Mybatis还提供了许多高级功能如缓存机制、批量操作、分页等等。它可以与多种数据库如MySQL、Oracle、SQL Server等和Web框架如Spring、Spring Boot等无缝集成并被广泛应用于各种规模的应用程序中。 2.Mybatis的优缺点 Mybatis的优点 灵活性强Mybatis允许开发人员编写自定义SQL语句能够根据项目需求进行灵活配置和扩展同时可以避免框架的约束和限制。可读性好Mybatis使用简洁的XML或注解配置方式可以清晰地表达SQL语句和数据映射关系提高代码的可读性和可维护性。性能高Mybatis提供了高效的缓存机制能够有效地减少数据库操作的次数并支持批量操作和分页查询等功能能够提高应用程序的性能。易于集成Mybatis可以与多种数据库和Web框架无缝集成能够适应不同的应用场景同时也有完善的文档和社区支持。 Mybatis的缺点 学习成本较高相比于其他ORM框架Mybatis需要开发人员熟悉SQL语句的编写和调优需要一定的学习成本。配置较为繁琐Mybatis的配置文件较多需要开发人员仔细配置否则容易出现错误。SQL语句调试困难Mybatis将SQL语句和Java代码分离当SQL语句出现问题时调试起来相对困难。不适合小型项目对于小型项目而言Mybatis的优势可能不够明显反而会增加项目的开发成本和复杂度。 3.#{} 和 ${} 的区别是什么 #{}使用预编译的方式来处理SQL语句中的参数将传入的参数值以安全的方式替换掉占位符。在SQL语句执行前会先将#{}替换为一个问号占位符然后使用PreparedStatement进行预编译最后将实际的参数值设置到预编译语句中。使用#{}可以有效地防止SQL注入等安全问题同时也可以避免一些数据类型转换的问题。 ${}则是直接将参数值替换到SQL语句中。在SQL语句执行前会直接将${}替换为对应的参数值这种方式的好处是可以直接拼接字符串但也带来了一些安全问题。使用${}时需要开发人员自行保证参数的合法性否则可能会出现SQL注入等安全问题。 例如 SELECT * FROM user WHERE name ${name} 如果$name的值是 admin OR 11则该SQL语句会查询出所有用户的数据而不是仅查询用户名为admin的用户数据造成了安全风险。 4.xml 映射文件中有哪些标签 CRUD操作标签包括select、insert、update、delete等标签用于定义对数据库的增、删、改、查操作。这些标签都包括id、parameterType、resultType等属性用于指定SQL语句的ID、参数类型和返回结果类型等信息。结果集映射标签包括resultMap和result标签用于定义Java对象和数据库表之间的映射关系可以将查询结果集映射为Java对象的属性。resultMap标签用于定义映射规则result标签用于定义单个属性的映射关系。SQL片段标签包括sql和include标签用于定义可重用的SQL代码片段。sql标签用于定义SQL语句的代码片段可以在其他SQL语句中使用include标签用于将其他XML片段引入到当前XML文件中可以用于复用其他XML片段中定义的SQL语句。动态SQL标签包括if、choose、when、otherwise、where、set、foreach和bind等标签用于动态生成SQL语句中的条件判断、循环、赋值等操作。这些标签可以根据参数值动态生成SQL语句提高SQL语句的复用性和可维护性。 5.模糊查询 like 语句该怎么写? 下面是两种常见的模糊查询方式 1.使用占位符%进行模糊查询 SQL语句示例 SELECT * FROM table WHERE column LIKE %keyword%; XML映射文件示例 select idselectByKeyword parameterTypejava.lang.String resultTypecom.example.model.TableSELECT * FROM table WHERE column LIKE CONCAT(%,#{keyword},%) /select 在XML映射文件和注解中可以使用CONCAT函数将占位符与参数进行拼接生成完整的LIKE语句。 2.使用$符号进行模糊查询 SQL语句示例 SELECT * FROM table WHERE column LIKE %${keyword}%; XML映射文件示例 select idselectByKeyword parameterTypejava.lang.String resultTypecom.example.model.TableSELECT * FROM table WHERE column LIKE %${keyword}% /select 在XML映射文件和注解中可以使用${}占位符将参数直接拼接到SQL语句中生成完整的LIKE语句。需要注意的是使用${}方式进行模糊查询存在SQL注入的风险不建议在生产环境中使用。 6.Mapper 接口的工作原理是什么Mapper 接口里的方法参数不同时方法能重载吗 Mapper接口是Mybatis提供的一种编写SQL映射的方式可以将SQL语句与Java方法进行关联使得Java开发人员可以使用面向对象的方式来编写数据访问代码。Mapper接口的工作原理是 定义Mapper接口首先开发人员需要定义一个Java接口其中每个方法代表一条SQL语句方法名与SQL语句的ID一致方法的参数和返回值类型与SQL语句的参数和返回值类型一致。映射Mapper接口然后将Mapper接口与SQL语句进行映射可以使用XML文件或注解的方式进行映射。映射的方式包括指定SQL语句的ID、参数类型、返回值类型等信息。使用Mapper接口最后在Java代码中使用Mapper接口来进行数据访问通过Mybatis框架将Mapper接口中的方法与SQL语句进行绑定实现对数据库的访问操作。 至于Mapper接口中的方法重载问题答案是不可以。在Mapper接口中每个方法名对应着一个唯一的SQL语句ID方法名相同会造成冲突因此Mapper接口中的方法不允许重载。如果需要执行不同的SQL语句可以使用不同的方法名来实现。 7.MyBatis 是如何进行分页的分页插件的原理是什么 1.MyBatis 使用 RowBounds 对象进行分页它是针对 ResultSet 结果集执行的内存分页而非物理分页 2.MyBatis可以使用SQL语句中的LIMIT关键字实现简单的分页但是对于大数据量的分页查询需要使用更高效的方法。 3.MyBatis提供了一种基于拦截器的分页插件来优化分页查询。 分页插件的原理是在MyBatis执行SQL语句之前对其进行拦截并修改SQL语句从而实现分页查询的功能。具体步骤如下 拦截器初始化插件在MyBatis启动时进行初始化创建拦截器对象并将其添加到MyBatis的拦截器链中。拦截器拦截当进行分页查询时拦截器会拦截对应的SQL语句并在其中添加分页的限制条件例如使用LIMIT关键字进行分页。执行SQL语句修改后的SQL语句会被传递给MyBatis的执行器执行器会将SQL语句发送到数据库进行查询并返回查询结果。封装查询结果查询结果会被封装到MyBatis的结果对象中并返回给调用方。 目前比较流行的MyBatis分页插件是PageHelper其基于拦截器的原理在拦截器中实现了分页查询的逻辑并提供了丰富的配置选项和API可以方便地实现各种复杂的分页查询需求。使用PageHelper进行分页查询的示例代码如下 // 指定分页查询的页码和每页记录数 PageHelper.startPage(pageNum, pageSize); // 执行查询操作返回分页查询结果 ListUser userList userDao.selectUserList(); // 封装分页查询结果 PageInfoUser pageInfo new PageInfo(userList); 在这段代码中我们使用了PageHelper的startPage方法来指定分页查询的页码和每页记录数然后执行普通的查询操作PageHelper会自动拦截并修改SQL语句实现分页查询的功能。最后我们将查询结果封装到PageInfo对象中以便进行分页信息的显示和处理。 8.Mybatis是如何将sql执行结果封装为目标对象并返回的都有哪些映射形式 MyBatis将SQL执行结果封装为目标对象并返回主要通过以下两个步骤来完成 映射SQL执行结果到结果集对象在执行SQL查询之后MyBatis将结果集中的每一行映射为一个结果集对象并将所有结果集对象封装到一个List集合中。映射结果集对象到目标对象MyBatis根据配置文件中的映射关系将结果集对象的属性值映射到目标对象的属性中并返回映射后的目标对象。 MyBatis支持多种映射形式常用的有以下三种 基于XML的映射通过XML配置文件来描述结果集对象和目标对象之间的映射关系。基于注解的映射通过Java注解来描述结果集对象和目标对象之间的映射关系。基于API的映射通过Java代码来描述结果集对象和目标对象之间的映射关系。 其中基于XML的映射是最常用的一种方式。在XML配置文件中我们可以使用resultMap标签来定义结果集对象和目标对象之间的映射关系例如 !-- 定义结果集对象 -- resultMap iduserResultMap typecom.example.Userresult propertyid columnuser_id /result propertyname columnuser_name /result propertyage columnuser_age / /resultMap!-- 执行SQL查询 -- select idselectUserList resultMapuserResultMapSELECT user_id, user_name, user_age FROM user /select在这段代码中我们首先定义了一个名为userResultMap的resultMap标签用于描述结果集对象和目标对象之间的映射关系。其中type属性指定了目标对象的类型result标签用于描述每个属性之间的映射关系。然后在执行SQL查询时我们指定了resultMap属性为userResultMap表示使用这个映射关系来将结果集映射为目标对象。 除了resultMap标签MyBatis还提供了其他的映射标签例如result、association、collection等可以根据实际需要来灵活配置映射关系。 9.如何执行批量插入?能返回主键id吗 要执行批量插入操作可以使用 MyBatis 提供的 batch 执行器和 foreach 标签。 首先我们需要将需要插入的数据封装到一个 List 或数组中。然后通过 foreach 标签将数据逐个插入到数据库中。 示例如下 insert idbatchInsertUsers parameterTypejava.util.Listforeach collectionlist itemuser indexindex separator;INSERT INTO user(name, age) VALUES(#{user.name}, #{user.age})/foreach /insert 在这个示例中我们定义了一个名为 batchInsertUsers 的 SQL 语句该语句接受一个 List 类型的参数。通过 foreach 标签将 List 中的每个元素逐个插入到数据库中。 如果需要返回插入数据的主键 ID可以使用 MyBatis 提供的 useGeneratedKeys 和 keyProperty 属性。 示例如下 insert idbatchInsertUsers parameterTypejava.util.List useGeneratedKeystrue keyPropertyidforeach collectionlist itemuser indexindex separator;INSERT INTO user(name, age) VALUES(#{user.name}, #{user.age})/foreach /insert 在这个示例中我们在 SQL 语句中添加了 useGeneratedKeystrue 属性表示使用数据库自动生成的主键 ID。然后通过 keyProperty 属性将主键 ID 映射到 Java 对象的属性中。执行完成后MyBatis 会将插入数据的主键 ID 封装到 Java 对象中返回。注意在使用自动生成主键 ID 时需要确保数据库表的主键字段设置为自增长或序列类型。 10.MyBatis 动态 sql 是做什么的都有哪些动态 sql能简述一下动态 sql 的执行原理不 MyBatis 动态 SQL 是为了解决 SQL 语句灵活性不足的问题而提出的一种技术。动态 SQL 可以根据条件拼接 SQL 语句从而满足不同的查询需求。MyBatis 提供了以下几种动态 SQL 标签 if条件判断标签当条件成立时才执行其中的 SQL 语句。choose、when、otherwise选择判断标签根据条件选择不同的 SQL 语句执行。trim、where、setSQL 语句修饰标签用于在 SQL 语句的前后加上修饰字符如 WHERE、AND、OR 等。foreach遍历标签用于遍历一个集合并将集合中的元素添加到 SQL 语句中。 动态 SQL 的执行原理是当 MyBatis 执行动态 SQL 语句时会将 SQL 语句和参数传递给 SQL 解析器进行解析。SQL 解析器会根据 SQL 语句中的动态标签和参数的值生成一个完整的 SQL 语句。然后MyBatis 将生成的 SQL 语句和参数传递给 JDBC 驱动程序进行执行。最终JDBC 驱动程序将执行结果返回给 MyBatis。 使用动态 SQL 可以使 SQL 语句更灵活、更具可读性和可维护性也可以提高应用程序的性能和效率。但是需要注意使用动态 SQL 时要避免 SQL 注入攻击。建议使用 MyBatis 提供的参数绑定功能将参数值与 SQL 语句分离从而避免 SQL 注入攻击。 11.MyBatis 能执行一对一、一对多的关联查询吗都有哪些实现方式以及它们之间的区别。 是的MyBatis 可以执行一对一、一对多的关联查询。 在 MyBatis 中实现一对一、一对多关联查询的方式有两种 嵌套查询Nested Query通过在 ResultMap 中定义关联对象的 ResultMap然后在 SQL 语句中使用嵌套查询通常使用子查询来完成关联查询。这种方式适用于数据量较小的场景但如果数据量很大可能会影响查询性能。嵌套结果Nested Results通过在 ResultMap 中使用 Association 和 Collection 标签定义关联对象的 ResultMap然后通过查询结果集的方式来完成关联查询。这种方式适用于数据量较大的场景因为它可以在一次 SQL 查询中完成关联查询从而提高查询性能。 两种方式的区别在于执行方式和性能。嵌套查询会执行多条 SQL 语句每个 SQL 语句返回一个结果集最终将结果集合并为一个对象而嵌套结果只执行一条 SQL 语句返回一个结果集然后将结果集中的数据映射到对象中。 总的来说如果数据量较小建议使用嵌套查询如果数据量较大建议使用嵌套结果。但需要注意的是使用嵌套结果时需要在 SQL 语句中使用 JOIN 操作所以需要对 SQL 语句的性能进行优化以避免出现慢查询的情况。同时在定义 ResultMap 和 SQL 语句时需要注意标签的使用和语句的正确性以确保关联查询的正确性和性能。 12.MyBatis 是否支持延迟加载如果支持它的实现原理是什么 对的MyBatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载其中 association 指的是一对一collection 指的是一对多查询。 在 MyBatis 配置文件中可以通过设置 lazyLoadingEnabled 属性来启用或禁用延迟加载。当 lazyLoadingEnabled 设置为 true 时MyBatis 将会开启延迟加载功能。此时只有在实际使用对象时才会触发关联对象的查询操作否则不会查询数据库。 MyBatis 延迟加载的原理是在执行主查询语句时仅仅查询主表的数据而不去查询关联表的数据将关联表的查询延迟到实际需要使用关联对象时再去查询。MyBatis 通过使用代理模式在查询主表数据时创建代理对象当实际需要使用关联对象时再去查询关联表数据并设置到代理对象中从而实现了延迟加载。 在具体实现时MyBatis 通过 CGLIB 或 JDK 动态代理来创建代理对象当代理对象的方法被调用时会触发代理拦截器的方法。拦截器会检查关联对象是否已经加载如果未加载则发送延迟加载的 SQL 语句查询关联表数据并将查询结果设置到代理对象中。这样在实际使用关联对象时就可以避免不必要的关联表查询从而提高查询性能。 需要注意的是MyBatis 的延迟加载功能需要配合 lazyLoadingEnabled 属性一起使用并且需要遵循一些规范和约束如不能在延迟加载时关闭 SqlSession不能使用多线程并发访问等。同时在使用延迟加载时也需要注意潜在的 N1 查询问题需要合理设计 SQL 查询语句避免不必要的性能损耗。 13.MyBatis 的 xml 映射文件中不同的 xml 映射文件的id 是否可以重复 不同的 xml 映射文件如果配置了 namespace那么 id 可以重复如果没有配置 namespace那么 id 不能重复毕竟 namespace 不是必须的只是最佳实践而已。 原因就是 namespaceid 是作为 MapString, MappedStatement 的 key 使用的如果没有 namespace就剩下 id那么id 重复会导致数据互相覆盖。有了 namespace自然 id 就可以重复namespace 不同namespaceid 自然也就不同。 14.MyBatis 都有哪些 Executor 执行器它们之间的区别是什么 MyBatis 有三种 Executor 执行器分别是 SimpleExecutor每执行一次 update 或 select就开启一个 Statement 对象用完立刻关闭 Statement 对象。ReuseExecutor执行 update 或 select以 sql 作为 key 查找 Statement 对象存在就使用不存在就创建用完后不关闭 Statement 对象而是放置于 Map 内供下一次使用。简言之就是重复使用 Statement 对象。BatchExecutor执行 update没有 selectJDBC 批处理不支持 select将所有 sql 都添加到批处理中addBatch()等待统一执行executeBatch()它缓存了多个 Statement 对象每个 Statement 对象都是 addBatch()完毕后等待逐一执行 executeBatch()批处理的。 其中SimpleExecutor 是每次请求都会创建一个 Statement 对象非常耗费性能ReuseExecutor 在多次请求中如果有相同的 SQL 语句就会复用 Statement 对象优化了性能BatchExecutor 是执行批量操作时使用可以一次性执行多条 SQL 语句优化性能。 在 MyBatis 中默认使用的是 SimpleExecutor 执行器。可以通过在 MyBatis 的配置文件中指定 setting namedefaultExecutorType valueREUSE/来改变默认的执行器。 15.MyBatis 中如何指定使用哪一种 Executor 执行器 在 MyBatis 的配置文件中可以通过 defaultExecutorType 属性来指定默认的执行器类型 另外针对每个 select、insert、update、delete 标签也可以通过 executorType 属性来指定该 SQL 语句使用的执行器类型如 select idselectUserById resultTypeUser executorTypeBATCHSELECT * FROM user WHERE id #{id} /select 16.MyBatis 是否可以映射 Enum 枚举类 是的MyBatis可以映射Java中的Enum枚举类。MyBatis提供了两种方式来映射Enum枚举类 1.使用EnumTypeHandlerEnumTypeHandler是MyBatis内置的类型处理器之一它可以将Java中的Enum枚举类与数据库中的数据进行相互转换。 例如在Mapper XML文件中可以这样使用EnumTypeHandler来映射枚举类型 resultMap iduserResultMap typeUserid propertyid columnid /result propertygender columngender typeHandlerorg.apache.ibatis.type.EnumTypeHandler/ /resultMap 在这个例子中我们将数据库中的gender列与Java中的User类的gender属性进行映射并使用EnumTypeHandler类型处理器进行转换。 2.使用注解EnumValue如果在枚举类中使用了EnumValue注解则MyBatis会自动将枚举值与数据库中的数据进行相互转换。 例如在定义枚举类时可以使用EnumValue注解来标识该枚举值对应的数据库中的值 public enum Gender {MALE(M),FEMALE(F);private String value;Gender(String value) {this.value value;}EnumValuepublic String getValue() {return value;} } 在这个例子中我们将MALE枚举值对应的数据库值设为M将FEMALE枚举值对应的数据库值设为F。然后在Mapper XML文件中就可以直接使用枚举类型进行映射例如 resultMap iduserResultMap typeUserid propertyid columnid /result propertygender columngender/ /resultMap 在这个例子中MyBatis会根据EnumValue注解中定义的值将数据库中的gender列与Java中的User类的gender属性进行相互转换。 17.简述 MyBatis 的 xml 映射文件和 MyBatis 内部数据结构之间的映射关系 MyBatis 将 XML 映射文件中的配置信息映射成 Configuration 对象该对象是 MyBatis 中重要的数据结构之一包含了所有的配置信息包括数据库连接信息、映射文件信息、缓存配置信息等等。Configuration 对象内部包含许多其他对象包括 MappedStatement封装了一个 SQL 语句的信息如 SQL 语句、输入参数、输出结果等。SqlSource封装了一个 SQL 语句的信息如 SQL 语句、输入参数等但不包含输出结果。BoundSql表示绑定了 SQL 语句和实际参数值的 SQL 语句包含了 SQL 语句、参数值等信息。ParameterMap表示参数映射关系的对象包含了参数的名称、类型等信息。ParameterMapping表示一个参数映射关系包含了参数名称、类型等信息。ResultMap表示结果集映射关系的对象包含了结果集字段与 Java 对象属性之间的映射关系。ResultMapping表示一个结果集映射关系包含了结果集字段与 Java 对象属性之间的映射关系。 在解析 XML 映射文件时MyBatis 会将 select、insert、update、delete 等标签解析成 MappedStatement 对象将 resultMap 标签解析成 ResultMap 对象将 parameterMap 标签解析成 ParameterMap 对象将 SQL 语句解析成 SqlSource 对象将 SQL 语句和实际参数值绑定后的结果解析成 BoundSql 对象并将这些对象保存在 Configuration 对象中。通过这些对象MyBatis 可以在执行 SQL 语句时进行参数映射、结果集映射等操作。 18.为什么说 MyBatis 是半自动 ORM 映射工具它与全自动的区别在哪里 MyBatis 是半自动 ORM 映射工具它需要手动编写 SQL 语句并将 SQL 语句和 Java 对象进行映射。相比之下Hibernate 是全自动 ORM 映射工具它使用对象关系映射技术将 Java 对象和数据库表进行映射无需手动编写 SQL 语句。因此在使用上MyBatis 更加灵活可以根据具体的需求编写灵活的 SQL 语句而 Hibernate 更加便捷可以快速地进行开发无需手动编写 SQL 语句。 另外Hibernate 支持级联操作和对象关系维护可以自动完成多个对象之间的关联操作而 MyBatis 不支持级联操作需要手动编写 SQL 语句来完成多个对象之间的关联操作。 19.Mybatis 的一级、二级缓存 一级缓存是指MyBatis在同一个SqlSession中执行相同SQL时会把查询到的结果缓存到内存中。当下次查询相同SQL时会直接从缓存中获取数据避免了重复查询数据库提高了查询效率。一级缓存是默认开启的也不需要进行额外配置。 二级缓存是指MyBatis在多个SqlSession之间共享缓存。它可以避免多个SqlSession重复查询同一条数据提高了应用的性能。但是使用二级缓存需要进行额外的配置包括在mapper.xml文件中配置cache标签以及在MyBatis的配置文件中开启二级缓存。需要注意的是二级缓存仅仅是对查询结果进行缓存对于insert、update、delete等操作并不会清空缓存。 需要注意的是虽然缓存可以提高应用的性能但是缓存也有可能带来一些问题如数据不一致等。因此在使用缓存时需要根据具体情况进行合理的配置。 20.简述 Mybatis 的插件运行原理以及如何编写一个插件 MyBatis 的插件机制可以在某些语句执行前、后拦截并执行自定义的处理逻辑可以用于日志记录、参数处理、数据加密等功能。其实现原理是基于 Java 动态代理技术实现的。 MyBatis 插件机制涉及以下两个接口 Interceptor定义了拦截器的基本方法包括 intercept()、plugin()、setProperties() 等。Invocation定义了被拦截方法的基本信息和执行方法的 invoke() 方法。 当创建 SqlSession 对象时MyBatis 会将插件按顺序进行包装最终生成一个包含了所有插件功能的代理对象当执行 SQL 语句时会先经过代理对象然后在代理对象中执行插件逻辑。 自定义插件需要实现 Interceptor 接口并且实现 intercept() 方法来拦截需要增强的方法然后使用 Intercepts 和 Signature 注解对拦截器进行配置。 例如定义一个打印 SQL 执行时间的插件实现过程如下 1.创建自定义插件类实现 Interceptor 接口 Intercepts(Signature(type StatementHandler.class, method update, args {Statement.class})) public class PrintSqlTimeInterceptor implements Interceptor {Overridepublic Object intercept(Invocation invocation) throws Throwable {long startTime System.currentTimeMillis();Object result invocation.proceed();long endTime System.currentTimeMillis();long sqlTime endTime - startTime;if (sqlTime 1000) {System.out.println(SQL execution time is too long: sqlTime ms);}return result;}Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}Overridepublic void setProperties(Properties properties) {} }2.使用 Intercepts 和 Signature 注解对拦截器进行配置。  Intercepts({Signature(type Executor.class, method query, args {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),Signature(type Executor.class, method update, args {MappedStatement.class, Object.class}) }) public class MyPlugin implements Interceptor {//... }3.在 MyBatis 配置文件中配置插件  pluginsplugin interceptorcom.example.PrintSqlTimeInterceptor/ /plugins注意插件的顺序也很重要MyBatis 将按照插件在配置文件中的顺序依次执行。
http://www.w-s-a.com/news/307603/

相关文章:

  • 福田区住房和建设局网站好搜搜索引擎
  • 平面设计师看的网站济南机场建设
  • 俄文网站开发翻译平台页面设计模板
  • 建设在线购物网站淮南电商网站建设价格
  • 龙泉市旅游门户网站建设wordpress faq插件
  • 网站的流程图贵阳做网站方舟网络
  • c 做网站开发实例wordpress 加上index
  • 济南seo网站推广搜索广告推广
  • 有关于网站建设的参考文献宁波seo网络推广公司
  • 网站设配色个人主页介绍文案
  • 网站seo相关设置优化网站建设的好处
  • 上海市建设工程安全生产协会网站郴州网站设计公司
  • 网站大型网页游戏自己搭建服务器做视频网站
  • 建立网站企业wordpress用户名密码破解
  • 网站管理助手建站教程国外网站做acm题目比较好
  • 网站开发框架排行专业网页制作服务商
  • 企业网站建设入账政务网站建设信息
  • 网络平台建设是什么江门排名优化怎么做
  • 响应式旅游网站模板下载网址做
  • 个人做网站名称可以随意更改吗惠州网站推广排名
  • 自己建设一个网站步骤网站认证怎么认证
  • 深圳建站公司开发费用沧州手机建站哪家好
  • 兰州网站设计公司排名百度怎么发布短视频
  • 大连模板开发建站泰州网站建设策划方案
  • 厦门好的网站设计局域网内建网站
  • 关键词那种网站正版网页游戏平台排行榜
  • 网站自助建设平台创建网址快捷方式
  • 坑梓网站建设包括哪些成都网站建设优创
  • 重庆网站seo公司哪家好超级优化大师
  • 成都网站建设推广详情邵阳市住房和城乡建设局网站