当前位置: 首页 > news >正文

MyBatis的知识点和简单用法

MyBatis 是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。

 配置文件(mybatis-config.xml): MyBatis的配置文件包含了一些全局配置,如数据库连接信息、缓存配置、插件配置等。

<!-- mybatis-config.xml --><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

映射文件(Mapper XML):这些文件包含了SQL语句和结果映射的信息。每个Mapper文件对应一个Java接口。 

<!-- UserMapper.xml --><mapper namespace="com.example.mapper.UserMapper"><select id="getUserById" resultType="User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>

数据对象(Java对象): 数据对象是与数据库表对应的Java对象。MyBatis会将查询结果映射为这些对象。

// User.javapublic class User {private Long id;private String username;private String password;// getters and setters
}

SQL语句的执行:使用SqlSessionFactory创建SqlSession,然后通过SqlSession执行SQL语句。 

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);try (SqlSession session = sqlSessionFactory.openSession()) {User user = session.selectOne("com.example.mapper.UserMapper.getUserById", 1);System.out.println(user.getUsername());
}

注解方式: 除了XML配置,MyBatis还支持注解方式的配置。在Mapper接口的方法上使用注解即可。

// UserMapper.javapublic interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(Long id);
}

 动态SQL:MyBatis支持动态SQL,可以根据条件动态生成SQL语句。

<!-- UserMapper.xml --><mapper namespace="com.example.mapper.UserMapper"><select id="getUserByCondition" resultType="User">SELECT * FROM users<where><if test="id != null">AND id = #{id}</if><if test="username != null">AND username = #{username}</if></where></select>
</mapper>

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和原始类型、接口和 Java POJOs(Plain Old Java Objects) 为映射,包括集成的复杂类型。

MyBatis 的主要功能特性包括:

  1. 易于定制的 SQL:MyBatis 允许你使用动态 SQL,以适应变化多端的查询需求。
  2. 映射灵活:MyBatis 支持将 Java 对象映射到数据库记录,同时也支持将结果集映射到 Java 对象。
  3. 缓存:MyBatis 提供了一级缓存和二级缓存的功能,这可以显著提高查询性能。
  4. 配置简单:MyBatis 的配置非常简单,只需要配置一个 XML 文件或者使用注解即可。
  5. 集成性好:MyBatis 可以方便地集成到 Spring 等流行的 Java 框架中。
  6. 优秀的性能:MyBatis 的性能优越,它避免了 JDBC 的繁琐工作,减少了大量的反射调用,提高了性能。
  7. 动态 SQL:MyBatis 支持动态 SQL,可以在 XML 中使用 if、choose、when、otherwise 等标签生成动态 SQL。
  8. 结果集映射:MyBatis 支持将结果集映射到 Java 对象,这是 ORM 的核心功能之一。
  9. 对事务的支持:MyBatis 对事务提供了很好的支持,可以方便地进行事务管理。
  10. 支持使用表达式:MyBatis 支持使用表达式进行查询,这是 JDBC 无法提供的。

相关文章:

MyBatis的知识点和简单用法

MyBatis 是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql&#xff0c;可以严格控制sql执…...

KITTI数据集(.bin数据)转换为点云数据(.pcd文件)

目录 cmake代码 代码 cmake代码 cmake_minimum_required(VERSION 3.17) project(TEST2)set(CMAKE_CXX_STANDARD 14)# Find PCL find_package(PCL 1.8 REQUIRED)# If PCL was found, add its include directories to the project if(PCL_FOUND)include_directories(${PCL_INC…...

【电路笔记】-节点电压分析和网状电流分析

节点电压分析和网状电流分析 文章目录 节点电压分析和网状电流分析1、节点电压分析1.1 概述1.2 示例 2、网格电流分析2.1 概述2.2 示例 3、总结 正如我们在上一篇介绍电路分析基本定律的文章中所看到的&#xff0c;基尔霍夫电路定律 (KCL) 是计算任何电路中未知电压和电流的强大…...

jenkins通知

构建失败邮件通知 配置自己的邮箱 配置邮件服务&#xff0c;密码是授权码 添加构建后操作 扩展 配置流水线 添加扩展 钉钉通知 Jenkins安装钉钉插件 钉钉添加机器人 加签 https://oapi.dingtalk.com/robot/send?access_token98437f84ffb6cd64fa2d7698ef44191d49a11…...

