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

零基础学习【Mybatis】这一篇就够了

Mybatis

  • 查询
    • resultType使用
    • resultMap使用
    • 单条件查询
    • 多条件查询
    • 模糊查询
    • 返回主键
  • 动态SQL
    • if
    • choose
    • set
    • foreach
    • sql片段
  • 配置文件
  • 注解
    • 增删改查
    • 结果映射

查询

resultType使用

当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中

在这里插入图片描述

resultMap使用

当数据库返回的结果集中的字段和实体类中的属性名存在不对应情况时,可以使用 resultMap 自定义映射关系

在这里插入图片描述

面试题: resultType和resultMap使用区别

单条件查询

在这里插入图片描述

多条件查询

在这里插入图片描述

模糊查询

在这里插入图片描述

面试题:#和$的区别

  • #表示占位符, 相当于JDBC中的?, 底层工作的是PreparedStetement对象, SQL只编译一次, 而且没有SQL注入问题
  • $ 表示字符串拼接, 底层工作的是Statement对象, 每次SQL都会重新编译, 而且存在SQL注入问题

返回主键

向数据库保存一个用户后, 然后在控制台记录下此用户的主键值(id)

在这里插入图片描述

动态SQL

在Mybatis中,动态SQL是通过下面几个标签来实现的:

  • if,choose 用于条件判断
  • where,set 用于格式控制
  • foreach 用于循环遍历

if

在这里插入图片描述

  • if标签用于单分支条件判断, 相当于java中的if关键字
  • where标签作用:
    1. 当where代码块中的条件都不成立的时候, where代码块不生效
    2. 当where代码块中的条件至少有一个成立的时候
      在代码块之前加入一个where关键字
      当代码块以and | or开头的时候,它会帮你去掉第一个and | or

在这里插入图片描述

choose

在这里插入图片描述

  • choose 用于包含多个条件
  • when 用于编写某个条件
  • otherwise所有的when都判断失败时,进入此分支

在这里插入图片描述

set

  • set标签的作用:
    1. 在代码块之前加入一个set关键字
    2. 删除掉代码块中的最后一个,
    3. set代码块中至少要有一个条件是成立

在这里插入图片描述

foreach

  • foreach 循环遍历
    collection=“collection” 指定要遍历的集合或者数组
    item=“item” 指定临时变量
    separator=“,” 指定分隔符
    open=“(” 指定开始字符
    close=“)” 指定结束字符

  • collection会根据传入参数的类型不同而采用不同的值
    集合—collection
    数组—array
    实体—实体的属性

在这里插入图片描述

sql片段

sql片段的作用是将代码中重复的sql,提取出来达到复用的目的

  • 定义SQL片段: <sql id="selectUser"></sql>
  • 引用SQL片段: <include refid="selectUser"></include>

在这里插入图片描述

配置文件

  • sqlMapConfig.xml 此文件中的标签有严格的顺序要求, 可以省略一部分, 但是不能乱序
  • 主要选项
    properties: 引入外部的properties文件
    typeAlias: 给映射文件中实体类起别名
    environments: 用于配置数据库连接信息和事务管理器
    mappers: 用于引入映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--引入一个properties的配置文件--><properties resource="jdbc.properties" /><!--别名: 应用在映射文件中--><typeAliases><!--type 指定原始类型  alias 指定别名--><!--<typeAlias type="com.itheima.domain.User" alias="user" />--><!--指定一个包名: 只要是在这个包之下的类,都会自动产生一个别名, 规则就是类名首字母消息--><package name="com.itheima.domain"/></typeAliases><!--环境: environments  可以配置多个数据库配置default 用于指定使用哪个环境--><environments default="development"><!--配置开发环境--><environment id="development"><!--事务管理器--><transactionManager type="JDBC"/><!--数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment><!--配置测试环境--><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="测试驱动"/><property name="url" value="测试数据库连接"/><property name="username" value="测试用户名"/><property name="password" value="测试密码"/></dataSource></environment></environments><!--导入sql映射文件--><mappers><!--方式1: 直接导入映射文件(了解)--><!--<mapper resource="mappers/UserMapper.xml"/>--><!--方式2: 写接口路径--><!--<mapper class="com.itheima.mapper.UserMapper" />--><!--方式3: 直接写mapper接口所在的包(保证最后Mapper接口和Mapper.xml会编译到同一个目录下,并且名字一致)--><package name="com.itheima.mapper"/></mappers></configuration>

在这里插入图片描述

注解

使用注解书写SQL其实是对使用XML书写SQL的一种替代方式,其功能基本一致。

