MyBatis—02—代替Dao层的mapper映射文件;MyBatis配置文件详解
一. Mapper映射配置文件
在JDBC中,我们会把访问数据库的代码放在Dao层,也就是建一个com.dao的package;
但在 MyBatis 中, 我们的包名推荐使用 mapper , 并且我们只需要写一个映射配置文件即可, 不需要写接口和实现类了.
UserMapper.xml, 用于定义要执行的 SQL 语句, 同时设定返回结果的类型.
1.编写mapper层的xml映射配置文件

2. 在MyBatis核心配置文件中添加 mapper 扫描
MyBatis核心配置文件即 mybatis.xml

3.测试
mybatis启动流程:
- 加载核心配置文件
- 构建工厂
- 打开session
- 执行sql
- 释放资源
二. MyBatis 所有配置文件详解
1.MyBatis核心配置文件
(1)configuration
- 这是配置文件的根元素, 所有的其他元素都要在这个标签下使用.
(2)environments
- 用于管理所有的环境, 并可以指定默认使用哪个环境. 通过default 属性来指定.
(3)environment
- 用于配置环境, id 属性用于唯一标识当前环境
(4)transcationManager事务管理器:
用于配置事务管理器其中的type 属性用于指定 MyBatis 采用何种方式管理事务:
- JDBC: 表示 MyBatis 采用与原生 JDBC 一致的方式管理事务
- MANAGED: 表示将事务管理交给其他容器进行, 例如 Spring1.5用于配置数据源, 设置 MyBatis 是否使用连接池技术, 并且配置数据库连接的四个参数
(5)datasource数据源:
它的type 属性用于设置 MyBatis 是否使用连接池技术:
它的type 属性用于设置 MyBatis 是否使用连接池技术:
- POOLED, 表示采用连接池技术(可以减少每次获取连接的时间)
- UNPOOLED, 表示每次都会开启和关闭连接, 不使用连接池技术
- JNDI, 使用其他容器(例如 Spring)提供数据源
(6)<proverty name= value= />
- 用于配置数据库连接参数(driver, url, username, password)
(7)<mappers></mappers>
- 用于扫描 mapper 信息
(8)properties标签

- 在前面声明了properties标签并使用resouce参数指明指向的文件后,我们在<property name= value=>中的value,可以直接使用${}形式获取.properties文件中的值;
- 注意:.properties文件中,存储的文本都是键值对形式, 而${}表示get(key);
(9)settings标签
(10)typeAliases标签
- 给一个类起别名;
- 子标签: <typeAlias type=com.tjpu.mapper.UserMapper alias="u"/>
- 这个时候,我们在文件中再向调用com.tjpu.mapper.UserMapper时,我们只需要写u就可以了;
- 子标签: <package name=com.tjpu.mapper/> 那么这个包下所有类的全限定路径名都被起了个别名, 别名就是他们的类名;
2. mapper 层的映射配置文件
2.1<mappers></mappers>
根元素
(1) namespace 属性
用于指定命名空间, mybatis 是通过 namespace+id 的方式来定位 SQL语句的, 所以必须指定namespace. 通常namespace被配置为全限定路径
(2)select属性
表示查询;
三. MyBatis 中常用的三个查询方法
1.selectList
用于查询多条数据的情况, 返回值是一个 list 集合. 如果没有查到任何数据, 返回没有元素的空List集合(空集合, 不是 null)
2. selectOne
用于查询单条数据的情况, 返回值是一个对象. 如果没有查到任何数据, 返回 null
3. selectMap
用于查询多条数据的情况, 多条数据要形成一个 Map 集合(即键值对), 需要指定哪个属性作为 key. 如果查不到, 返回一个空 map 集合(不是 null);
注意:selectMap方法, 也可以调用mapper层xml映射配置文件中的 selAll;

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!