MyBatis 知识总结

1 MyBatis 

1.1 简介

        持久层框架,用于简化JDBC开发

JavaEE三层架构:表现层、业务层、持久层

表现层:做页面展示

业务层:做逻辑处理

持久层:负责将数据保存到数据库的那一层代码

框架:半成品软件,一套可重用的、通用的、软件基础代码模型

1.2 快速入门

2 解决SQL语句警告提示

3 Mapper代理开发

4 Mybatis 核心配置文件

5 配置文件完成增删改查

5.1 查询

5.1.1 查询所有结果

MyBatis完成操作需要三步:编写接口方法->编写SQL->执行方法

【注】数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据 

解决一:起别名:对不一样的列名起别名,让别名和实体类的属性名一样

缺点:每次查询都要定义一次别名

5.1.2 查看详情

说明 :

1、参数占位符:

#{}:会将其替换为 ? ,为了防止SQL注入

${}: 进行sql拼接,会存在SQL注入问题

2、参数占位符使用时机:

- 参数传递时:#{}

- 对表名和列名进行动态设置时:${}  // 比较少 

【注】SQL注入问题可以理解为SQL语句不合法

<select id = "selectById" resultMap = "brandResultMap">
    select *
    from ${tbName} where id = #{id}

 3、parameterType:用于设置参数类型,该参数可以省略

4、SQL语句中特殊字符处理:

① 转义字符,如:< :&lt

② <![CDATA[内容]]>

5.1.3 条件查询

【分析】

1、条件表达式

2、如何连接各个条件表达式

5.1.4 动态条件查询 

要求:输入所有条件中的其中一个条件也能够实现查询

【注】SQL语句随着用户的输入或外部条件的变化而变化,我们称为动态SQL

多条件动态查询:

if:

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
  <if test="author != null and author.name != null">
    AND author_name like #{author.name}
  </if>
</select>

语法结构:

<if test = “逻辑表达式”>

        条件表达式  // if 用于判断参数是否有值,使用 test 属性进行条件判断
问题:第一个条件不需要逻辑运算符
解决①:where后面加一个恒等式 使得后面的执行语句格式统一,都有and 

解决②:<where> 替代 where 关键字

单条件动态查询 

choose(when、otherwise)

        从多个条件中选择一个使用,针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句

choose ------------->  switch

when --------------->  case

otherwise ---------> default   

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

foreach
        对集合进行遍历(尤其是在构建 IN 条件语句的时候)

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  <where>
    <foreach item="item" index="index" collection="list"
        open="ID in (" separator="," close=")" nullable="true">
          #{item}
    </foreach>
  </where>
</select>

【注】可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素;当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值 。

5.2 添加

【存在问题】无法获取到 id ,原因是这个 id 值没有绑定到对象上

【解决方法】

<insert id = "addOrder"  useGeneratedKeys = "true"  keyProperty = "id">

5.3 修改

5.3.1 修改全部字段

5.3.2 修改动态字段

【注】如上图左下角代码,当修改部分字段如新密码时,只有用户id和密码会进行输入,这个时候执行SQL语句,其他值就会被设置为Null,所以需要进行动态修改字段,即上图右,主要是利用<set></set> 和 <if></if>标签来完成的动态修改

5.4 删除

5.4.1 删除一个

5.4.2 批量删除

将选中的 id 封装到 id 数组,然后遍历数组,根据 id 进行删除

         这里的?占位符个数是随着传入数组的变化而变化的,所以需要动态SQL语言编写,mybatis提供了<foreach>标签完成遍历。

【注】mybatis会将数组参数封装为一个Map集合。默认key的名称叫 array ,value 值=数组。可以使用 @Param 注解改变 map 集合的默认 key 的名称。

6 参数传递

6.1 多个参数

 mybatis会将传入的多个参数封装为Map集合

可以使用 @Param 注解,替换 Map 集合中默认的 arg 键名

@Param("**")注解中的参数应当和SQL语句中的参数占位符的名称保持一致

6.2 单个参数

【注】建议将来都使用 @Param 注解来修改 Map 集合中的默认的键名,并使用修改后的名称来获取值,这样可读性更高!

7 注解完成增删改查

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DefaultListableBeanFactory

DefaultListableBeanFactory 是一个完整的、功能成熟的 IoC 容器&#xff0c;如果你的需求很简单&#xff0c;甚至可以直接使用 DefaultListableBeanFactory&#xff0c;如果你的需求比较复杂&#xff0c;那么通过扩展 DefaultListableBeanFactory 的功能也可以达到&#xff0c…

找工作在哪个app找比较真实可靠

吉鹿力招聘网是一款找工作比较真实靠谱的app。吉鹿力招聘网是一个新兴的人脉社交招聘平台&#xff0c;靠谱而且需求明确&#xff0c;可以依靠自己或者身边朋友推荐。在吉鹿力招聘网上可以有很多前辈的职场分享和行业八卦&#xff0c;对于刚毕业的大学生而言&#xff0c;很有参考…

2024怎么自学软件测试?自动化测试?测试老鸟总结,少走弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自学软件测试怎…

【vue+baiduMap】百度地图绘制多边形区域

1、创建百度地图应用&#xff0c;获取权限ak 百度地图服务台 Ps.本项目里按钮等基础控件使用的是element-ui版本控件 2、项目内全局引入 index.html页面插入引用代码&#xff1a; <scriptsrc"//api.map.baidu.com/api?v2.0&ak你的密钥"type"text/ja…

