Mybatis
文章平均质量分 55
费曼乐园
这个作者很懒,什么都没留下…
展开
-
Mybatis 日志配置
要查看MyBatis的日志语句,您可以在一个包、一个完全限定的映射器类名、一个命名空间或一个完全限定的语句名称上启用日志记录。再次强调,如何做这取决于所使用的日志实现。我们将展示如何在SLF4J(Logback)中进行配置。配置日志服务只需添加一个或多个额外的配置文件(例如logback.xml),有时还需要添加一个新的JAR文件。以下示例配置将使用SLF4J(Logback)作为提供程序配置完整的日志服务。有2个步骤。原创 2023-12-29 18:22:32 · 774 阅读 · 0 评论 -
Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)
SelectBuilder和SqlBuilder类并不具有神奇的功能,但了解它们的工作原理很重要。SelectBuilder和SqlBuilder使用静态导入和ThreadLocal变量的组合,以实现干净的语法,可以轻松地与条件语句交织在一起使用。在3.2版本之前,我们采用了一种略有不同的方法,通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而,这种方法现在已被弃用,因为现代框架已经普及了使用构建器模式和匿名内部类的概念。原创 2023-12-29 14:16:14 · 747 阅读 · 0 评论 -
Mybatis SQL构建器类 - SQL类
需要注意的是,SQL类会将LIMIT、OFFSET、OFFSET n ROWS和FETCH FIRST n ROWS ONLY子句按照原样写入生成的语句中。换句话说,该库不会尝试对不直接支持这些子句的数据库进行规范化处理。因此,用户需要非常重视是否目标数据库支持这些子句。如果目标数据库不支持这些子句,那么使用这些支持很可能会创建出运行时错误的SQL语句。原创 2023-12-29 11:36:32 · 1055 阅读 · 0 评论 -
Mybatis SQL构建器类 - 问题&答案
正如你已经了解到的,MyBatis在其XML映射功能中有一个强大的解决方案来生成动态SQL。在这种情况下,MyBatis还有一个特性可以帮助您,避免陷入典型的加号、引号、换行、格式化问题和嵌套条件语句处理额外逗号或AND连接符的混乱中。这个示例有什么特别之处?嗯,如果你仔细看的话,它不必担心意外重复出现“AND”关键字,也不需要在“WHERE”和“AND”之间进行选择或者两者都不需要。SQL类会处理好理解何时需要插入“WHERE”,何时使用“AND”以及所有的字符串拼接工作。原创 2023-12-28 17:58:16 · 762 阅读 · 1 评论 -
Mybatis Java API - Mapper 注解
MyBatis自诞生以来一直是一个以XML驱动的框架。配置是基于XML的,映射语句也是在XML中定义的。随着MyBatis 3的推出,有了新的选择。MyBatis 3建立在一个全面而强大的基于Java的配置API之上。该配置API是基于XML的MyBatis配置以及新的基于注解的配置的基础。注解提供了一种简单的方式来实现简单的映射语句,而不引入过多的开销。注意:不幸的是,Java注解在表达能力和灵活性方面存在一定的限制。原创 2023-12-28 17:10:05 · 940 阅读 · 0 评论 -
Mybatis Java API - Using Mappers
您提到的插入(insert)、更新(update)、删除(delete)和查询(select)方法对于一些操作来说确实很强大,但它们也比较冗长、不具备类型安全性,并且对于IDE和单元测试的帮助并不如它们本应该有的那样。在上面的“入门”部分,我们已经看到了使用Mapper的示例。另外,唯一的限制是在层次结构中不能有两个接口具有相同的方法签名(无论如何,这都是一个不好的做法)。简而言之,每个Mapper方法的签名应该与它所关联的SqlSession方法相匹配,但不包含String类型的参数ID。原创 2023-12-28 16:00:37 · 411 阅读 · 0 评论 -
Mybatis Java API - Local Cache-本地缓存
请注意,当localCacheScope设置为SESSION时,MyBatis返回的是本地缓存中存储的相同对象的引用。对返回对象(例如列表等)的任何修改都会影响本地缓存的内容,进而影响会话期间从缓存中返回的值。每次创建新的会话(Session)时,MyBatis都会创建一个本地缓存,并将其附加到该会话上。在会话中执行的任何查询都将被存储在本地缓存中,因此后续相同查询和参数的执行将不会命中数据库。本地缓存用于解决循环引用问题,并加速重复嵌套查询的执行,因此它无法完全禁用。原创 2023-12-28 15:09:04 · 402 阅读 · 0 评论 -
Mybatis Java API - SqlSession
正如前面提到的,实例是MyBatis中最重要、最强大的类。它是您将找到执行语句、提交或回滚事务以及获取映射器实例的所有方法的地方。`SqlSession` 类上有超过二十个方法,让我们将它们分成更易理解的组别。原创 2023-12-28 14:39:16 · 1322 阅读 · 1 评论 -
Mybatis Java API - SqlSessionFactory
要提供自己的连接,请将Connection实例传递给connection参数。请注意,没有设置同时设置Connection和autoCommit的重载,因为MyBatis将使用提供的连接对象的当前设置。MyBatis使用一个Java枚举包装器(TransactionIsolationLevel)表示事务隔离级别,但除此之外,它们按预期工作,并支持JDBC的5个级别(NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ,SERIALIZABLE)。原创 2023-12-28 10:55:19 · 510 阅读 · 0 评论 -
Mybatis Java API - SqlSessionFactoryBuilder
前四种方法是最常见的,因为它们接受一个指向XML文档的InputStream实例,或者更具体地说,是上面提到的mybatis-config.xml文件。总结一下,前面四种方法在很大程度上是相同的,只是在允许您选择性地指定环境和/或属性时进行了覆盖。因此,了解优先级是非常重要的。如果调用了接受Properties实例的方法,MyBatis将加载这些属性,并使其在配置中可用。因此,最高优先级的属性是作为方法参数传递的属性,其次是resource/url属性,最后是在properties元素体内指定的属性。原创 2023-12-28 10:11:28 · 1225 阅读 · 0 评论 -
Mybatis Java API - 目录结构
现在您已经了解如何配置MyBatis和创建映射,您就准备好进行更有意义的工作了。MyBatis Java API是让您获得努力成果回报的地方。正如您将看到的,与JDBC相比,MyBatis极大地简化了您的代码,并使其保持整洁、易于理解和维护。MyBatis 3引入了许多重要改进,以使与SQL映射的使用更加出色。在深入了解Java API之前,重要的是了解与目录结构相关的最佳实践。但与任何框架一样,有一个首选的方式。原创 2023-12-27 17:38:38 · 360 阅读 · 0 评论 -
Mybatis 动态 SQL - 动态SQL中插入脚本语言
从3.2版本开始,MyBatis支持可插拔的脚本语言,因此您可以插入一个语言驱动程序,并使用该语言来编写动态SQL查询。注意:您可以使用Apache Velocity作为您的动态语言。详细信息请参阅MyBatis-Velocity项目。在前面的部分中介绍的所有XML标签都是由默认的MyBatis语言提供的,该语言由驱动程序。提供,其别名为xml。原创 2023-12-27 17:15:05 · 417 阅读 · 0 评论 -
Mybatis 动态 SQL - script,bind,多数据库支持
如果配置了`databaseIdProvider`,则可以在动态代码中使用一个名为`_databaseId`的变量,以此来根据数据库供应商构建不同的语句。`<bind>`元素允许您将一个OGNL表达式的结果绑定到上下文中创建的变量上。在使用注解的映射器类中使用动态SQL时,可以使用`<script>`元素。原创 2023-12-27 16:10:02 · 972 阅读 · 0 评论 -
Mybatis 动态 SQL - foreach
当使用可迭代对象或数组时,index表示当前迭代的次数,而value item表示在此迭代中检索到的元素。当使用Map(或包含Map.Entry对象的Collection)时,index表示键对象,item表示值对象。元素非常强大,它允许您指定一个集合,并声明在元素体内可用的item和index变量。该元素非常智能,不会意外地附加额外的分隔符。注意:您可以将任何可迭代对象(例如List、Set等)、任何Map对象或数组对象作为。动态SQL的另一个常见需求是需要迭代一个集合,通常用于构建IN条件。原创 2023-12-27 15:45:02 · 680 阅读 · 1 评论 -
Mybatis 动态 SQL - trim, where, set
MyBatis 在大多数情况下有一个简单的答案,可能在 90% 的情况下都能起作用。元素中的嵌套标签返回任何内容,它会知道只在查询条件非空时插入 "WHERE" 关键字。此外,如果条件的内容以 "AND" 或 "OR" 开头,它会自动去掉这些关键字。如果`<where>`元素的行为不符合您的要求,您可以通过定义自己的`<trim>`元素来进行自定义。对于动态更新语句,也有一个类似的解决方案,称为`<set>`元素。请注意,在这种情况下,我们覆盖的是后缀,而仍然附加前缀。属性中指定的内容,并插入。原创 2023-12-27 14:33:58 · 689 阅读 · 0 评论 -
Mybatis 动态 SQL - choose, when, otherwise
让我们使用上面的例子,但现在如果提供了标题,则只搜索标题;如果提供了作者,则只搜索作者。如果都没有提供,则只返回特色博客(可能是由管理员策略性选择的列表,而不是返回一大堆无意义的随机博客)。有时候我们并不希望所有的条件都生效,而是只想在多个选项中选择一个。类似于Java中的switch语句,MyBatis提供了。原创 2023-12-27 11:52:57 · 558 阅读 · 1 评论 -
Mybatis 动态 SQL - if
MyBatis的一个最强大的特性一直都是其动态SQL能力。如果你有使用JDBC或任何类似框架的经验,你就会明白在条件下连接SQL字符串是多么痛苦,需要确保不忘记添加空格或在列名列表的末尾遗漏逗号。动态SQL处理起来非常痛苦。尽管使用动态SQL可能不会很轻松,但是MyBatis通过一种强大的动态SQL语言改善了这种情况,该语言可以在任何映射的SQL语句中使用。对于使用JSTL或类似基于XML的文本处理器的人来说,动态SQL元素应该很熟悉。在MyBatis的早期版本中,需要了解和理解的元素非常多。原创 2023-12-27 11:22:00 · 475 阅读 · 0 评论 -
Mybatis Mapper XML文件-缓存(cache)
除了通过上述方式自定义缓存之外,您还可以通过实现自己的缓存或创建适配器来完全覆盖缓存行为,以及与第三方缓存解决方案进行集成。这个示例演示了如何使用自定义缓存实现。在type属性中指定的类必须实现org.apache.ibatis.cache.Cache接口,并提供一个构造函数,该构造函数接受一个字符串id作为参数。这个接口是MyBatis框架中比较复杂的接口之一,但考虑到它的功能,实现起来还是比较简单的。要配置缓存,只需向您的缓存实现中添加公共JavaBeans属性,并通过缓存元素传递属性值。原创 2023-12-27 10:46:08 · 1337 阅读 · 0 评论 -
Mybatis Mapper XML文件-自动映射(Auto-mapping)
当发生这种情况时,对于每个结果映射,在ResultSet中出现的所有未进行手动映射的列将被自动映射,然后再处理手动映射。在下面的示例中,id和userName列将被自动映射,而hashed_password列将被手动映射。但请注意,Author有一个id属性,并且ResultSet中有一个名为id的列,所以Author的id将被填充为Blog的id,这不是你所期望的结果。如您在前面的部分已经看到的那样,对于简单的情况,MyBatis可以自动为您进行结果映射,而在其他情况下,您需要构建一个结果映射。原创 2023-12-26 18:25:13 · 549 阅读 · 0 评论 -
Mybatis Mapper XML文件-高级结果映射(Advanced Result Maps)
MyBatis的创建初衷是因为一个想法:数据库并不总是符合你的期望或需求。虽然我们希望每个数据库都能达到完美的第三范式或BCNF,但实际上并非如此。并且如果可能的话,希望单个数据库可以完美地映射到使用它的所有应用程序,但事实上也不行。ResultMap就是MyBatis提供的解决这个问题的答案。例如,我们如何映射这个语句呢?你可能希望将其映射到一个智能对象模型,该模型由一个由作者撰写的博客组成,并且有许多帖子,每个帖子可能有零个或多个评论和标签。原创 2023-12-26 17:20:54 · 863 阅读 · 0 评论 -
Mybatis Mapper XML文件-结果映射(Result Maps)
它使您可以摆脱90%的JDBC代码,用于从结果集中检索数据,并且在某些情况下,它还允许您执行JDBC甚至不支持的操作。ResultMaps的设计是这样的,简单的语句根本不需要显式的结果映射,而更复杂的语句仅需要尽可能少的描述关系的内容。ResultMap的好处是,您已经学到了很多关于它们的知识,但您甚至还没有看到一个示例!为了举例,让我们看看将最后一个示例作为外部resultMap的情况,因为这是解决列名不匹配的另一种方式。您已经看到了一些简单的映射语句的示例,它们没有显式的resultMap。原创 2023-12-26 11:40:52 · 370 阅读 · 0 评论 -
Mybatis Mapper XML文件-参数(Parameters)
在之前的所有语句中,你看到了简单参数的例子。参数在MyBatis中是非常强大的元素。上面的示例展示了一个非常简单的命名参数映射。参数类型被设置为 int,所以参数可以使用任何名称。原始的或简单的数据类型,如 Integer 和 String,并没有相关的属性,因此会完全替换参数的值。然而,如果你传入一个复杂对象,那么行为就有些不同。如果传入一个类型为 User 的参数对象到该语句中,会查找 id、username 和 password 属性,并将它们的值传递给 PreparedStatement 参数。原创 2023-12-25 17:41:33 · 451 阅读 · 0 评论 -
Mybatis Mapper XML文件-插入,更新,删除(insert, update and delete)
Insert, Update and Delete 属性idflushCachetimeoutkeyColumndatabaseId如前所述,插入语句相对更丰富一些,它具有一些额外的属性和子元素,可以以多种方式处理键的生成。如果你的数据库支持自动生成键字段(例如MySQL和SQL Server),那么你可以简单地设置useGeneratedKeys="true"并将keyProperty设置为目标属性,就完成了键的自动生成。原创 2023-12-21 12:35:07 · 2112 阅读 · 0 评论 -
Mybatis Mapper XML文件-查询(select)
MyBatis真正的力量在于映射语句(Mapped Statements)。这是魔力发生的地方。尽管拥有强大的功能,Mapper XML文件相对来说比较简单。如果将其与等效的JDBC代码进行比较,您会立即看到代码减少了95%。MyBatis专注于SQL的编写,并尽最大努力不干扰您的方式。原创 2023-12-20 17:12:42 · 1789 阅读 · 0 评论 -
Mybatis配置-映射器(mappers)
现在,我们已经配置了MyBatis的行为,准备定义我们的映射SQL语句。但首先,我们需要告诉MyBatis在哪里找到它们。在这方面,Java并没有提供很好的自动发现机制,所以最好的方法是直接告诉MyBatis在哪里找到映射文件。您可以使用类路径相对资源引用、完全限定的URL引用(包括file:///URL)、类名或包名。这些配置语句只是告诉MyBatis接下来该去哪里,其余的细节都在每个SQL映射文件中。原创 2023-12-20 11:19:54 · 577 阅读 · 0 评论 -
Mybatis配置-数据库厂商标识(databaseIdProvider)
MyBatis将加载所有没有databaseId属性或具有与当前数据库匹配的databaseId属性的语句。如果找到具有和不具有databaseId的相同语句,则后者将被丢弃。当提供了属性时,DB_VENDOR数据库ID提供程序会在返回的数据库产品名称中查找与第一个找到的键相对应的属性值,如果没有匹配的属性,则设置为“null”。在这种情况下,如果getDatabaseProductName()返回“Oracle (DataDirect)”,则databaseId将设置为“oracle”。原创 2023-12-20 10:46:28 · 450 阅读 · 0 评论 -
Mybatis配置-环境配置(environments)
虽然速度稍慢,但对于不需要立即可用连接性能的简单应用程序来说,这是一个不错的选择。POOLED - 这是一种DataSource的实现,它可以池化JDBC连接对象,以避免创建新的连接实例所需的初始连接和身份验证时间。然而,它们都是类型别名,换句话说,您可以使用自己的完全限定类名或类型别名来引用您自己实现的TransactionFactory接口。注意:如果您计划将MyBatis与Spring一起使用,就不需要配置任何事务管理器,因为Spring模块会设置自己的事务管理器,覆盖任何先前设置的配置。原创 2023-12-20 09:42:42 · 1124 阅读 · 0 评论 -
Mybatis配置-插件(plugins)
MyBatis允许在映射语句执行的某些点拦截方法调用。这些类方法的详细信息可以通过查看每个方法的完整签名以及每个MyBatis版本附带的源代码来了解。在重写方法时,你应该理解所覆盖方法的行为,假设你不仅仅是在监视调用。如果你试图修改或覆盖给定方法的行为,很可能会破坏MyBatis的核心功能。这些是低级别的类和方法,因此在使用插件时需要谨慎。使用插件非常简单,因为它们提供了很大的功能。只需实现Interceptor接口,确保指定要拦截的方法签名即可。原创 2023-12-19 10:25:51 · 487 阅读 · 0 评论 -
Mybatis配置-对象工厂(objectFactory)
它包含两个create方法,一个用于处理默认构造函数,另一个用于处理带有参数的构造函数。最后,setProperties方法可以用来配置ObjectFactory。在objectFactory元素的主体中定义的属性将在ObjectFactory实例初始化后传递给setProperties方法。默认的ObjectFactory仅仅是使用默认构造函数或带有参数的构造函数(如果存在参数映射)实例化目标类。如果您想要覆盖ObjectFactory的默认行为,可以创建自己的ObjectFactory。原创 2023-12-18 18:06:35 · 412 阅读 · 0 评论 -
Mybatis配置-处理枚举类型(Handling Enums)
然而,我们可能不想存储枚举的名称。自动映射器将自动使用EnumOrdinalTypeHandler,所以如果我们希望回到使用普通的EnumTypeHandler,我们必须显式设置这些SQL语句要使用的类型处理程序。请注意,EnumTypeHandler在某种意义上是特殊的,与其他处理程序不同,它不仅处理一个特定的类,而是处理任何继承自Enum的类。如果您想要映射一个枚举类型,您需要使用EnumTypeHandler或EnumOrdinalTypeHandler中的其中一个。原创 2023-12-18 14:54:52 · 470 阅读 · 0 评论 -
Mybatis配置-类型处理器(typeHandlers)
在决定在ResultMap中使用哪个TypeHandler时,已知Java类型(来自结果类型),但未知JDBC类型。然而,自从Mybatis 3.4.0版本开始,如果一个单独的TypeHandler被注册用于处理一个Java类型,默认情况下它将被用于使用该Java类型的ResultMaps(即使没有includeNullJdbcType=true)。请注意,MyBatis不会根据数据库元数据进行内省来确定类型,因此必须在参数和结果映射中指定它是一个VARCHAR字段,以便连接正确的TypeHandler。原创 2023-12-18 14:08:13 · 1024 阅读 · 0 评论 -
Mybatis配置-类型别名(typeAliases)
在Java中,类型别名(Type Alias)是一个用于简化某个类型的名称的方式。它在XML配置中特别有用,可以减少在全限定类名上繁琐的重复输入。在MyBatis中有许多内置的类型别名,用于常见的Java类型。它们都是不区分大小写的,特别注意原始类型的特殊处理,由于其重载的名称。在MyBatis中,你可以指定一个包,在这个包中,MyBatis将会搜索需要使用的Java Bean类。包中的每个Java Bean,如果没有找到注释,将会使用非限定类名的首字母小写形式注册为别名。注释,它的值将被用作别名。原创 2023-12-15 16:49:35 · 182 阅读 · 0 评论 -
Mybatis配置-设置(settings)
指定MyBatis是否以及如何自动将列映射到字段/属性。PARTIAL只会自动映射未定义内部嵌套结果映射的结果。FULL将自动映射任何复杂性的结果映射(包含嵌套或其他情况)。这些是非常重要的调整,它们修改了MyBatis在运行时的行为方式。下表描述了这些设置以及它们的含义和默认值。请注意,当autoMappingBehavior设置为FULL时,可能会出现误报。当自动映射目标检测到未知列(或未知属性类型)时,指定其行为。配置默认的执行器(Executor)。根据需求选择适合的执行器配置。原创 2023-12-15 11:08:16 · 81 阅读 · 0 评论 -
Mybatis配置-属性(properties)
这将与属性键中的冒号字符(例如:db:username)或OGNL表达式中的三元运算符(例如:${tableName!这为配置提供了很多选项。这些是可外部化、可替换的属性,可以在典型的Java Properties文件实例中进行配置,或者通过properties元素的子元素传递。因此,最高优先级的属性是作为方法参数传递的属性,其次是资源/URL属性,最后是在properties元素体内指定的属性。该功能默认是禁用的。这些属性可以在整个配置文件中使用,以替换需要进行动态配置的值。原创 2023-12-15 10:43:21 · 167 阅读 · 0 评论 -
Mybatis网址
MyBatis中文网。原创 2023-11-28 18:22:09 · 67 阅读 · 0 评论 -
Mybatis查询表返回的结果接收类型为JSONObject
通常情况下,使用MyBatis查询返回结果会将每一行数据映射到一个Java对象中,这些Java对象可以是自定义的实体类。但是如果你不想为每个表都创建对应的实体类,或者查询结果的结构较为复杂,你可以选择将查询结果映射到JSONObject类型来简化处理。在使用MyBatis进行查询时,可以将结果直接映射到JSONObject类型,而不需要为每个表创建对应的实体类。使用JSONObject作为查询结果的接收类型,可以动态地处理各种查询结果,灵活地使用其中的数据。原创 2023-11-28 16:59:21 · 1717 阅读 · 0 评论 -
Mybatis入门(三)
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。因此,最好将映射器放在方法作用域内。依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。原创 2023-11-27 16:21:03 · 50 阅读 · 0 评论 -
Mybatis入门(二)
在一个 XML 映射文件中,可以定义无数个映射语句。这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。原创 2023-11-27 16:03:55 · 67 阅读 · 0 评论 -
Mybatis入门(一)
不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XML 配置。有鉴于此,如果存在一个同名 XML 配置文件,MyBatis 会自动查找并加载它(在这个例子中,基于类路径和 BlogMapper.class 的类名,会加载 BlogMapper.xml)。如果你更愿意直接从 Java 代码而不是 XML 文件中创建配置,或者想要创建你自己的配置建造器,MyBatis 也提供了完整的配置类,要使用 MyBatis, 只需将。原创 2023-11-27 15:39:21 · 55 阅读 · 0 评论 -
mybatis中的resultType和resultMap
当我们在 MyBatis 中执行查询语句时,需要指定如何映射查询结果到 Java 对象。以下是一个示例,假设有一个 Student 表,包含字段 id、name 和 age,我们可以直接使用。 元素指定了 Student 和 Course 之间的一对多关系,通过。 中我们指定了 Student 对象的属性与列之间的映射关系,并使用。 实现对 Course 数组的映射。在查询语句中,我们将这两个。 用于映射 Course 对象。 用于映射 Student 对象,在上面的示例中,我们使用。原创 2023-11-22 14:23:23 · 60 阅读 · 0 评论