
MyBatis
文章平均质量分 73
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
小丁学Java
这个作者很懒,什么都没留下…
展开
-
Parameter index out of range (2 > number of parameters, which is 1【已解决】
在xml中,注释尽量用下面这种的-- -->这种注释形式被称为 HTML 注释。它用于在 HTML 代码中添加注释,注释的内容不会在网页中显示,仅作为开发人员的备注或用于临时禁用部分 HTML 代码。原创 2024-07-25 19:03:53 · 1630 阅读 · 0 评论 -
MyBatis持久层框架(简介,日志框架扩展,基本使用,多表映射,动态SQL,高级扩展,mybatis总结)
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。原创 2023-12-19 15:38:24 · 1519 阅读 · 0 评论 -
mybatis高级扩展-插件和分页插件PageHelper
拦截SQL查询:PageInterceptor是PageHelper的核心类,它负责拦截SQL查询,并在拦截到的SQL查询上添加分页相关的SQL片段。配置分页方言:helperDialect属性用于指定数据库的分页方言。在这里,它被设置为"mysql",意味着PageHelper会为MySQL数据库生成正确的分页SQL。如果你使用的是其他数据库,如Oracle、SQL Server等,你需要选择相应的分页方言。原创 2023-12-15 17:02:47 · 241 阅读 · 0 评论 -
mybatis高级扩展-批量映射优化-mappers标签中使用package批量注册的前提条件
Mapper 配置文件很多时,在全局配置文件中一个一个注册太麻烦,希望有一个办法能够一劳永逸。Mybatis 允许在指定 Mapper 映射文件时,只指定其所在的包:此时这个包下的所有 Mapper 配置文件将被自动加载、注册,比较方便。Mapper 接口和 Mapper 配置文件名称一致。可以将mapperxml文件放在mapper接口所在的包!也可以在sources下创建mapper接口包一致的文件夹结构存放mapperxml文件原创 2023-12-14 15:40:59 · 269 阅读 · 0 评论 -
mybatis动态SQL-sql片段
SQL片段的作用是将重复的SQL语句抽取出来,放到标签中,可以进行复用。这个SQL片段类似于代码片段,可以将部分SQL语句打包或封装到一个SQL片段里。使用SQL片段可以减少SQL语句冗余,便于SQL语句的维护和管理,类似于Java的方法,可以复用SQL语句。原创 2023-12-14 15:10:42 · 736 阅读 · 2 评论 -
mybatis动态SQL-foreach
: MyBatis 的一个循环标签,用于遍历集合或数组。collection="empNoList": 指定要遍历的集合名为empNoList。item="employeeNumber": 在每次循环中,将当前元素的值赋给变量employeeNumber。open="("和close=")": 定义了循环开始和结束时添加的文本内容,分别为开括号和闭括号。separator=",": 定义了循环中每个元素之间的分隔符,这里是逗号。原创 2023-12-14 14:45:48 · 388 阅读 · 0 评论 -
mybatis动态SQL-choose-when-otherwise
在多个分支条件中,仅执行一个。- 从上到下依次执行条件判断- 遇到的第一个满足条件的分支会被采纳- 被采纳分支后面的分支都将不被考虑- 如果所有的when分支都不满足,那么就执行otherwise分支原创 2023-12-13 21:11:09 · 602 阅读 · 0 评论 -
mybatis动态SQL-trim
prefixOverrides:此属性用于指定要移除的字符串前缀。当在元素中使用此属性时,它会移除所有指定的前缀。suffixOverrides:此属性用于指定要移除的字符串后缀。当在元素中使用此属性时,它会移除所有指定的后缀。原创 2023-12-13 20:45:56 · 331 阅读 · 0 评论 -
mybatis动态SQL-<set><if test=“Java对象的属性“!=null>数据库表中的字段 运算符 #{Java对象的属性}</if></set>where 表达式
这个命名空间属性是Mybatis用来查找映射器接口的依据。Mybatis将扫描指定命名空间所在的包(以及子包),并查找具有指定命名空间的接口。一旦找到匹配的接口,Mybatis将为该接口创建代理实例,用于执行SQL语句并与数据库进行交互。在Mybatis中,元素用于定义一个映射器接口,它与数据库交互以执行SQL查询和更新。在你的示例中,元素的命名空间属性指定了映射器接口的完全限定名,即com.atguigu.mybatis.mapper.EmpMapper。原创 2023-12-12 18:38:42 · 257 阅读 · 0 评论 -
mybatis动态SQL-<where><if test=“Java 对象的属性“!=null>数据库表中的字段 运算符 #{Java对象的属性}</if></where>
在Mybatis中,使用动态SQL可以很方便地根据参数值的变化来构建查询条件。其中,"where"和"if"是常用的元素,可以用于动态地构建SQL语句。总之,在使用Mybatis的动态SQL时,需要注意参数类型、参数安全性、多条件查询、条件顺序、空值处理和异常处理等方面,以确保查询的正确性和安全性。传入的参数与SQL语句中的列名和数据类型匹配。避免在SQL语句中直接拼接字符串。原创 2023-12-12 10:11:28 · 404 阅读 · 0 评论 -
mybatis多表映射-延迟加载,延迟加载的前提条件是:分步查询
当lazyLoadingEnabled设为true时,这些框架会采用延迟加载策略。这意味着 只有在需要数据的时候,它们才会去数据库获取数据,而不是在查询时立即加载所有数据。这种策略可以节省系统资源,特别是当处理大量数据时,因为它可以减少内存的使用和数据库查询的次数。然而,需要注意的是,延迟加载也有其缺点。由于数据是按需加载的,因此初次加载数据时可能不会立即得到所有数据。这可能会导致在需要的时候数据还未准备好,从而影响用户体验。因此,是否应该使用延迟加载需要根据具体的应用场景和需求来决定。原创 2023-12-11 20:42:19 · 722 阅读 · 0 评论 -
mybatis多表映射-使用resultType实现对一关联,小技巧
在MyBatis中,映射接口的实例对象是通过 Java的动态代理技术 创建的。具体来说,当你调用sqlSession.getMapper(BookMapper.class)时,MyBatis会内部使用JDK的动态代理技术(通过Proxy.newProxyInstance方法 )来创建一个实现了BookMapper接口的代理对象。这个代理对象并不直接实现BookMapper接口中的方法,而是将方法调用委托给MyBatis的映射器(Mapper)实现类来处理。原创 2023-12-11 19:45:56 · 243 阅读 · 0 评论 -
mybatis多表映射-分步查询
是 MyBatis 配置文件中的一个设置项,用于控制 自动映射行为 。MyBatis 是一个 Java 的持久层框架,它允许你使用 SQL 语句来操作数据库,并将结果映射到 Java 对象上。在 MyBatis 中,你可以使用元素来定义结果映射规则,指定如何将数据库的结果集映射到 Java 对象上。然而,为了简化配置,MyBatis 提供了自动映射的特性,可以自动将结果集的列名映射原创 2023-12-11 18:56:28 · 399 阅读 · 0 评论 -
mybatis多表映射-使用resultMap和association实现对一关联
在MyBatis中,"association"是一个关键字,用于描述一个对象关系映射(ORM)中的一对一(1:1)或者一对多(1:n)关系。它通常用于处理实体类之间复杂的关系。原创 2023-12-10 23:54:19 · 788 阅读 · 0 评论 -
mybatis多表映射-对多关联
在MyBatis中,标签用于表示一个 集合的映射 ,它通常被用在 联合查询 中,以处理一对一、一对多、多对一等复杂的数据库表关系。例如,如果你有一个用户表(user),每个用户可以有多个订单(order),那么在MyBatis的映射文件中,你可能会使用标签来处理这种一对多的关系。下面是一个简单的示例:原创 2023-12-10 23:13:19 · 369 阅读 · 0 评论 -
[23000][1452] Cannot add or update a child row: a foreign key constraint fails,添加外键时报错,解决办法。
外键的存在主要是为了维护数据的 一致性 和 完整性 。外键是用来控制数据库中数据的完整性,它允许对一个表中的数据进行操作时,关联的其他表的数据也能同时发生改变。外键字段的值必须在被引用的表的主键字段中存在,除非该字段的值为NULL(如果允许的话)。这种约束防止了无效的数据引用,例如防止引用不存在的记录,从而确保了数据的完整性和准确性。总的来说,外键的存在是为了保证数据库中数据的一致性和完整性,防止无效的数据引用。原创 2023-12-09 14:35:15 · 2211 阅读 · 2 评论 -
mybatis数据输出-使用resultMap标签定义实体类属性和数据库字段对应关系,再在SQL语句中引用这个对应关系
ResultMap 是 MyBatis 中的一个重要元素,它用于映射 SQL 查询结果到 Java 对象。ResultMap 定义了结果集的映射规则,包括如何将数据库表中的列映射到 Java 对象的属性。ResultMap 的主要目的是提供一种灵活且强大的方式来将数据库查询结果映射到 Java 对象,而不需要手动将每一行结果转换为 Java 对象。通过 ResultMap,MyBatis 可以自动处理结果集的映射过程,使得开发人员能够更专注于编写业务逻辑。原创 2023-12-08 20:39:30 · 1029 阅读 · 0 评论 -
mybatis数据输出-insert操作时给非自增列的主键生成值
Universally Unique Identifier,即通用唯一标识符。"select UUID()" 是一个 SQL 语句,用于从数据库中获取一个唯一的标识符(UUID)。UUID 是通用唯一标识符的缩写,它是一个 128 位长的数字,通常用于在分布式系统中唯一标识对象。在大多数数据库管理系统中,UUID 是通过使用特定的函数或方法生成的。具体的生成方式可能因数据库而异,但通常会使用随机数、时间戳和其他信息来生成一个唯一的 UUID。原创 2023-12-08 19:35:59 · 358 阅读 · 0 评论 -
mybatis数据输出-insert操作时获取自增列的值给对应的属性赋值
"useGeneratedKeys" 是一个选项,通常在数据库插入操作中使用。当执行插入操作时,数据库会自动为某些列(通常是主键列)生成值。这些列的值在插入语句中不需要指定,数据库会为它们分配一个唯一且随机的值。使用 "useGeneratedKeys" 选项可以让应用程序在插入操作完成后获取这些自动生成的值。这对于需要获取插入记录的唯一标识符的情况非常有用,比如在插入后需要立即对记录进行更新或查询。原创 2023-12-08 18:45:18 · 431 阅读 · 0 评论 -
mybatis数据输出-map类型输出
看起来你正在使用MyBatis框架,这段代码是MyBatis中的resultMap。这段代码定义了一个名为"avgSalResultMap"的结果映射,它把数据库中的字段映射到Java对象(在这个例子中是一个Map)的属性上。如果你的目的是从数据库查询部门编号(deptno)和平均工资(avgSal),并将结果存储在一个Map中,那么这个resultMap的定义是正确的。这个Map的键是部门编号,值是平均工资。然后你可以在你的MyBatis SQL语句中使用这个resultMap原创 2023-12-08 08:50:09 · 507 阅读 · 0 评论 -
mybatis数据输出-驼峰命名规则设置
在MyBatis的配置文件中,的原理是将数据库表字段的命名从下划线分隔(例如user_name)转换为驼峰式(例如userName)映射到Java对象的属性。当MyBatis初始化时,它会读取这个配置并创建一个Configuration对象。在这个对象中,MyBatis会维护一个TypeHandlerRegistry,它负责将数据库字段的类型和Java的类型进行映射。原创 2023-12-07 16:14:17 · 1097 阅读 · 0 评论 -
mybatis数据输出-单个简单类型和返回实体类型对象以及别名设置
MapperRegistry是MyBatis中的一个重要组件,用于注册、获取和判断Mapper接口。MapperRegistry是MyBatis框架的一个重要组成部分,它的作用是管理Mapper接口与Mapper代理对象的映射关系。MyBatis中的Mapper接口用于描述数据库操作的方法,Mapper代理对象则是通过动态代理技术在运行时生成的,它们的作用是将Mapper接口中定义的方法转换为对应的SQL语句并执行。原创 2023-12-07 15:27:21 · 473 阅读 · 0 评论 -
mybatis数据输入-Map类型参数输入
Map.of是 Java 9 中引入的一个新方法,用于创建一个不可变的Map。它接受一组键值对,并将它们放入一个Map中。这个Map是不可变的,也就是说,一旦创建,就不能再添加或删除键值对。这个方法提供了一种方便的方式来创建一个不可变的Map,而不需要手动创建一个新的Map实例并手动添加键值对。它还可以帮助避免在代码中出现一些常见的错误,比如在创建Map后不小心修改了它。原创 2023-12-01 15:40:35 · 427 阅读 · 0 评论 -
mybatis数据输入-零散的简单类型数据
零散的多个简单类型参数,如果没有特殊处理,那么Mybatis无法识别自定义名称:原创 2023-11-30 11:42:12 · 317 阅读 · 0 评论 -
mybatis数据输入-实体类型的参数
在MyBatis的配置文件中,元素用于指定使用JDBC事务管理器来管理数据库事务。 JDBC事务管理器通过JDBC连接进行事务管理,它支持普通的数据库连接事务。当使用JDBC事务管理器时,MyBatis将使用JDBC的提交和回滚来控制事务的提交和回滚。原创 2023-11-30 10:04:35 · 373 阅读 · 0 评论 -
mybatis参数输入 #{}和${}
#{} 相当于 之前的占位符 ”?“ PreparedStatement:执行预处理SQL命令${} 是拼接 Statement:执行SQL命令,注入式漏洞 " lina ' or 1=1 or emp_name like' "原创 2023-11-29 21:12:28 · 591 阅读 · 0 评论 -
mybatis项目中添加logback日志
SLF4J,即 简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。原创 2023-11-29 19:46:46 · 1343 阅读 · 0 评论 -
mybatis关于namespace以及id以及Mapper接口命名的说明(了解)
//这个用例用来说明我们可以通过sqlSession操作给定的标识(np01.a)所代表的CRUD操作//但是这是很久之前的操作,后来mybatis出现了"基于Mapper接口编程"这个技术。那么我们常规开发都是使用Mapper接口编程 //Mapper是接口。规定了有哪些CRUD操作。然后具体的实现类不需要程序员去实现。而是mybatis帮我们生产代理对象,也就是Mapper接口的实现类原创 2023-11-29 19:12:04 · 495 阅读 · 0 评论 -
mybatis快速入门(基于Mapper接口编程)
在MyBatis中,#{value}是一种预编译的参数占位符,用于在SQL语句中插入参数值。它能够防止SQL注入攻击,提高SQL语句的安全性。当使用#{value}作为参数占位符时,MyBatis会将参数值直接插入到SQL语句中,并在执行时进行数据类型转换和字符转义处理。这种预编译的参数占位符可以有效地提高SQL语句的性能和安全性。原创 2023-11-29 18:31:09 · 415 阅读 · 0 评论