《MyBatis 从入门到上手:超全基础操作 + XML 配置指南》

MyBatis的基础操作

一、打印⽇志

在Mybatis当中我们可以借助⽇志,查看到sql语句的执⾏、执⾏传递的参数以及执⾏结果

在配置⽂件中进⾏配置即可

重新运⾏程序,可以看到SQL执⾏内容,以及传递参数和执⾏结果

  • ①:查询语句 ②:传递参数及类型 ③:SQL执⾏结果

二、参数传递

解决 "SQL 中参数不能写死 " 的问题,实现根据方法入参动态拼接 SQL 条件(以 "根据 id 查询用户" 为例)。

参数传递的两种方式

1. 单普通类型参数(无需别名)
  • 规则 :当 Mapper 方法只有 1 个普通类型(如Integer/String)参数时,SQL 中#{}内的名称可任意写(建议与参数名一致,增强可读性)。
  • 示例
2. 使用@Param指定别名(通用方式)
  • 规则 :通过@Param("别名")给参数命名后,SQL 中#{}必须使用该别名。
  • 适用场景:方法有多个参数、或参数名不直观时,避免参数绑定混乱。
  • 示例

三、增(Insert)

SQL语句:

把SQL中的常量替换为动态的参数:

Mapper接⼝:

直接使⽤UserInfo对象的属性名来获取参数

测试代码:

如果设置了 @Param 属性,#{...}需要使⽤参数.属性来获取

注意:如果你的user_info表主键id自增类型 (绝大多数场景都是),必须给@Insert补充@Options注解,否则插入后无法获取自增的主键 ID

  • useGeneratedKeys = true:告诉 MyBatis "获取数据库自增的主键值";
  • keyProperty = "id":把自增的主键值赋值到UserInfo对象的id属性;
  • 插入后可直接获取主键:

四、删(Delete)

SQL语句:

把SQL中的常量替换为动态的参数:

Mapper接⼝:

五、改(Update)

SQL语句:

把SQL中的常量替换为动态的参数

Mapper接⼝:

六、查(Select)

查询结果:

从运⾏结果上可以看到,我们SQL语句中,查询了delete_flag,create_time,update_time,但是这⼏个 属性却没有赋值.

  • MyBatis 会根据方法的返回结果进行赋值.
  • 方法用对象 UserInfo 接收返回结果,MySQL 查询出来数据为一条,就会自动赋值给对象.
  • 方法用 List<UserInfo>接收返回结果,MySQL 查询出来数据为一条或多条时,也会自动赋值给 List.
  • 但如果 MySQL 查询返回多条,但是方法使用 UserInfo 接收,MyBatis 执行就会报错.

原因分析:当⾃动映射查询结果时,MyBatis会获取结果中返回的列名并在Java类中查找相同名字的属性(忽略⼤⼩写)。这意味着如果发现了ID列和id属性,MyBatis会将列ID的值赋给id属性

解决办法**:**

1. 起别名

在SQL语句中,给列名起别名,保持别名和实体类属性名⼀样

2. 结果映射

如果其他SQL,也希望可以复⽤这个映射关系,可以给这个Results定义⼀个名称

使⽤id 属性给该Results 定义别名,使⽤@ResultMap 注解来复⽤其他定义的 ResultMap

3. 开启驼峰命名

通常数据库列使⽤蛇形命名法 进⾏命名(下划线分割各个单词),⽽Java属性⼀般遵循驼峰命名法 约定.为了在这两种命名⽅式之间启⽤⾃动映射 ,需要将mapUnderscoreToCamelCase 设置为true。

驼峰命名规则:

  • abc_xyz => abcXyz
  • 表中字段名:abc_xyz
  • 类中属性名:abcXyz

Java代码不做任何处理

七、MyBatisXML配置⽂件

MyBatis 开发方式

MyBatis 支持两种开发方式:

  • 注解方式:适用于简单的增删改查功能
  • XML 方式:适用于复杂 SQL 功能,需将 SQL 语句写在 XML 配置文件中
MyBatis XML 方式的核心步骤

需完成两项配置:

  • 配置数据库连接字符串与 MyBatis
  • 编写持久层代码

7.1配置连接字符串和MyBatis

7.2写持久层代码

持久层代码分两部分 1. ⽅法定义Interface 2. ⽅法实现:XXX.xml

7.2.1添加mapper接⼝

数据持久层的接⼝定义:

7.2.2添加UserInfoXMLMapper.xml

数据持久成的实现,MyBatis的固定xml格式:

标签 核心属性 属性说明
<mapper> namespace 填写 Mapper 接口全限定名,绑定 XML 与接口
<select> id 与接口方法名一致,匹配接口方法与 SQL 逻辑
resultType 填写实体类全限定名,指定 SQL 结果映射的 Java 对象类型
关联示例(UserInfoMapper)
  • 接口:定义queryAllUser()方法
  • XML:
    1. namespace="com.example.mybatis.mapper.UserInfoMapper" 绑定接口
    2. <select id="queryAllUser" resultType="com.example.mybatis.model.UserInfo">select username, password, age, gender, phone from user_info</select> 实现方法

7.3增(Insert)

UserInfoMapper接⼝:

UserInfoMapper.xml实现:

返回⾃增id

接⼝定义不变,Mapper.xml实现设置useGeneratedKeys和keyProperty属性

7.4删(Delete)

UserInfoMapper接⼝:

UserInfoMapper.xml实现:

7.5改(Update)

UserInfoMapper接⼝:

UserInfoMapper.xml实现:

7.6查(Select)

同样的,使⽤XML的⽅式进⾏查询,也存在数据封装的问题 我们把SQL语句进⾏简单修改,查询更多的字段内容

运⾏结果:

结果显⽰:deleteFlag,createTime,updateTime也没有进⾏赋值.

解决办法和注解类似:1. 起别名 2. 结果映射 3. 开启驼峰命名 其中1,3的解决办法和注解⼀样,不再多说,接下来看下xml如何来写结果映射

Mapper.xml:

相关推荐
清平乐的技术专栏13 小时前
HBase集群连接方式
大数据·数据库·hbase
小北方城市网13 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
A9better14 小时前
嵌入式开发学习日志50——任务调度与状态
stm32·嵌入式硬件·学习
非凡ghost14 小时前
ESET NupDown Tools 数据库下载工具
学习·软件需求
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大14 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
哈__15 小时前
多模融合 一体替代:金仓数据库 KingbaseES 重构企业级统一数据基座
数据库·重构
老邓计算机毕设15 小时前
SSM医院病人信息管理系统e7f6b(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·医院信息化·ssm 框架·病人信息管理
zzcufo15 小时前
多邻国第5阶段17-18学习笔记
笔记·学习
毕设源码-钟学长15 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
2601_9496130215 小时前
flutter_for_openharmony家庭药箱管理app实战+药品分类实现
大数据·数据库·flutter