MyBatis 工具学习笔记(基础)

news2024/11/26 11:37:08

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 配置文件识别不到错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BUUCTF:[MRCTF2020]套娃

查看源码发现 PHP非法参数名传参问题&#xff0c;详细请参考我的这篇文章&#xff1a;谈一谈PHP中关于非法参数名传参问题 正则这里绕过使用%0a换行符绕过&#xff0c;payload: /?b.u.p.t23333%0a 得到下一步信息&#xff1a;secrettw.php 注释中的是JsFuck&#xff0c;用这…

Lostash同步Mysql数据到ElasticSearch(二)logstash脚本配置和常见坑点

1. logstash脚本编写&#xff08;采用单文件对应单表实例&#xff09; 新建脚本文件夹 cd /usr/local/logstash mkdir sql & cd sql vim 表名称.conf #如: znyw_data_gkb_logstash.conf 建立文件夹&#xff0c;保存资源文件更新Id mkdir -p /data/logstash/data/last_r…

VBA技术资料MF58:VBA_测试点是否在多边形中

【分享成果&#xff0c;随喜正能量】人一辈子&#xff0c;只能靠长期去做某件事情来成就自己&#xff0c;而不是靠某一个人来成就自己。关于这点&#xff0c;你要么及早领悟&#xff0c;要么等待时光给出教训&#xff0c;逼你领悟。 我给VBA的定义&#xff1a;VBA是个人小型自…

数据结构 第一章作业 绪论 西安石油大学

绪论第1章 1&#xff0e;简述下列概念&#xff1a;数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案&#xff1a; 数据&#xff1a;是客观事物的符号表示&#xff0c;指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计…

【C++面向对象侯捷】大师写法,证明你学过!一出手就是正规军~

文章目录 1.Header&#xff08;头文件&#xff09;中防卫式声明&#xff01;2. 构造函数赋值3. const member functions(常量成员函数) > 不会改变数据内容的&#xff0c;加上const4. 参数 和 返回值尽量传 引用&#xff0c;减少 数据 传输5. 设计一个类&#xff0c;特别注意…

从功能测试到自动化测试你都知道他们的有缺点吗?

一、手工测试优点 测试人员的经验可以继承&#xff0c;对错误有猜测能力 测试人员有审美能力和心理体验 测试人员有逻辑推断能力 二、自动化的优点 自动化测试执行可以替代大量的手工机械重复性操作&#xff0c;测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上…

Python 爬虫使用 Selenium 如何在 WebElement 获得属性

首先&#xff0c;我们需要初始化驱动和指定使用特定的流量器。 代码如下&#xff1a; from selenium import webdriver wd webdriver.Firefox()上面的代码可以简单的理解为启动一个 Firefox 的实例。 使用 css 选择器 可以把程序读取的 HTML 理解为一个 Doc。 我们需要在 D…

三、双指针(two-point)

文章目录 一、算法核心思想二、算法模型&#xff08;一&#xff09;对撞指针1.[704.二分查找](https://leetcode.cn/problems/binary-search/)&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码&#xff08;3&#xff09;复杂度分析 2.[15.三数之和](https://leetco…

Maven源码阅读(一)

获取源码 apache maven官网地址&#xff1a;https://maven.apache.org/ 不用点击&#xff0c;页面往下滚动&#xff0c;你会看到 找到源码地址&#xff0c;最终都是github&#xff1a;https://github.com/apache/maven 被墙了&#xff0c;可以用gitcode&#xff1a;https:…

Java基础13——异常的捕获与处理

什么是异常 异常是指程序在运行过程中出现的非正常情况&#xff0c;如用户输入错误&#xff0c;除数为零&#xff0c;文件不存在&#xff0c;数组下标越界等。 Java 异常体系结构 所有异常类都是Throwable 类的子类&#xff0c;他派生出两个子类&#xff0c;Error和Exception…

Git学习笔记6

Github分支开发&#xff1a; 第1步&#xff1a;在github上创建一个新的dev分支&#xff1a; 更新了微信的PC版本&#xff0c;发现默认的箭头比以前加粗了&#xff0c;变得更好看了。 create branch: dev from master。 切换到该分支&#xff0c;看到里面的内容跟master分支的…

