MyBatis 工具学习笔记(基础)

2023-11-16

What's this

  • 是一款优秀的持久层框架,用于简化 JDBC 开发
  • 是 Apache 的一个开源项目

 Java EE 三层架构:表现层、业务层、持久层(存储层)

(持久层:负责将数据保存到数据库的那一层代码)

ORM(Object Relation Mapping)框架

即对象关系映射框架,意义是在关系型数据库(如MySQL)和业务实体对象(如POJO)之间作一个映射。经过分层和封装让我们在具体操作业务对象时,就不需要去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

为什么不要原始的 JDBC 而要引入 ORM 框架呢?因为纯用 JDBC 导致项目代码量增多且冗余又不好维护。

 

所谓框架就是一个半成品软件,属于一套可重用、通用的软件基础代码模型,因此在框架的基础上构建软件会更加高效、规范、通用以及可扩展。

JDBC 缺点:

  • 硬编码(不易统一配置文件)
    • 注册驱动、获取连接
    • SQL 语句
  • 操作繁琐(不能自动完成)
    • 手动设置参数
    • 手动封装结果集

如何使用 Mybatis?

  1. 引入 pom.xml 依赖文件
  2. 写个 Mybatis 配置文件(mybatis-config.xml)
  3. 编写映射文件,即写出实体对象和数据库的映射关系(Dao / Mapper)
  4. 获取 sqlSession 对象(相当于 JDBC 的 Connection 对象)并执行 SQL 语句
  5. 关闭资源(sqlSession)

Dao / Mapper 代理开发

  1. 通过使用 / 来让 resources 文件和 java 文件识别到同一目录下
  2. 记得把 Mapper 接口的全限定类名写到xml文件里
  3. 接口方法名和SQL语句的 id 一致且保持参数列表一致
  4. 通过SqlSession对象的getMapper()方法获取接口的代理对象并调用方法
  5. 处理结果集后释放资源

 MyBatis XML配置文件的结构

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。 (不区分大小写)

配置文件完成“增删改查”

实体表、属性名        和        表名、列名一致问题

数据库表字段名和实体类属性名不一致,则不能自动封装数据

  1. 起别名:对不一样的列名起别名,让别名和列名一致(缺点:每次查询都需定义)
  2. SQL片段替换:一次写好多次调用(缺点:比较呆板)
  3. resultMap:利用属性名绑定(需要定义resultMap标签)

id:唯一标识

type:映射的类型,支持别名(实体名)

<resultMap>

        id:完成主键字段的映射

        result:完成一般字段的映射

        <result>

                column:数据表字段的别名

                property:实体类的属性名

        </result>

</resultMap>

参数占位符 # 和 $ 的参数替换

  1. #{}:会将其替换为 ?,是为了防止 SQL 注入问题,所以为了安全优先用 # (参数传递)
  2. ${}:直接拼接 SQL,会存在 SQL 注入问题(表名或列名不固定时)

由于接口方法的参数规范,所以一般不用写Mapper.xml文件里的参数类型(paremeterType)。

特殊字符处理方式:

  1. 转义字符:如下表格
  2. CDATA 区:<!CDATA[ 内容 ]]>
格式 描述
&amp; 和&
&lt; 小于号<
&gt; 大于号>
&nbsp; 空格
&quot; 双引号"
&copy 版权符©
&reg 注册符®

条件查询*

  1. 编写接口方法:Mapper interface
    1. 参数如何设置?
    2. 结果如何接收?
  2. 编写SQL语句:SQL 映射文件 .XML
  3. 执行方法等

MyBatis 事务

  • openSession():默认开启事务,进行增删改操作后需要使用 sqlSession.commit(); 手动提交事务
  • openSession(true):可以设置为自动提交事务

所谓“动态”就是无尽的判断

注解完成“增删改查”

暂空

总结:MyBatis 的 JDBC 主要由 xml 环境依赖配置文件和 xml(SQL)操作文件还有 Dao/Mapper 接口以及 java 运行文件及 java 实体类组成

扩展:遇到错误

数据类型默认错误,如int类型默认为0