数字化催生低代码开发浪潮,管理系统也能一键生成

近年来&#xff0c;数字经济以无比迅猛的势头崛起&#xff0c;成为引领全球经济变革的重要引擎。在这个数字化趋势日益明显的时代&#xff0c;企业的数字转型已经成为提高竞争力、适应市场需求的迫切需要。 随着科技的飞速发展&#xff0c;数字技术已经渗透到各个领域&#xff…

详细介绍‘’由于找不到msvcr110.dll 无法继续执行简单处理方法

分享关于“msvcp110.dll丢失的4个解决方案”的主题。在我们日常使用电脑的过程中&#xff0c;可能会遇到各种各样的问题&#xff0c;而msvcp110.dll丢失就是其中之一。那么&#xff0c;msvcp110.dll丢失是什么意思呢&#xff1f;又是什么原因导致了这个问题的出现呢&#xff1f…

详细记一下jvm调优整过程

cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流量进来&#xff0c;而且活动结束后cpu占用率就下降了&#xff0c;如果是这种情况其实可以不用太关心&#xff0c;因为请求越多&#xff0c;需要处理的线程数越多&#xff0c;这…

2019年12月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 下列关于舞台的描述,不正确的是? A:Scratch只能设置一个舞台 B:舞台不能进行编程 C:舞台可以有多个背景 D:舞台上可以有角色 答案:B A选项,scratch只有一个舞台,B选项,可以在舞台区进行编程,例如切换背景,设置背景…

【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】

文章目录 概要前置条件统计数据分析直方图均衡化原理小结 概要 图像处理是计算机视觉领域中的重要组成部分&#xff0c;而直方图在图像处理中扮演着关键的角色。如何巧妙地运用OpenCV库中的图像处理技巧&#xff0c;特别是直方图相关的方法&#xff0c;来提高图像质量、改善细…

【云备份项目总结】客户端篇

项目总结 整体回顾util.hppdata.hppcloud.hpp 代码 客户端的代码与服务端的代码实现有很多相似之处&#xff0c;我们也只编写一个简单的客户端代码。 整体回顾 客户端要实现的功能是&#xff1a;对指定文件夹中的文件自动进行备份上传。但是并不是所有的文件每次都需要上传&am…

2020年09月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 下面哪个积木能够调节左右声道的音量? A: B: C: D: 答案:C 第2题 当我们进行数学计算时,需要用到下面哪个模块中的积木? A: B:

【已解决】vscode 配置C51和MDK环境配置

使用命令 gcc -v -E -x c - 看自己gcc 有没有安装好 也可以在自己的vscode中新建一个终端 gcc -v g -v 首先把自己的C51 和MDK 路径 设置好 vscode 中设置 C51 和 MDK 的路径 这是你keil 中写 51单片机和 STM32 的 如果你出现什么include 的什么波浪线&#xff0c;那估计…

如何用python生成动态随机验证码图片

相信大部分小伙伴在登录注册页面都看到过这样的验证码图片&#xff1a; 今天就带大家用实现一波这种验证码图片的生成&#xff0c;这在Django开发中可以拿来即用~ 1. 首先导入必要的库&#xff1a; import random from PIL import Image, ImageDraw, ImageFont, ImageFilter…

编译原理-至下而上的语法分析

文章目录 至下而上分析的基本问题归约短语规范归约符号栈的使用 算符优先分析优先关系算符文法及优先关表构造如何求FIRSTVT和LASTVT算符优先分析算法优先函数 至下而上分析的基本问题 归约 用一个寄存符号的先进后出栈&#xff0c;把输入符号一个一个地移进栈里&#xff0c;…

SAP 52策略测试简介

我们在前面测试了50策略按单生产,创建完计划独立需求后,通过主数据中的独立集中的字段控制下层物料是否能通过计划订单转成生产订单和采购订单。 52策略其实和50策略非常的相似。52策略就是按库存生产,创建完计划独立需求后的结果和50策略是一样的。 1、我们先看下50策略和…

从零基础到精通:Flutter开发的完整指南

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 第一部分&#xff1a;入…

Linux:给openlab搭建web网站

httpd服务器建立综合练习 建立网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; &#xff08;1&#xff09;、基于 www.openlab.com/stud…

LiveMedia视频监控汇聚管理平台功能方案之REST HTTP接口服务(六)

LiveMedia视频监控汇聚管理平台全面支持HTTP接口与其他系统对接&#xff0c;接口包含登陆、视频设备/组织结构添加、修改、删除、实时视频、录像回放、定位、设备控制、报警通知及报警联动等&#xff0c;第三方系统可以无缝的把视频中间件当作自身系统中的一个组件来调用和同步…

常用的软件测试组织架构模型

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;加入1000人软件测试技术学习交流群&#x1f4e2;资源分享&#xff1a;进了字节跳动之后&#xff0c;才…

Slax Linux 强化了会话管理和引导参数选项

导读Slax Linux 的创始人和维护者Tomas Matejicek 宣布 了他的微型和便携 GNU/Linux 发行版的新版本&#xff0c;带来了各种增强和错误修复。 新的 Slax Linux 版本&#xff08;基于 Debian 的 12.1 版本和基于 Slackware 的 15.0.2 版本&#xff09;引入了在可写设备上运行发…
最新文章