数据库学习(四)mybatis

Mybatis 

Mybatis是一个基于数据持久层(DAO层)的一款框架,他能极大的简化Java中连接数据库,操作数据库也就是jdbc的操作。

在定义mybatis相关接口时,不需要定义实现类,因为在程序启动时,mybatis底层会自动生成相关的实现类。

Mybatis第一个入门程序

创建一个springboot项目的程序,使用mybatis框架将本地数据库user中的数据取出并存入创建的User实体类中,最后将存入的User实体类对象打印出。

1、连接数据库

需要使用mabatis操作数据库,首先需要连接数据库,在创建好的spingboot项目中,自动提供了一个application.properties配置文件,在其中就可以添加数据库的相关配置来连接数据库,1、相关数据库的驱动类名称2、连接数据库的url。3、数据库的用户名。4、数据库的密码,通过该配置文件就能实现在程序启动时,mybatis框架自动连接相关数据库

2、创建mapper接口

mapper接口相当于之前的DAO层中的接口,实现的是将数据库中的数据取出,该接口使用@Mapper注解表示在程序运行时,会自动创建这个接口的实例化对象,并交给IOC容器管理,而在这个接口里,使用@Select注解定义里面的抽象方法,注解后面跟上相关的查询语句,那么在该实例化对象被创建时,会自动实现该抽象方法,也就是执行@Select注解后面的查询语句,这样也就实现了对数据库的查询操作。

3、通过依赖注入创建实例化类

将查询出的数据作为该实体化类的对象进行存储,因为在之前Mapper接口已经被添加了@Mapper注解,在程序启动时会自动创建该接口的实例化对象并交给IOC容器管理,于是在启动类里直接创建该接口的对象不赋值,给该语句添加@Autowired注解,这样通过依赖注入就能自动创建Mapper接口的实例化对象,再在启动类里直接调用该对象的方法执行查询语句,再将查询后的信息转化为实体化对象User通过集合存储,最后将对象打印,这样一个mabatis对数据库进行操作的简单入门程序就完成了。

 通过mybatis实现基本增删改查操作

1、删除操作

删除一般是在前端发送过来请求删除数据,而发送过来的往往是该数据的唯一标识,也就是主键id,所以删除语句执行的判断条件就是id与前端请求的id相同,通过@delete注解就能实现写入删除sql语句进行删除数据,而在接口的编写中,由于删除的次数可以多次,所以不能将id写死,所以需要mybatis提供的占位符#{id},这样的话就能将方法传入的参数赋值给#{数据}占位符内的数据:

使用#{}占位符能实现sql预编译的功能,预编译相当于是创建了一个缓冲池,将之前执行过的sql语句放入该池中,如果后面有新的语句执行,则会直接将对应不同的部分直接带入进池中执行,不需要重新编译,能有效的避免sql注入,从而提高项目的安全性并且由于已经编译过,在下次使用时直接就能代入执行,所以性能更高。 

2、添加操作 

添加操作与删除操作类似,也是在接口里创建一个@Insert注解标识的方法,并在其后实现添加语句,但是因为添加的属性往往很多,这时我们一般是将这些属性先封装成一个实体类对象,然后再通过调用这个实体类对象的属性进行添加的操作

创建实体类对象:

编写添加接口

在测试类中给实体类对象赋值,以及创建实例化对象调用接口的方法

这样就能初步实现利用mybatis对数据库进行添加数据的操作,有时需要拿到添加元素的ID,则需要在添加注解的基础上添加一个Options注解

3、更新操作

更新操作主要使用update注解,主要更新方式与之前的删除添加语句类似,如下:

4、查询操作

在执行查询操作时,想让数据库里的属性通过对象的方式封装返回,但由于表的命名规范与Java的驼峰命名有时不一致,例如数据库中创建时间为create_time,Java中为createTime,所以容易导致有时候无法将数据库里的这类属性封装到实体类中,这时就得打开mybatis自带的驼峰命名,将create_time这种下划线格式在封装进对象时自动变为Java中的驼峰命名createTime,这样就能避免一些因为属性名不一样导致的错误

