MyBatis学习笔记

MyBatis中文网:https://mybatis.net.cn/

1 什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

持久层:指的是就是数据访问层(dao),是用来操作数据库的。
在这里插入图片描述

2 Mybatis基础操作

根据主键 ID 删除数据

//使用#{key}方式获取方法中的参数值
@Delete("delete from emp where id = #{id}")
public void delete(Integer id);

新增(可主键返回)

@Options(useGeneratedKeys = true,keyProperty = "id")	// 会自动将生成的主键值,赋值给emp对象的id属性(可省略)
@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
public void insert(Emp emp);

更新

@Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} where id=#{id}")
public void update(Emp emp);

查询

@Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp where id=#{id}")
public Emp getById(Integer id);

3 Mybatis的XML配置文件

Mybatis的开发有两种方式,分别是注解和XML

3.1 XML配置文件规范

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:
  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

XML配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.wuyh.mapper.EmpMapper"><select id="list2" resultType="com.wuyh.pojo.Emp">select * from mybatis.emp where name like concat('%', #{name}, '%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc</select>
</mapper>

使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

4 Mybatis动态SQL

动态SQL:SQL语句会随着用户的输入或外部条件的变化而变化。

<if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

<if test="条件表达式">要拼接的sql语句
</if>

<where>:where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR

<set>:动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)

<foreach>:为批量处理数据提供循环遍历操作。

<foreach collection="集合名称" item="集合遍历出来的元素/项" separator="每一次遍历使用的分隔符" open="遍历开始前拼接的片段" close="遍历结束后拼接的片段">
</foreach>

<sql>:定义可重用的SQL片段。
<include>:通过属性refid,指定包含的SQL片段。

通过<sql>标签封装到一个SQL片段,然后再通过<include>标签进行引用。两者配合使用
作用:对重复的SQL代码片段进行封装,减少冗余。

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

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

相关文章

实用篇 | 一文学会人工智能中API的Flask编写(内含模板)

在日常人工智能演示中&#xff0c;比较常用的api展示方式如flask,gradio等Web调用方式。在本文中&#xff0c;详细描述了在编写flask api中语法及语音文本图像模版案例等~ Flask是微型的Python Web框架&#xff0c;如果模型本身就是用python语言构建的&#xff0c;那么利用FLa…

重置css样式

每个浏览器都有一套默认样式&#xff0c;所以为了避免出现不同浏览器之间的默认样式问题 &#xff0c;最好是设置一套默认样式&#xff0c;将浏览器的默认样式清除&#xff0c;下面是css代码&#xff1a; html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5,…

YOLOv3 快速上手:Windows 10上的训练环境搭建

文章目录 前言一、前期准备二、基础环境准备1. 创建虚拟环境2. 打开Terminal3. 下载YOLOv3运行环境 三、PyCharm关联3.1 运行PyCharm3.2 关联Anaconda虚拟环境 四、运行环境检查1. 检查requirements.txt文件2. 安装依赖 五、运行代码5.1 运行检测代码5.2 运行训练代码 六、常见…

虹科干货 | 关于JSON数据库

来源&#xff1a;艾特保IT 虹科干货 | 关于JSON数据库 原文链接&#xff1a;https://mp.weixin.qq.com/s/NutCGWa32rOcEHrk3UDGcQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 如何理解JSON数据库&#xff1f;作为NoSQL数据库的一种类型&#xff0c;JSON数据库有哪…

罗技鼠标使用接收器和电脑重新配对

罗技鼠标使用接收器和电脑重新配对 文章目录 罗技鼠标使用接收器和电脑重新配对1\. 前言2\. 安装软件3\. 进行配对3.1. 取消之前的配对3.2. 重新配对3.3 配对完成 4\. 报错4.1. 重新配对时显示配对未成功 1. 前言 罗技的鼠标出厂的时候&#xff0c;默认的是将通道一设置为接收…

如何通过navicat连接SQL Server数据库

本文介绍如何通过Navicat 连接SQL Server数据库。如果想了解如何连接Oracle数据库&#xff0c;可以参考下边这篇文章。如何通过Navicat连接Oracle数据库https://sgknight.blog.csdn.net/article/details/132064235 1、新建SQL Server连接配置 打开Navicat软件&#xff0c;点击…

【华为OD题库-067】报数游戏-java

题目 100个人围成—圈&#xff0c;每个人有一个编码&#xff0c;编号从1开始到100。他们从1开始依次报数&#xff0c;报到为M的人自动退出圈圈&#xff0c;然后下一个人接着从1开始报数&#xff0c;直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少? 输入描述: 输入…

链表|2. 两数相加160. 相交链表 234. 回文链表