mybatis-config.xml 配置文件识别不到错误

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis 工具学习笔记(基础) 的相关文章

  • 【花艺电商】SpringBoot集成MyBatis-Plus、Swagger2、SpringSecurity、OAuth2等技术整合开发

    目录 一 功能介绍 1 说明 2 功能实现 3 技术应用 二 技术详述 1 MyBatis Plus 主要体现 项目应用 2 SpringSecurity 应用作用 三 页面展示 1 登入 2 主页 3 详情 4 购物车 5 订单
  • RT-Thread 内核基础(六)

    RT Thread内核配置示例 RT Thread的一个重要特性是高度可裁剪性 支持对内核进行精细调整 对组件进行灵活拆卸 配置主要是通过修改工程目录下的rtconfig h文件来进行 用户可以通过打开 关闭该文件中的宏定义来对代码进行条件
  • RT-Thread 内核基础(五)

    使用static修饰全局变量作用 限制作用域 如果全局变量前面加上 static 关键字 那么该变量的作用域将被限制在声明它的源文件中 即它将成为一个文件作用域的静态变量 其它源文件无法访问这个变量 这对于控制变量的可见性和避免命名冲突是有
  • INT201 形式语言与自动机笔记(下)

    L6 Context Free Languages 上下文无关语言 Context Free Grammar CFG 是一组用于生成字符串模式的递归规则 上下文无关的语法可以描述所有的常规语言 但它们不能描述所有可能的语言 e g 遵循这些
  • 小学二三年级入门信奥赛,如何从Scratch进入C++的学习

    小学生几年级适宜开始学习C 这是讨论的比较热烈 也是比较热门的话题 小学生适宜几年级开始学C 小学生适宜几年级开始学C CSDN博客 simple happiness 信息学规划 北京二年级学生图形化过二级想往信奥靠拢如何准备 信息学规划
  • Prometheus Blackbox_exporter笔记

    一 安装Promtheus 在 Prometheus 官网 Download Prometheus 获取适用于 Linux 的 Prometheus 安 装包 这里我选择最新的 2 46 0 版本 我是 Linux 系统 选择下载 prom
  • 通过一个寒假能学会黑客技术吗?看完你就知道了

    一个寒假能成为黑客吗 资深白帽子来告诉你 如果你想的是学完去美国五角大楼内网随意溜达几圈 想顺走一点机密文件的话 劝你还是趁早放弃 但是成为一名初级黑客还是绰绰有余的 你只需要掌握好渗透测试 Web安全 数据库 搞懂web安全防护 SQL注
  • Java 学习路线 2024 最新版!

    又对上次分享的 Java 学习路线进行了简单修改完善 并增加了免登录下载和黑夜模式 这里重发一下 花了一个月零碎的时间 我根据当下 Java 后端求职和招聘的最新要求 对之前写的 Java 后端学习路线进行了全面的优化和改进 添加图片注释
  • Python采集猎聘网站招聘数据内容,看看现在职位风向

    嗨喽 大家好呀 这里是爱看美女的茜茜呐 环境使用 Python 3 10 Pycharm 模块使用 第三方模块 需安装 requests gt pip install requests pandas gt pip install panda
  • python基础语法看一篇就够了,全网最全python语法笔记汇总

    前言 Python 是一种代表简单思想的语言 其语法相对简单 很容易上手 不过 如果就此小视 Python 语法的精妙和深邃 那就大错特错了 如能在实战中融会贯通 灵活使用 必将使代码更为精炼 高效 同时也会极大提升代码B格 使之看上去更老
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • Intellij 无法理解 SQL 字符串

    大家 我正在制作一个玩具网络应用程序 它使用 Spring Boot 和 Mybatis Mybatis映射器配置Java接口 我希望 Intellij 能够理解 SQL 字符串 但事实并非如此 我期待像下面这样的 如果它理解 Intell
  • MyBatis:使用动态查询比较字符串值

    我正在使用 MyBatis 来映射一些需要比较的查询String争论 myString 我的地图绘制者界面 is public Map
  • 如何使用注解配置的 MyBatis 指定 IN param 类型

    如果我希望能够传递空值 我似乎需要明确告诉 MyBatis java util Date IN 参数使用什么数据库类型 但我找不到办法做到这一点 我尝试了以下不同的变体 但没有成功 Select List
  • MyBatis 映射中的复合键

    我无法将组合键传递给 MyBatis