在有时候查询会遇到模糊查询的情况,例如查出姓张的人,这时就需要使用like和占位符,但是在sql语句的书写时,由于#{}的原因,会将里面的所有内容当作字符串进行匹配,这样就达不到占位符的目的,这时就需要concat函数对%,‘张’,%进行一个拼接。

使用xml配置文件进行sql操作 

在通常的数据库操作中,往往通过配置文件的方式使用mybatis对数据库进行操作而不使用注解

动态sql语句 

通过xml文件能实现数据库的相关操作,但是如上的代码会有一个弊端,也就是如果我只想查找姓张的员工,不想添加其他限制条件,这个时候按之前的sql语句查询的话就不行,这个时候就需要动态sql语句的执行,主要是利用动态sql标签实现

if标签和where标签

if标签修饰的sql语句跟Java中的if一样,只有if标签内的条件成立,后面的sql语句才会执行,这样的话如果我们只需要查询姓张的员工不需要其他限制条件的查询时,就能直接将其他查询需要的属性值直接设置为null,而where标签则能自动识别哪些地方需要and,哪些地方不需要,避免因为and导致不必要的sql语句语法错误。

同理在修改相关数据的时候,同样也能使用动态sql语句,且使用动态set标签能自动避免多余的逗号导致的sql语法错误,即动态更新语句会将需要修改的值进行修改,如果没传入需要修改的值,则会认为该值自动为null,则不会对其进行修改,保持该值原来的属性

foreach标签 

 使用foreach标签能对一个范围内进行遍历,例如在in关键字后面的范围中,实例如下:下面为一个批量删除的操作。传入一个集合,对该集合内部的元素进行遍历,按照该集合内的id对相应id的用户信息进行删除。

foreach标签内的各个属性如下: 

 

sql标签和include标签 

在实际开发中如果出现大量的重复需要查询的对象,如果不对其进行封装,后期维护或者修改业务需求的话会很难,所以使用sql标签将这部分重复的代码封装起来,如下:将需要查询的重复语句封装起来,如果需要,直接调用include标签传递相关名字的片段。

 

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

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

相关文章

程序员如何兼职赚小钱?

程序员由于有技术和手艺其实兼职赚钱的路子还是挺多的,只要你有足够的时间。 1. 做外包 这是比较传统的方式,甲方在一些众包平台上发布开发任务,你可以抢这个任务,但是价格都比较便宜。 任务比较多的平台: 猪八戒、一品威客、开…

聚合支付备案新增机构名单公布,14家机构成功备案

孟凡富 3月27日,中国支付清算协会公布了最新一批收单外包服务机构备案机构结果,总备案机构为27000家,新增备案机构为648家,其中,新增聚合支付技术服务备案机构包括北京鑫杰华誉、深圳中峻、多点(深圳)数字科技、扬州泽…

Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

如果我们的计算机视觉系统要真正理解视觉世界,它们不仅必须能够识别图像,而且必须能够生成图像。文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。 近两年,以ChatGPT为代表的AIGC技术崭露头角,逐渐从学术研究的象牙塔迈…

静态、动态代理模式(Spring学习笔记八)

代理模式是SpringAOC的底层 代理模式分为:静态代理模式 动态代理模式 1、静态代理 代码步骤 接口: package com.li.dedmo01;public interface Rent {public void rent(); }真实角色: package com.li.dedmo01;public class Host imple…

没有与参数列表匹配的构造函数“cv::VideoWriter::VideoWriter”实例

今天在使用Visual Studio开发与OpenCV相关的程序时,遇到了这样的情况: 第一个参数的下方被打上了红波浪线,我本能的觉得是第一个参数出的问题,于是改成了这样: 红线依然存在,没有消失,把鼠标放在红线下方&#xff0c…