两种方式各有优缺点, 没有谁好谁坏之分, 具体看公司选择

在一个项目中是允许xml和注解混用的,但是对于同一个方法来讲,只能使用一种形式

非动态sql,使用注解简单写 但是对于动态sql,xml就相对简单了

增删改查

在这里插入图片描述

结果映射

在这里插入图片描述

相关文章:

零基础学习【Mybatis】这一篇就够了

Mybatis 查询resultType使用resultMap使用单条件查询多条件查询模糊查询返回主键 动态SQLifchoosesetforeachsql片段 配置文件注解增删改查结果映射 查询 resultType使用 当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中 r…...

Shell入门(保姆级教学)

Shell是一种命令行解释器&#xff0c;也是一种脚本语言&#xff0c;广泛应用于Unix和类Unix系统中&#xff0c;例如Linux。它是用户与操作系统内核交互的桥梁&#xff0c;通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程&#xff0c;涵盖基…...

【JDK11和JDK8并行与切换】

一、JDK11安装 1、下载jdk11&#xff0c;点击.exe安装在&#xff1a;C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …...

vue大数据量列表渲染性能优化:虚拟滚动原理

前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下&#xff0c;我们讲了两种实现方式来提高渲染性能&#xff1a;前端分页和节点数据懒加载。 前端分页小节&#xff1a;Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节&#xff1a;Element Tree Plu…...

昇思25天学习打卡营第1天|快速入门

目录 昇思MindSpore介绍MindSpore的API来快速实现一个简单的深度学习模型通过资料更深入的了解昇思MindSpore 昇思MindSpore介绍 今天有幸学习了昇思MindSpore&#xff0c;让我们来简单的了解一下它 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行…...

LinkedList 实现 LRU 缓存

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于在缓存满时淘汰最久未使用的元素。 关键&#xff1a; 缓存选什么结构&#xff1f; 怎么实现访问顺序&#xff1f; import java.util.*;public class LRUCac…...

ubuntu安装workon

pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件&#xff08;比如.bashrc&#xff0c;.bash_profile或.zshrc&#xff09;中添加以下内容&#xff1a;export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...

(面试必看!)锁策略

文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁&#xff08;Pessimistic Locking&#xff09;2、乐观锁&#xff08;Optimistic Locking&#xff09;3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...

RAGflow:开源AI框架的创新与应用

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域&#xff0c;AI的应用更是无处不在。今天&#xff0c;我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...

AI的学习明确路径

1.不要一开始学习数学。 首先&#xff0c;学习python的语法和工具包。 python的工具包有&#xff1a;numpy,pandas,matlap,sciklt-learn. 然后&#xff0c;学习机械学习算法&#xff0c;学习1.树模型&#xff0c;随机森林 。 2.神经网络。 上kaggle中&#xff0c;找人家的经…...

【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间 本章将分享缺省参数与函数重载相关知识&#xff0c;为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1…...

mysql排查死锁的几个查询sql

SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...

快速部署私有化大模型 毕昇(使用docker-compose方式)

docker安装 1. # Linux系统安装docker&#xff0c;以CentOS/RHEL为例&#xff0c;其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装&#xff0c;先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...

B端:导航条就框架提供的默认样式吗?非也,看过来。

导航条不一定必须使用框架提供的默认样式&#xff0c;你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件&#xff0c;你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们&#xff0c;可以让设…...

idea的git与SVN切换

1、选择setting->Version Control&#xff0c;新增或者编辑&#xff0c;选择目录&#xff0c;使用git或者svn管理 2、选择项目中的vcs.xml,打开选择要用的&#xff0c;注释掉不用的版本即可...

互联网家政小程序,为大众带来高效、便捷的服务

随着人口老龄化的严重和社会生活节奏的加快&#xff0c;大众对家政服务的需求日益增加&#xff0c;家政行业的市场规模逐渐扩大&#xff01; 在科技的推动下&#xff0c;家政行业开始向数字化发展&#xff0c;“互联网家政”的模式推动了市场的快速发展。互联网家政小程序借助…...

【常用库】【pytorch】基本部件

基本元件 1. 卷积 2. batchnorm loss函数 torch.nn.MSELoss() >>> a torch.rand(3) >>> a tensor([0.2161, 0.2227, 0.9175]) >>> b torch.rand(3) >>> b tensor([0.6976, 0.9149, 0.4918]) >>> mse torch.nn.MSELOSS() &…...

深入Scrapy框架:掌握其工作流程

