【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

news2024/12/23 20:25:44

在这里插入图片描述
💓 博客主页:从零开始的-CodeNinja之路

⏩ 收录文章:【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

🎉欢迎大家点赞👍评论📝收藏⭐文章
在这里插入图片描述
在这里插入图片描述

目录

  • My Batis
    • 前言(配置环境)
        • 开启驼峰命名(推荐)
        • 打印日志
    • 一. 使用注解方式
        • 1.1 增(Insert)
        • 1.2 删(Delete)
        • 1.3 改(Update)
        • 1.4 查(Select)
    • 二.使用 XML 方式
      • 配置连接字符串和MyBatis
      • 写持久层代码
        • 2.1 增(Insert)
        • 2.2 删(Delete)
        • 2.3 改(Update)
        • 2.4 查(Select)
  • 总结

My Batis

Mybatis的开发有两种方式:

  1. 注解
  2. XML

下⾯将学习注解和XML的方式

,使用Mybatis的注解方式,主要是来完成⼀些简单的增删改查功能.如果需要实现复杂的SQL功能,建
议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.

前言(配置环境)

开启驼峰命名(推荐)

通常数据库列使用蛇形命名法进行命名(下划线分割各个单词),而Java属性⼀般遵循驼峰命名法约定.
为了在这两种命名方式之间启用自动映射,需要将 mapUnderscoreToCamelCase 设置为true。

mybatis:
	configuration:
		map-underscore-to-camel-case: true #配置驼峰自动转换

驼峰命名规则:abc_xyz=>abcXyz

• 表中字段名:abc_xyz

• 类中属性名:abcXyz

Java代码不做任何处理:

@Select("select id, username, `password`, age, gender, phone, delete_flag as
deleteFlag, " +
"create_time as createTime, update_time as updateTime from userinfo")

public List<UserInfo> queryAllUser();

添加上述配置,运行代码,字段全部进行正确赋值.

打印日志

在Mybatis当中我们可以借助日志,查看到sql语句的执行、执行传递的参数以及执行结果在配置文件中进行配置即可

mybatis:
	configuration: # 配置打印 MyBatis日志
		log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

如果是application.properties,配置内容如下:

#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

重新运行程序,可以看到SQL执行内容,以及传递参数和执行结果

一. 使用注解方式

我们学习了Mybatis的查询操作,接下来我们学习MyBatis的增,删,改操作

1.1 增(Insert)

SQL语句:

insert into userinfo (username, `password`, age, gender, phone) values
("zhaoliu","zhaoliu",19,1,"18700001234")

把SQL中的常量替换为动态的参数

Mapper接口