技术分享 | Spring Boot 异常处理

Java 异常类 首先让我们简单了解或重新学习下 Java 的异常机制。 Java 内部的异常类 Throwable 包括了 Exception 和 Error 两大类&#xff0c;所有的异常类都是 Object 对象。 Error 是不可捕捉的异常&#xff0c;通俗的说就是由于 Java 内部 JVM 引起的不可预见的异常&#…...

【Python 千题 —— 基础篇】成绩评级

题目描述 题目描述 期末考试结束&#xff0c;请根据同学的分数为该同学评级。 A&#xff1a;90 ~ 100B&#xff1a;80 ~ 89C&#xff1a;70 ~ 79D&#xff1a;60 ~ 69E&#xff1a;0 ~ 60 输入描述 输入同学的分数。 输出描述 输出该同学的等级。 示例 示例 ① 输入&…...

【ARM Coresight OpenOCD 系列 2 -- OpenOCD 脚本语法详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 swj-dp.tcl 介绍1.1.1 source [find target/swj-dp.tcl]1.1.2 调试传输协议选择 transport selec1.1.3 newtap 命令介绍1.1.4 内存读取数据函数 mem2array1.1.5 变量名检查1.1.6 设置 flash 烧录用到的 ram 空…...

pytorch 初始化

初始化 import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader import torch.optim as optim import numpy as np random_seed=1000 # np.random.seed(random_seed) torch.manual_seed(random_seed)#自定义损…...

process.env.XXX环境变量不生效的解决方法

问题&#xff1a; 使用process.env.XXX时获取不到环境变量的值&#xff1a; axios.defaults.baseURL process.env.VUE_APP_BASE_API; 解决方法&#xff1a; 一&#xff1a;.env.development和.env.production 必须在根目录下。 二&#xff1a;项目根目录下的.env.develop…...

QT项目|时间服务器架构

目录 一、 创建新UI界面的标题 二、 创建服务器运行图标 2.1 查找图标&#xff0c;并截图 2.2 加入QT资源库 三、编辑UI界面 3.1 根据要求&#xff0c;绘制UI界面 3.2 对控件进行命名 3.3 加入Group Box进行美化 四、 按钮操作设置 4.1 QT加入网络 4.2 转到槽&…...

Java学习 10.Java-数组习题

一、创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100 代码实现 public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < arr.length; i) {arr[i]i1;}System.out.println(Arrays.toString(arr));} 运行结果 二、改变…...

Vue3使用vue-print-nb插件打印功能

插件官网地址https://www.npmjs.com/package/vue-print-nb 效果展示: 打印效果 根据不同的Vue版本安装插件 //Vue2.0版本安装方法 npm install vue-print-nb --save pnpm install vue-print-nb --save yarn add vue-print-nb//Vue3.0版本安装方法&#xff1a; npm install vue3…...

Leetcode300 最长递增子序列

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#xf…...

2000-2022年上市公司数字化转型同群效应数据

2000-2022年上市公司数字化转型同群效应数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…...

Python 如何实践 Builder(生成器) 对象创建型设计模式?

开始之前&#xff0c;我们先介绍一下该模型的基本信息。 生成器&#xff08;Builder&#xff09;设计模式是一种创建型设计模式&#xff0c;它用于创建复杂对象&#xff0c;将对象的构建过程与表示分离。这种分离可以让我们创建不同类型或配置的对象&#xff0c;同时避免构造函…...

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…...

开发中常用的SQL语句

