mybatis学习笔记
啥是Mybatis
-
MyBatis本是apache的一个
-
2010年这个
-
2013年11月迁移到
-
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的
-
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
-
当前,最新版本是MyBatis 3.5.9,其发布时间是2021年12月26日。
如何获取
-
Maven:
-
GitHub: https:/lgithub.com/mybatis/mybatis-3/releases
持久层框架
数据持久化
-
持久化就是将数据在持久状态和瞬时状态转化的过程
-
内存:断电即失
-
数据库(jdbc),io文件持久化
-
生活中的例子:冷藏,罐头;
为什么需要持久化
-
有些对象,不能把它丢了
-
内存太贵
持久层
(dao,server,Controller层)
-
完成持久化工作的代码块
-
层界限十分明显
为什么需要Mybatis
-
帮助程序员将数据存放到数据库中
-
方便
-
传统的JDBC代码太复杂,而mybatis简化.框架.自动化
-
使用的人多(重点)spring,springMVC,springboot
-
优点:
-
简单易学:最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
-
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
-
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
-
提供映射标签,支持对象与数据库的orm字段关系映射。
-
提供对象关系映射标签,支持对象关系组建维护。
-
提供xml标签,支持编写动态sql
2、第一个Mybatis 程序
思路:插入环境-->导入Mybatis-->编写代码-->测试!
2.1、搭建环境
创建数据库
新建项目
-
创建一个普通的 Maven项目
-
删除是src目录
-
导入maven依赖
2.2、创建一个子模块
编写一个Mybatis 工具类
2.2、编写代码
pojo层
mapper层
(接口映射)接口实现类XXXmapper.xml
2.3、测试
注意点:
报错: org.apache.ibatis.binding.BindingException: Type interface lv.mapper.UserMapper is not known to the MapperRegistry.
MapperRegistry是什么?
junit测试
再次报错
解决方法(在pom.xml依赖中放入)
2 .3CUID
2.1、namespace
namespace-->命名空间 中的包名 要和mapper 接口的包名一致!
2.2、select
select -->选择,查询语句;
属性
-
id-->与mapper 实现类中的方法名一致
-
resultType: 返回的数据类型,自动进行封装操作
-
parameterType: 给SQL语句传递参数的数据类型
-
resultMap: 查询结果返回的数据类型,根据结果集映射文件中的<resultMap>来完成数据封装
-
parameterMap: 给SQL语句传递参数的数据类型,需要和<parameterMap>标签连用
UserMapper
UserMapper.xml
Test
2.3、insert
insert-->插入;
属性
-
parameterType: 入参的权限限定类名或类型别名;
-
keyColumn: 用于设置数据表自动生成的主键名
-
keyProperty(用来设置主键): 默认值unset ,用于设置getGeneratedKeys方法或selectKet子元素返回值将赋值到领域模型中的那个属性中
-
useGeneratedKeys ,取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,
[因此当数据库设置好自增长主键后]: ,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了
-
statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE
flushCache ,取值范围true(默认值)|false,设置执行该操作后是否会清空二级缓存和本地缓存
timeout ,默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常
databaseId ,取值范围oracle|mysql等,表示数据库厂家,元素内部可通过
<if test="_databaseId = 'oracle'">
来为特定数据库指定不同的sql语句
UserMapper
UserMapper.xml
Test
2.4、update
UserMapper
UserMapper.xml
Test
2.5、delete
UserMapper
Test
2.6、提示:增删改需要提交事务
3、分析错误
-
标签的对应匹配!
-
resource 绑定mapper,需要使用路径!
-
程序配置文件必须符合规范!
-
NullPointerException , 没有注册到资源!
-
输出的XML文件中存在中文乱码问题!
-
maven 资源没有导出的问题!
4万能的Map
假如我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map
UserMapper
UserMapper.xml
注:使用Map 时参数可以不与实体类的参数一致
但是参数与你map.put的键需要相同
Test
__EOF__

本文链接:https://www.cnblogs.com/sugeek/articles/16629675.html
关于博主:编程菜鸟一只,希望每个今天胜过昨天,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具