MyBatis详解

😀搭建 MyBatis


    mysql
    mysql-connector-java
    8.0.29

    org.mybatis
    mybatis
    3.5.7

    junit
    junit
    4.12
    test

  • mapper 接口的全类名和映射文件中的命名空间保持一致
  • mapper 接口中的方法名和映射文件中的 SQL 标签的 id 属性保持一致

  • 也可以配置 properties 类型的配置文件,方式不同

😁配置文件详解

配置文件的顺序

配置文件的一些标签可以不写, 但顺序一定不能乱

properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers

🤣MyBatis的增删改查(直接写入参数)


    insert into user values (null,'大白','12345')


    delete from user where id=1


    select * from user where id=10


    select * from user


    updata user set name='张三' where id=5

  • select标签必须设置属性resultType或者resultMap,用于设置实体类和数据库表的映射关系
  • resultType: 自动映射,用于属性名与表中字段一致的情况
  • resultMap: 自定义映射,用于一对多或多对一或属性名与表中字段不一致的情况
  • 当查询的数据为多条的时候,不能使用实体类作为返回值,只能使用集合,否则抛出异常TooManyResultsException

😊MyBatis获取参数的两种方式

  • 本质是预编译处理
  • MyBatis在处理#{}的时候,会把#{}替换为?,调用PerparedStatement的set方法来赋值
  • 使用#{}可以有效防止SQL注入,SQL注入是发生在编译阶段,而预编译是提前对SQL语句进行编译,而后注入的参数将不再进行编译,预编译完成之后,SQL结构已经固定,如此可以有效防止SQL注入
  • 自动添加单引号

  • 本质是字符串替换

  • 把${}替换成变量的值
  • 若为字符串或日期类型的字段进行赋值时,需手动添加单引号

🧐参数类型

若mapper接口中方法的参数是单个参数,可以使用#{}或${}以任意参数名名称获取


    delete from user where id=#{userId}

  • 若mapper接口中方法的参数是多个参数,MyBatis会自动的将这些参数放入map集合中
  • 以arg0,arg1,…为键,以参数为值
  • 以param1,param2,…为键,以参数为值
  • 以#{}或${}访问map集合中的键,就可以拿到值
  • arg是以arg0开始,param以param1开始

    update user set name = #{arg0} where id=#{arg1}

若mapper接口的方法参数为多个时,可以手动创建一个map集合,将参数放入map集合中,使用#{}或${}访问map集合对应的键就可以拿到相应的值


    insert into user values (null,#{name},#{password})

若mapper接口方法参数为实体类型时,使用#{}或${}访问实体对象的属性名拿到属性值


    insert into user values (null,#{name},#{password})

  • 可以通过@Param注解标识mapper接口中的方法参数,会将这些参数放入map集合中
  • 以@Param注解的value属性值为键,以参数为值
  • 以param1,param2,…为键,以参数为值
  • 只需通过#{}或${}访问集合中的键,将能拿到相应的参数值

    select * from user where name=#{name} and password=#{password}

😝MyBatis的查询功能


    select * from user where id=#{userId}


    select * from user

注意将resultType设置为map


    select *from user where id=#{userId}

  • 方法一

    select *from user

  • 方法二 使用@MapKey

    select *from user

Original: https://www.cnblogs.com/suwuji/p/16556930.html
Author: 苏无及
Title: MyBatis详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611840/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何使用原生的Hystrix

    什么是Hystrix 前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库–Hystrix。 从抽象层面看, Hystri…

    数据库 2023年6月6日
    092
  • Shell第一章《变量》

    什么是shell shell-‘壳’ 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程…

    数据库 2023年6月14日
    076
  • 看看 Singleflight

    在看前辈的代码时,发现了一个缓存放穿透的处理,好奇就点进去看了,发现代码意外的少,于是就研究起来,为数不多我能看明白的源码T-T 源码地址:https://cs.opensourc…

    数据库 2023年6月9日
    0106
  • 慢查询SQL排查

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c56bd0c5.html 你好,我是测试蔡坨坨。 在往期文章中,我们聊过数据库基础知识,可参考「数据库…

    数据库 2023年5月24日
    083
  • AJAX(Web数据交互方式)

    使用 Ajax 技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。 AJAX 一. 什么是 AJAX? AJAX …

    数据库 2023年6月11日
    086
  • MySQL新建用户与授权

    test为用户名,1234为密码,%意思是任何一台主机都可以登录,如果只能本机登录则设置为localhost 说明:test为数据库的名称 说明:第一个test为数据库的名称,第二…

    数据库 2023年6月9日
    074
  • mysql绿色版在windows系统中的启动

    1、下载mysql免安装版 例如:mysql-5.7.11-winx64 2、修改配置文件,my-default.ini名称改为:my.ini,文件里面的参数配置: [mysqld…

    数据库 2023年6月11日
    066
  • MySQL行构造器

    子查询返回多列的办法 主要用途,项目中初版使用子查询返回一列用来限制主表,项目新版本中,表关联建改为多列时建议使用 Original: https://www.cnblogs.co…

    数据库 2023年6月9日
    069
  • 网络爬虫_Scrapy框架入门

    什么是Scrapy? (百度百科) Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛…

    数据库 2023年6月11日
    089
  • 开源、强大的Linux服务器集群管理工具,比宝塔好用!

    在这之前肯定很多人都接触过Linux管理面板:宝塔,宝塔的确非常方便而且好用,安装也简单,复制粘贴几句命令即可安装完成,且提供免费版。今天呢,民工哥向大家介绍另一个Linux的服务…

    数据库 2023年6月9日
    0150
  • 如何把 MySQL 备份验证性能提升 10 倍

    JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档。最近有个客户在测试时反馈,备份验证的数据准备( xtrabackup –prepare)过程非常…

    数据库 2023年5月24日
    064
  • Read View的可见性判断理解

    读了 @SnailMann大佬【MySQL笔记】正确的理解MySQL的MVCC及实现原理 收益颇丰,非常感谢! 但对其中如何判断事务是否可见性还是不太理解,于是作了本文,在原博客基…

    数据库 2023年6月16日
    068
  • Zookeeper应用场景汇总(超详细)

    Zookeeper典型应用场景汇总 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中…

    数据库 2023年6月11日
    077
  • 如何本地navicat连接虚拟机安装的linux 的mysql

    2022.3.20 如何本地连接虚拟机安装的linux 的mysql 1防火墙开启开启 1.1、开启端口3306 1.2、重启防火墙 1.3查看已经开放的端口: 如果mysql 密…

    数据库 2023年5月24日
    067
  • Java架构师电商项目(220h):1-1 整体架构概述

    2022 Flag:学完这门 220h Java架构师电商项目视频课学习笔记将持续更新…… ; 大型网站特点 高并发 高可用 大数据 迭代周期短 用户量庞大…

    数据库 2023年6月6日
    078
  • 【SQL实战】期末考试,如何统计学生成绩

    年关将至,这两天所有小学都进入了期末考试阶段。在考试结束时,有必要清点学生的分数。有趣的是,学校提供的成绩单现在并不直接标明分数,而是一个等级,如优秀、良好、合格、不及格。至少北京…

    数据库 2023年5月24日
    0155
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球