随机推荐

  • Qt getSaveFileName Qt date 获取显示当前时间和日期 文件

    保存文件 getSaveFileName QString strSaveName QFileDialog getSaveFileName this tr 保存的文件 tr demo a txt
  • C# SolidWorks 二次开发 API --- 实例:随机上色

    随机上色这个功能做起来不算复杂 但是要想做的比较完美也不简单 这一篇文章我就只做随机给装配体中的零件上色 上色前 上色后 简单的代码 private void btn setcolor Click object sender EventAr
  • FFMPEG推流摄像头

    一般的直播网站都使用OBS推流 其实ffmpeg也可以推流 在无界面环境下就可以推流使用 本文以Windows下为例 简单介绍下使用ffmpeg工具推流的方法和步骤 下载安装 下载地址 https ffmpeg zeranoe com bu
  • 使用源码安装的方式安装杀毒软件Clamav

    使用源码安装的方式安装杀毒软件Clamav 安装过程要解决的依赖有一个 libcurl 下载clamav源码包 wget http www clamav net downloads production clamav 0 102 3 tar
  • 微信小程序和网站显示灰色方法

    一 小程序设置 此时大家发现很多网站 app 小程序的整体色调全部变为了灰色 其实并不是所有的图标全部替换了灰色 只是在css中设置了一个属性 只要加上css样式即可 page webkit filter grayscale 95 全局可以
  • CSMA/CD和CSMA/CA详解

    CSMA CD CSMA CD Carrier Sense Multiple Access Collision Detect 即载波监听多路访问 冲突检测方法 在以太网中 所有的节点共享传输介质 如何保证传输介质有序 高效地为许多节点提供传
  • JAVA中正则表达式的使用

    正则表达式 用法 一 使用正则表达式对String进行匹配 1 控制匹配长度 1 使用 n 来精确控制 2 使用 n 表示大于等于n个 3 使用 m n 控制范围 4 使用 表示可以出现 0次或一次 5 使用 表示可以出现 0次或多次 6
  • 某乎搜索接口x-zse-96参数逆向学习分析,网站:aHR0cHM6Ly93d3cuemhpaHUuY29tLw==

    目标参数 x zse 96 参数分析 全局搜索x zse 96 只有两个地方出行 打上断点后刷新网页 从图中断点地方可以看到 搞清楚u f s 的由来就解决了x zse 96 可以看到s参数是由以下几部分组成 1 101 3 2 0 固定版
  • 【Solidity】internal、private、external、public区别

    public与private 对于public和private 相信学过其他主流语言的人都能明白 public修饰的变量和函数 任何用户或者合约都能调用和访问 private修饰的变量和函数 只能在其所在的合约中调用和访问 即使是其子合约也
  • python是面向对象还是面向过程的语言_关于python是面向对象还是面向过程的分析...

    关于python是面向对象还是面向过程的分析 发布时间 2020 04 07 16 10 55 来源 亿速云 阅读 24 作者 小新 今天小编给大家分享的是关于python是面向对象还是面向过程的分析 很多人都不太了解 今天小编为了让大家更
  • mac 快速安装brew

    安装homebrew好用的文章 mac下镜像飞速安装Homebrew教程 知乎 直接执行这个命令 bin bash c curl fsSL https gitee com ineo6 homebrew install raw master
  • 医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

    随着我们在仿真教育中越来越多地使用新技术 区分虚拟模式的类型很重要 虚拟仿真是一个统称 用来概括术语来描述各种基于仿真的体验 从基于屏幕的平台到沉浸式虚拟现实 然而 各虚拟平台在保真度 沉浸感和临场感的水平上有很大差异 医疗教育中存在许多虚
  • html毛玻璃背景代码,css毛玻璃背景的制作

    今天早上 听到有人说拼多多上市 然后各种黑 说什么市场倒退了二十年 然后搬出那英当年的 雾里看花 说这首歌就是在讽刺假货横行 雾里看花 代表了一种 朦胧美 如果你喜欢朦胧美 那你也可能也会喜欢毛玻璃 毛玻璃 效果 本质上是对背景图片的部分区
  • 基于灰度的模板匹配(标准)

    原图 创建模板 在加了噪声的图中识别 代码 dev close window dev open window 0 0 599 464 black WindowID read image Image pumpe dev set draw ma
  • android下的定时器在关闭屏幕后会自己停掉解决方法

    好坑 没系统的学过android 写一东西 尼玛发现连着usb线 神马都正常 但是拔掉usb线后 屏幕自动关闭后 android下的定时器就失效了 尼玛 调了好久才发现的 那么 肿么办 会遇到这个问题 一般都是学过java 然后直接跑去写a
  • 25开灯与关卡蓝图

    下了个ue5试试 这节讲的是 蓝图 点光源切换是否可视 如果初始化 点光源可视 那么运行后就会切换成不可视 如果初始化时 点光源不可视 那么运行时可视 且比较了各种光源的差别 首先看是否可视的设置 即编辑器中初始化可视 运行起来就没灯光了
  • springboot使用外置的tomcat,启动的时候没有启动springboot应用

    springboot使用外置的tomcat 启动的时候没有启动springboot应用 虽然可以访问首页 但是点击超链接访问controller却是404错误 前台
  • 恐造成下一个“千年虫”的闰秒,遭科技巨头们联合抵制

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 近日 谷歌 Meta 微软和亚马逊四位科技巨头呼吁将闰秒取消 并称闰秒会对网络造成巨大影响 闰秒或将成为下一个类似 千年虫 bug的罪魁祸首 原来 除了闰年与闰月外 还有闰秒
  • Alibaba限流组件——Sentinel核心概念与流量控制

    目录 1 Sentinel介绍 1 1 Sentinel是什么 1 2 组成 1 3 关键概念 2 Sentinel流量控制案例 2 1 引入依赖 2 2 使用Sentinel提供的API实现流量控制 2 2 1 写一个有返回值的接口 2
  • MyBatis 工具学习笔记(基础)

    What s this 是一款优秀的持久层框架 用于简化 JDBC 开发 是 Apache 的一个开源项目 Java EE 三层架构 表现层 业务层 持久层 存储层 持久层 负责将数据保存到数据库的那一层代码 ORM Object Rela