@Insert("insert into userinfo (username, `password`, age, gender, phone)
values (#{username},#{password},#{age},#{gender},#{phone})")
Integer insert(UserInfo userInfo);
1.2 删(Delete)

SQL语句:

delete from userinfo where id=6

把SQL中的常量替换为动态的参数

Mapper接口

@Delete("delete from userinfo where id = #{id}")
void delete(Integer id);

1.3 改(Update)

SQL语句:

update userinfo set username="zhaoliu" where id=5

把SQL中的常量替换为动态的参数
Mapper接口

@Update("update userinfo set username=#{username} where id=#{id}")
void update(UserInfo userInfo);
1.4 查(Select)

我们在上⾯查询时发现,有⼏个字段是没有赋值的,只有Java对象属性和数据库字段⼀模⼀样时,才会进行赋值
接下来我们多查询⼀些数据

@Select("select id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo")
List<UserInfo> queryAllUser();

二.使用 XML 方式

如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中.

MyBatisXML的方式需要以下两步:

  1. 配置数据库连接字符串和MyBatis
  2. 写持久层代码

配置连接字符串和MyBatis

此步骤需要进行两项设置,数据库连接字符串设置和MyBatis的XML文件配置。

如果是application.yml文件,配置内容如下:

# 数据库连接配置
spring:
	datasource:
		url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
		
characterEncoding=utf8&useSSL=false
		username: root
		password: root
		driver-class-name: com.mysql.cj.jdbc.Driver
		
# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis:
	mapper-locations: classpath:mapper/**Mapper.xml

如果是application.properties文件,配置内容如下:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false

#连接数据库的用⼾名
spring.datasource.username=root

#连接数据库的密码
spring.datasource.password=root

# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

写持久层代码

持久层代码分两部分

  1. 方法定义Interface
  2. 方法实现:XXX.xml

在这里插入图片描述

2.1 增(Insert)

UserInfoMapper接口:

Integer insertUser(UserInfo userInfo); 

UserInfoMapper.xml实现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserInfoXMlMapper">

	<insert id="insertUser">
		insert into userinfo (username, `password`, age, gender, phone) values (#{username}, #{password}, #{age},#{gender},#{phone})
	</insert>
</mapper>


以下是对以上标签的说明:

  • 标签:需要指定 namespace 属性,表示命名空间,值为mapper接口的全限定 名,包括全包名.类名。
  • 查询标签:是用来执行数据库的查询操作的:
  • id :是和 Interface (接口)中定义的方法名称⼀样的,表示对接口的具体实现方法。
  • resultType :是返回的数据类型,也就是开头我们定义的实体类.

在这里插入图片描述

2.2 删(Delete)

UserInfoMapper接口:

Integer deleteUser(Integer id);

UserInfoMapper.xml实现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserInfoXMlMapper">

	<delete id="deleteUser">
		delete from userinfo where id = #{id}
	</delete>
	
</mapper>

2.3 改(Update)

UserInfoMapper接口:

Integer updateUser(UserInfo userInfo);

UserInfoMapper.xml实现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserInfoXMlMapper">

	<update id="updateUser">
		update userinfo set username=#{username} where id=#{id}
	</update>
	
</mapper>
2.4 查(Select)

同样的,使用XML的方式进行查询,也存在数据封装的问题我们把SQL语句进行简单修改,查询更多的字段内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserInfoXMlMapper">

	<select id="queryAllUser" resultType="com.example.demo.model.UserInfo">
		select id, username,`password`, age, gender, phone, delete_flag,create_time, update_time from 		userinfo
	</select>
		
</mapper>

运行结果:在这里插入图片描述

总结

MySQL开发企业规范

  1. 表名,字段名使用小写字母或数字,单词之间以下划线分割.尽量避免出现数字开头或者两个下划线
    中间只出现数字.数据库字段名的修改代价很⼤,所以字段名称需要慎重考虑。

MySQL在Windows下不区分⼤小写,但在Linux下默认是区分⼤小写.因此,数据库名,表名,字

段名都不允许出现任何⼤写字母,避免节外⽣枝 正例:aliyun_admin,rdc_config,level3_name

反例:AliyunAdmin,rdcConfig,level_3_name

  1. 表必备三字段:id,create_time,update_time

id必为主键,类型为bigintunsigned,单表时自增,步⻓为1
create_time,update_time的类型均为datetime类型,create_time表示创建时间,
update_time表示更新时间 有同等含义的字段即可,字段名不做强制要求

  1. 在表查询中,避免使用*作为查询的字段列表,标明需要哪些字段(课堂上给⼤家演示除外).

    1. 增加查询分析器解析成本
    2. 增减字段容易与resultMap配置不⼀致
    3. 无用字段增加网络消耗,尤其是text类型的字段

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

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

相关文章

算法入门<二>:分治算法之汉诺塔问题及递归造成的栈溢出

1、分治算法 分治&#xff08;divide and conquer&#xff09;&#xff0c;全称分而治之&#xff0c;是一种非常重要且常见的算法策略。分治通常基于递归实现&#xff0c;包括“分”和“治”两个步骤。 分&#xff08;划分阶段&#xff09;&#xff1a;递归地将原问题分解为两…

【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、回调函数二、快速排序(Qsort)2.1 Qsort参数部分介绍2.2 不…

数据仓库和数据仓库分层

一、数据仓库概念 数据仓库(Data Warehouse)&#xff0c;可简写为DW或DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决策支持目的而创建。 为需要业务智能的企业&#…

计算机网络4——网络层4内部路由选择协议

文章目录 一、有关路由选择协议的几个基本概念1、理想的路由算法2、分层次的路由选择协议 二、内部网关协议 RIP1、协议 RIP 的工作原理2、特点3、距离向量算法4、坏消息传播慢 三、内部网关协议 OSPF1、基本特点2、OSPF 的五种分组类型 本节将讨论几种常用的路由选择协议&…

uniapp 自定义 App启动图

由于uniapp默认的启动界面太过普通 所以需要自定义个启动图 普通的图片不可以过不了苹果的审核 所以使用storyboard启动图 生成 storyboard 的网站&#xff1a;初雪云-提供一站式App上传发布解决方案

从零入门区块链和比特币(第一期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

使用RTSP将笔记本摄像头的视频流推到开发板

一、在Windows端安装ffmpeg 1. 下载ffmpeg:下载ffmpeg 解压ffmpeg-master-latest-win64-gpl.zip bin 目录下是 dll 动态库 , 以及 可执行文件 ;将 3 33 个可执行文件拷贝到 " C:\Windows " 目录下 ,将所有的 " .dll " 动态库拷贝到 " C:\Windows\Sy…

java集合框架中的Map和Set的使用方式

目录 一、Map的使用方法说明 put&#xff08;&#xff09;&#xff1a; GetOrDefault()&#xff1a; containsKey()与containsVal&#xff08;&#xff09;&#xff1a; keySet()与m.values()&#xff1a; 二、Set的使用方法说明 add(): iterator()---->迭代器 一、M…

19 做好微服务间依赖的治理和分布式事务

在前两讲里&#xff0c;分别从微服务的对外接口、消息消费以及微服务自身的相关编码规范上阐述了“防备上游、做好自己”这两个准则如何落地。 在本讲里&#xff0c;将会讲解为什么要“怀疑下游”&#xff0c;以及有哪些手段可以落地此条准则。此外&#xff0c;还会介绍在进行…

每日OJ题_DFS爆搜深搜回溯剪枝②_力扣526. 优美的排列

目录 力扣526. 优美的排列 解析代码 力扣526. 优美的排列 526. 优美的排列 难度 中等 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm&#xff08;下标从 1 开始&#xff09;&#xff0c;只要满足下述条件 之一 &#xff0c;该数组就是一个 优美的排列 &#…

Content type ‘application/json;charset=UTF-8‘ not supported异常的解决过程

1.首先说明开发场景 *就是对该json格式数据传输到后台 后台实体类 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import org.sp…

Linux搭建靶场

提前准备&#xff1a; 文章中所使用到的Linux系统&#xff1a;Ubantu20.4sqlilabs靶场下载地址&#xff1a;GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令&#xff1a;wget -O install.sh h…

《MySQL对库的基本操作》

文章目录 一、查看数据库列表查看数据库中的所有表想知道当前处于哪个数据库里 二、创建一个数据库三、删除一个数据库知道两个集1.字符集2.校验集修改数据库的字符集和编码集 不同的校验码对数据库的影响四、数据库的备份与恢复注意事项&#xff1a;备份数据库中的表 总结 一、…

Lan仿朋友圈系统源码,用于表白墙等微商相册,商品图册等

这是一套基于PHP开发的Lan仿朋友圈系统开源&#xff0c;适用于表白墙、微商相册、商品图册等场景。 下 载 地 址 &#xff1a; runruncode.com/php/19750.html 主要功能包括&#xff1a; - 支持前端用户注册和消息提示。 - 用户注册时可设置必须验证邮箱账号&#xff0c;以…

【C++】学习笔记——类和对象_5

文章目录 二、类和对象14. 日期类的实现15. const成员16. 取地址重载17. 再谈构造函数初始化列表 18. explicit关键字19. static成员 未完待续 二、类和对象 14. 日期类的实现 上一篇我们已经大致将日期类的重要功能都给实现了&#xff0c;这节将会对日期类进行完善&#xff…

Linux 端口复用:SO_REUSEPORT

文章目录 前言一、BSD socket1.1 简介1.2 SO_REUSEADDR1.2.1 3-way or 4-way handshake1.2.2 SO_LINGER 1.3 SO_REUSEPORT 二、Connect() Returning EADDRINUSE三、Multicast Addresses四、Linux4.1 Linux < 3.94.2 Linux > 3.9 五、Linux SO_REUSEPORT socket option六、…

python安卓自动化pyaibote实践------学习通自动刷课

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文是一个完成一个自动播放课程&#xff0c;避免人为频繁点击脚本的构思与源码。 加油&#xff01;为实现全部电脑自动化办公而奋斗&#xff01; 为实现摆烂躺平的人生而奋斗&#xff01;&#xff01;&#xff…

【吊打面试官系列】Java高并发篇 - 为什么 wait 和 notify 方法要在同步块中调用?

大家好&#xff0c;我是锋哥。今天分享关于 【为什么 wait 和 notify 方法要在同步块中调用&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 为什么 wait 和 notify 方法要在同步块中调用&#xff1f; Java API 强制要求这样做&#xff0c;如果你不这么做&#…

论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器

论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器 优势&#xff1a; 1.针对CNN和Transformer提出了通用的计算映射&#xff08;共用计算单元&#xff0c;通过不同的映射指令&#xff0c;指导数据通路和并行计算&#xff09; 2.非线性与归一化加速单元&#xff0…

windows和mac 电脑 部署Ollama

官网地址&#xff1a;https://ollama.com/ github地址&#xff1a;https://github.com/ollama/ollama 一、windows下 https://github.com/ollama/ollama 安装大模型 ollama run llama3 下载的大模型地址&#xff1a; C:\Users\dengg\.ollama 4.34G