2. 两数相加 题目&#xff1a;给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0…

极简模式,助力宏观数据监控

随着UWA GOT Online采样的参数越来越多样化&#xff0c;为了提升开发者的使用体验&#xff0c;我们最新推出了三种预设数据采集方案&#xff1a;极简模式、CPU模式、内存模式。该更新旨在降低多数据采集对数据准确性的干扰&#xff0c;同时也为大家提供更精准且有针对性的数据指…

解决使用Flipper无法连接到苹果模拟器,却能连接到安卓

而且这些都是显示正常 可是打开Virtual device一看ios一直在加载中 然后我打开日志看了下&#xff0c;然后各种找配置&#xff0c;项目里边配置改了又改&#xff0c;最后发现是缺少了个插件 //1、 检查 idb 和 idb_companion 是否已经安装 brew tap facebook/fb brew install …

Chart 3 Adreno OpenCL 应用程序开发

文章目录 前言4.1 Android上进行OpenCL应用程序开发4.2 Adreno OpenCL SDK 和 Adreno OpenCL 机器学习 SDK4.3 调试工具和技巧 前言 本章主要介绍如何 debug Adreno OpenCL应用程序 4.1 Android上进行OpenCL应用程序开发 Adreno GPU 主要在 Android 操作系统和部分 Linux 系统…

二叉树刷题Leetcode

文章目录 104.二叉树的最大深度100.相同的树965.单值二叉树 104.二叉树的最大深度 int maxDepth(struct TreeNode* root) {if(rootNULL)return 0; int left1maxDepth(root->left); int right1maxDepth(root->right); return left>right?left:right; }处理二叉树最大深…

感觉到自己思想扭曲了

突然觉得自己思想有点扭曲。 ​起因是近期备婚&#xff0c;需要给男方家人买衣服。问男朋友妹妹衣服预算多少&#xff0c;说是500内&#xff0c;然后想想自己这个新娘子&#xff0c;那一身衣服绞尽脑汁凑满减不到300。再联想到装饰新房&#xff0c;新房买家具&#xff0c;为了省…

TikTok与社会责任:平台如何推动正能量?

近年来&#xff0c;TikTok作为一款备受欢迎的社交媒体平台&#xff0c;不仅令人们畅享创意短视频&#xff0c;更在推动社会正能量方面发挥了积极作用。 本文将深入探讨TikTok在社会责任方面的表现&#xff0c;探究其是如何通过不同的举措推动正向影响&#xff0c;引领社会向更…

【C++】atomic原子操作

std::atomic 文章目录 std::atomic构造函数is_lock_free函数std::atomic_flagatomic_flag实现原子锁atomic_flag实现自旋锁 store函数内存模型load函数exchange函数示例 C中原子变量&#xff08;atomic&#xff09;是一种多线程编程中常用的同步机制&#xff0c;它能够确保对共…

js实现在线预览(PC)图片、pdf、excel、docx

js实现图片预览 参考:添加链接描述 图片预览 本来用的是element-plus自带的组件el-image,但是去不掉缩略图,所以换成了el-imag-viewer组件(图片可拖拽),由于用的vite没有require方法,需要自己处理一下图片才能显示。 参考1:巧用element-ui自带隐藏的图片查看器el-imag…

Java分布式全局唯一Id:id生成要求、为什么不用UUID、生成分布式雪花Id

文章目录 为什么需要分布式全局唯一IdId生成规则部分硬性要求Id生成系统的可用性要求为什么不用UUID生成分布式雪花IdPOM代码示例API生成18位雪花Id生成13位雪花Id 为什么需要分布式全局唯一Id 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。 如在美团点评的金…

23史上最全版---SQL注入详解

漏洞原因 一些概念&#xff1a; SQL&#xff1a;用于数据库中的标准数据查询语言。 web分为前端和后端&#xff0c;前端负责进行展示&#xff0c;后端负责处理来自前端的请求并提供前端展示的资源。 而数据库就是存储资源的地方。 而服务器获取数据的方法就是使用SQL语句进…

【开源】基于Vue+SpringBoot的数据可视化的智慧河南大屏

项目编号&#xff1a; S 059 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S059&#xff0c;文末获取源码。} 项目编号&#xff1a;S059&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 …

Linux: Ftrace: function_graph 里面有irq处理的函数

Linux: ftrace: echo function_graph &#xff1e; current_tracer 在做这个函数调用图的时候&#xff0c;会发现这个函数调用非常的大&#xff0c;有些是irq的处理函数&#xff0c;也放在其中&#xff0c;前后有标记&#xff1a; Line 18702: 1) < | Line 22335: 1) …