AI Agent(LLM Agent)入门解读

1. 什么是AI Agent? AI Agent可以理解为一个智能体,包括感知模块、规划决策模块和行动模块,类似于人类的五官、大脑和肢体。它能帮助人类处理复杂的任务,并能根据环境反馈进行学习和调整。 五官可以理解为感知模块,大…

Linux相关命令(1)

1、找出文件夹下包含 “aaa” 同时不包含 “bbb”的文件,然后把他们重新生成一下。要求只能用一行命令。 find ./ -type f -name "*aaa*" ! -name "*bbb*" -exec touch {} \;文件系统操作命令 df:列出文件系统的整体磁盘使用情况 …

已注册的商标别忘了续展,新注可能难下证!

近期普推知产老杨遇到好几个网友和看过多个案例,以前商标名称可以申请注册下来,但是换字体注册不下来了,有的是不想续展想直接换字体申请注册,但是也没有下来。 这些商标名称主要是存在禁止注册或缺显,比如“柳林”以前…

LeetCode讲解算法2-数据结构[栈和队列](Python版)

文章目录 一、栈1.1 栈的定义1.2 栈的实现分析步骤1.3 栈的应用匹配圆括号匹配符号模2除法(十进制转二进制)进制转换 二、队列2.1 单向队列2.2 双端队列2.3 队列的应用验证回文串滑动窗口最大值 一、栈 1.1 栈的定义 栈是一种线性数据结构,栈…

【MySQL】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

【那些年错过的好书】——Web前端开发实战:HTML5+CSS3+JavaScript+Vue+Bootstrap(微视频版)

喜欢前端的同学,可以私信我加入学习群。 点击链接,获取资源: https://lizetoolbox.top:8080/qrCode_contact 或者 http://lizetoolbox.top/qrCode_contact 正文开始 前言推荐理由书籍介绍章节介绍实书示例写在最后 前言 陌生的朋友&…

kubectl 启用shell自动补全功能

官网手册参考:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/ 系统:centos7 补全脚本依赖于工具 bash-completion, 所以要先安装它(可以用命令 type _init_completion 检查 bash-completion 是否已安装&a…

Python爬虫之爬取网页图片

当我们想要下载网页的图片时,发现网页的图片太多了,无从下手,那我们写一个脚本来爬取呗。 这次的脚本是专门针对某个外国网站使用的,因此仅供参考思路。 在测试的过程中,我发现网站使用了发爬虫机制,具体就…

阿里云服务器优惠价格61元一年,多配置报价,来看看

2024年阿里云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

AI+软件工程:10倍提效!用ChatGPT编写系统功能文档

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 用ChatGPT生成系统功能文档 我们以线上商城系统为例&#…

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法,例如缓存了User表,当User表巨大时,通过id全量去清理不现实,耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口,并没…

Java设计模式 | 抽象工厂模式

抽象工厂模式 工厂方法模式中考虑的是一类产品的生产,如幼儿园只培养小朋友,鞋厂只生产鞋子。这些工厂只生产同种类产品,同种类产品称为同等级产品,即工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂都…

有什么代理IP推荐?如何分辨代理IP类型?

跨境外贸是近几年来的热门行业,在众多助力跨境出海的工具中,代理IP也是强力的一大保障。不仅可以帮助企业拓展更大的地区市场,更加顺畅进行市场调查,更重要地,在TikTok、Amazon、Ebay、Instagram、Etsy等等跨境平台业务…

介绍一下Redis的集群模式?

Redis有三种主要的集群模式,用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是:主从复制(Master-Slave Replication)、哨兵模式(Sentinel)和Redis Cluster模式。 一、问题解析 主从模式 主从…

学点儿数据库_Day11_多表、等值连接、内连接、模糊查找

1 多表 学生表、班级表、课程表、班级课程表 关系型数据库: MySql、SqlServer、Oracle 相同的数据出现多次绝不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一个数据一个表,各表通过某些共同的…