开发中常用的SQL语句 1.update更新时不能引用本身表2.备份MySQL3.函数的使用1. case,when的使用2. IF3.其它4.拼接5. 处理时间 4.导出表结构注释等 1.update更新时不能引用本身表 UPDATE student SET valid_flag 0 WHERE id IN (SELECT idFROM (SELECT su.idFROM student su …...

Unreal UnLua + Lua Protobuf

Unreal UnLua Lua Protobuf https://protobuf.dev/ protobuf wire format&#xff1a;pb 编译到底层的数据协议 https://github.com/starwing/lua-protobuf/blob/master/README.zh.md buffer 处理 lua string 可以当 buffer 用&#xff0c;# len 不会遇到 0 截断&#xf…...

java 类和对象 (图文搭配,万字详解!!)

关于java类和对象&#xff0c;我们要掌握几个重点&#xff01; 1.类的定义方式以及对象的实例化 2.类中的成员变量和成员方法的使用 3.对象的整个初始化过程 4.封装特性 5.代码块 目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 1.2.1传统洗…...

pytorch DistributedDataParallel 分布式训练踩坑记录

目录 一、几个比较常见的概念&#xff1a;二、踩坑记录2.1 dist.init_process_group初始化2.2 spawn启动&#xff08;rank怎么来的&#xff09;2.3 loss backward2.4 model cuda设置2.5 数据加载 一、几个比较常见的概念&#xff1a; rank: 多机多卡时代表某一台机器&#xff…...

M2LOrder模型企业级内网穿透部署方案:安全访问GPU算力

M2LOrder模型企业级内网穿透部署方案&#xff1a;安全访问GPU算力 最近和几个做AI项目的朋友聊天&#xff0c;发现大家有个共同的痛点&#xff1a;公司里花大价钱采购的GPU服务器&#xff0c;性能强劲&#xff0c;但为了安全都放在内网里。研发团队想用&#xff0c;得连VPN或者…...

redis数据库基础学习

关系型数据库关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。Sql语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0c;用于执行对关系型数据库中数据…...

MCP23017 vs 74系列芯片:51单片机IO扩展方案对比与实战

MCP23017与74系列芯片&#xff1a;51单片机IO扩展方案深度解析与实战指南 当51单片机的GPIO资源捉襟见肘时&#xff0c;工程师们往往面临两种主流扩展方案的选择&#xff1a;传统的74系列逻辑芯片与现代化的MCP23017端口扩展器。这两种技术路线各具特色&#xff0c;适用于不同的…...

实战教程:用Python脚本突破百度网盘限速,实现高速下载的终极方案

实战教程&#xff1a;用Python脚本突破百度网盘限速&#xff0c;实现高速下载的终极方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那蜗牛般的下载速度抓狂…...

MPU6050中断触发与DMP采样率协同配置实战

1. MPU6050中断与DMP协同工作原理 当你第一次接触MPU6050时&#xff0c;可能会被它的中断和DMP功能搞得一头雾水。这就像学骑自行车&#xff0c;刚开始总是摇摇晃晃&#xff0c;但一旦掌握了平衡技巧&#xff0c;就能轻松驾驭。MPU6050的中断机制就像是自行车的刹车系统&#x…...

【通信】基于SDR的物理层设计与残相误差校正新方案附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

OBS多平台同时直播插件:一键实现多路RTMP推流终极指南

OBS多平台同时直播插件&#xff1a;一键实现多路RTMP推流终极指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp OBS多路RTMP推流插件&#xff08;obs-multi-rtmp&#xff09;是一款革…...

大模型的量化、蒸馏是什么?

以前虽然也在用大模型&#xff0c;但基本都是公网的通用大模型的调用。随着本月Google开源大模型Gamma4的发布&#xff0c;我对本地大模型的运行效果产生了一定兴趣&#xff0c;通过LM Studio工具进行了简单测试。测试过程中对一些基本概念产生疑问&#xff0c;也顺便分享给大家…...

逆向归纳法实战:从海盗分金到子博弈精炼Nash均衡

1. 逆向归纳法&#xff1a;动态博弈的"倒推思维" 想象你正在玩一个多轮决策游戏&#xff0c;每一步的选择都会影响后续发展。这时候&#xff0c;逆向归纳法就像是一台时光机&#xff0c;让你从最后一轮开始倒推&#xff0c;找出每个阶段的最优策略。这种方法在经济学…...

深入解析和(checksum)校验算法:从原理到实践

1. 什么是校验和算法&#xff1f; 校验和&#xff08;Checksum&#xff09;算法是一种简单但极其重要的数据校验方法。它的核心思想就像超市收银员核对购物小票总金额——把一堆数字加起来&#xff0c;看看结果是否符合预期。我在处理嵌入式系统通信协议时&#xff0c;几乎每天…...