macOS 运行xxx.command文件提示”无法执行,因为您没有正确的访问权限“解决方法

使用苹果mac电脑运行.command文件时&#xff0c;是否遇到弹出”无法执行&#xff0c;因为您没有正确的访问权限“的窗口&#xff1f;遇到这种问题怎么解决呢&#xff1f;这里小编为大家带来了详细的解决方法&#xff0c;一起来看看吧&#xff01; 解决方法&#xff1a; 方法一…

从零学习开发一个RISC-V操作系统(一)丨计算机组成原理相关知识与RISC-V指令集简介

本篇文章的内容 一、计算机组成原理的相关知识1.1 计算机的硬件组成1.2 程序的存储与执行1.3 程序语言的设计和进化1.4 存储设备的层次结构1.5 操作系统 二、RISC-V的指令集ISA简介2.1 什么是ISA2.2 复杂指令集&#xff08;CISC&#xff09;和精简指令集&#xff08;RISC&#…

halcon算子2、gray_histo

gray_histo 计算直方图 原形&#xff1a;gray_histo(Regions, Image : : : AbsoluteHisto, RelativeHisto) 功能&#xff1a;计算直方图 参数&#xff1a;Regions&#xff1a;区域&#xff0c;要计算的区域&#xff08;在image上的区域&#xff09; Image &#xff1a;要计算的…

【IC设计】ZC706板卡点灯入门(含Verilog代码,xdc约束,实验截图)

文章目录 假定已知的前置知识需求&#xff1a;注意点&#xff1a;代码实现&#xff1a;顶层模块led闪烁模块xdc约束 这篇博客将针对AMD Zynq 7000 SoC ZC706 Evaluation Kit板卡(对应Vivado创建工程时FPGA型号&#xff1a;XC7Z045ffg900-2)实现基本的点灯程序。 假定已知的前置…

JUC中创建的组件 多线程使用“哈希表”

JUC中创建的组件 JUC中创建的组件这些内容都不太常用&#xff0c;偶尔用到面试的时候&#xff0c;偶尔用到&#xff01;到时候自行查找即可&#xff0c;本文主要来快速的过一下&#xff0c;留个印象即可~ JUC&#xff08;java.util.concurrent&#xff09;和多线程相关的工具…

【APUE】文件I/O(系统调用I/O)

目录 1、简介 2、文件描述符的本质 3、文件IO操作 3.1 open 3.2 close 3.3 read 3.4 write 3.5 lseek 4、文件IO与标准IO的区别 5、IO的效率问题 关键补充&#xff1a;进程的内存空间布局 代码区 常量区 全局区 .bss段 .data段 堆区 栈区 6、文件共享 7…

详解【异质图卷积网络 RGCN】回顾:图神经网络问题的三大处理步骤 | 从起源说起,RGCN核心公式解释,两种降低模型参数量/优化的方式,附核心代码实现讲解

书上说了,天下没有不散的宴席,但你别怕,书上还说了,人生何处不相逢。 【纯手工】优质讲解,码字不易,写作不易,走过路过,大家点个赞呗! 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP…

*p 和p区别

*p 和 &p 是在C语言中用于处理指针的两种不同操作。 *p: * 是解引用运算符&#xff0c;用于访问指针所指向的内存地址上的值。如果 p 是一个指针变量&#xff0c;*p 就是该指针所指向的值。举例&#xff1a;如果有 int *p&#xff0c;它是一个指向整数的指针&#xff0c;那…

机器学习西瓜书+南瓜书吃瓜教程第三章学习笔记

本次学习为周老师的机器学习西瓜书谢老师南瓜书Datawhale视频 视频地址 下面为本人的学习笔记&#xff0c;最近很忙还没学多少&#xff0c;之后补&#xff01;&#xff01;&#xff01; u1s1&#xff0c;边看视频边自己手推一遍真的清楚很多&#xff0c;强烈推荐自己手推虽然花…