深入Scrapy框架&#xff1a;掌握其工作流程 引言 作为一名资深的Python程序员&#xff0c;我对各种数据采集工具有着深刻的理解。Scrapy&#xff0c;作为一个上场率极高的爬虫框架&#xff0c;以其高效、灵活和强大的特性&#xff0c;成为数据采集领域的不二选择。在本文中&a…...

从零开始学习机器学习,掌握AI未来的关键!

从零开始学习机器学习 1. 介绍1.1 人工智能&#xff08;AI&#xff09;概述1.2 机器学习在人工智能中的应用1.3 机器学习基础概念 2. 监督学习2.1 什么是监督学习2.2 回归分析2.3 分类问题2.4 模型评估和选择 3. 无监督学习3.1 什么是无监督学习3.2 聚类算法3.3 降维技术 4. 深…...

CI/CD(持续集成/持续部署)

CI/CD(持续集成/持续部署)是软件开发过程中的一种方法,旨在提高开发效率和软件质量。以下是对CI/CD的具体解释: 1.持续集成(Continuous Integration,CI): 概念:开发人员将代码频繁地合并到主分支中,每次提交都会触发自动化构建和测试过程。目的:及时发现和修复集成…...

基于Jina Reader与Exa API的免费网页抓取与搜索工具实践

1. 项目概述&#xff1a;一个轻量级的网络信息抓取与处理工具最近在折腾一些自动化信息处理的项目&#xff0c;发现很多时候需要从网上快速抓取内容或者进行关键词搜索&#xff0c;然后对结果进行结构化处理。市面上的工具要么太重&#xff0c;要么收费&#xff0c;要么就是API…...

Python调用Claude API实战:非官方库集成与自动化应用指南

1. 项目概述与核心价值 最近在尝试构建一些智能化的个人工作流时&#xff0c;我遇到了一个痛点&#xff1a;如何将 Anthropic 公司强大的 Claude 模型&#xff0c;像使用 OpenAI 的 GPT 模型那样&#xff0c;方便地集成到自己的脚本、应用或者自动化工具里。OpenAI 的 API 封装…...

基于T4技术栈的现代全栈应用开发实践与最佳实践解析

1. 项目概述&#xff1a;一个现代全栈应用的原型与起点最近在GitHub上看到一个挺有意思的项目&#xff0c;叫timothymiller/t4-app。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但点进去你会发现&#xff0c;这其实是一个精心设计的全栈Web应用模板。它不是某个…...

模型运行记录

1753...

Harbor:统一管理MCP服务器的配置中心与团队协作平台

1. 项目概述&#xff1a;一个统一管理MCP服务器的“港口” 如果你和我一样&#xff0c;每天都在Claude Code、Cursor、VS Code这几个编辑器之间来回切换&#xff0c;同时还要折腾一堆MCP服务器&#xff0c;那你肯定也经历过这种痛苦&#xff1a;在 ~/.claude.json 里加一个配…...

Happy Island Designer完整指南:免费在线岛屿设计工具终极教程

Happy Island Designer完整指南&#xff1a;免费在线岛屿设计工具终极教程 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal C…...

YOLO26改进| downsample |网络深层多分支互补鲁棒下采样模块

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文给大家带来的教程是将YOLO26的下采样替换为DRFD来提取特征。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修…...

3PEAK思瑞浦 TPA2644-SO2R-S SOP14 运算放大器

特性 供电电压:3V至36V 偏移电压:3mV(最大值)差分输入电压范围至电源轨&#xff0c;可作为比较器工作 带宽:1.5MHz&#xff0c;斜率:0.5V/us输入轨至-Vs&#xff0c;无内部ESD二极管至Vs 低1/f噪声:在10Hz时为50nV/Hz 高PSRR:100kHz时60dB 开机和关机电流期间无明显输出抖动 工…...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述&#xff1a;Atlas&#xff0c;一个充满争议的工程里程碑2013年&#xff0c;当波士顿动力公司为DARPA&#xff08;美国国防高级研究计划局&#xff09;打造的Atlas机器人首次公开亮相时&#xff0c;它在工程技术社区引发的震动&#xff0c;远不止于其令人惊叹的行走…...

《凰标》:写给所有被资本轻视的创作者@凤凰标志

——写给所有不被看见的创作者没有流量即是无用&#xff0c; 没有热度即是不值&#xff0c; 没有商业变现能力即是小众累赘。在资本主导的文娱评价体系里&#xff0c;这条偏见像一道隐形天花板&#xff0c;横亘在每一个草根创作者的头顶。一、被算法淹没的匠心 他们怀揣赤诚热爱…...