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)

大家都在看

  • CentOS 7 RabbitMQ集群部署

    基于的RabbitMQ版本:3.8.5 Status of node rabbit@node236 … Runtime OS PID: 13975 OS: Linux Upti…

    数据库 2023年6月9日
    0101
  • jenkins

    jenkins 1.简介 1.1 SVN介绍 1.2 Maven介绍 1.3 Ant介绍 1.4 Gradle介绍 1.5 jenkins工作原理 1.6 jenkins特点 2….

    数据库 2023年6月14日
    063
  • python 2分法查找实例

    直接上代码(内含注释) 直接上代码(内含注释) 1 find_list = [2, 5, 7, 8, 12, 23, 27, 31, 33, 42, 44, 45, 47, 50]…

    数据库 2023年6月11日
    068
  • MySQL常用语句

    数据库设置 查看设置 `sql Original: https://www.cnblogs.com/1fengchen1/p/15781973.htmlAuthor: SonnyZ…

    数据库 2023年6月9日
    075
  • mysql安装及主从复制配置

    一、安装 mysql8.0 下载mysql 安装包http://mirrors.sohu.com/mysql/MySQL-8.0/ wget http://mirrors.sohu…

    数据库 2023年5月24日
    068
  • Java中AES加密和解密的方法分享

    转自: http://www.java265.com/JavaJingYan/202206/16559759223818.html 下文笔者讲述java代码实现的AES加密和解密的…

    数据库 2023年6月11日
    097
  • Linux–>组管理和权限管理

    在Linux中的每一个用户必须属于一个组,不能独立于组外。 在Linux中每个文件有, 所有者, 所在组, 其他组的概念 查看文件的所有者 ls -ahl 举例: 改变文件所有者 …

    数据库 2023年6月14日
    0141
  • Java中的SPI原理浅谈

    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的&…

    数据库 2023年6月14日
    073
  • leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

    给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root = [2,1,3]输出: 1 示例 2…

    数据库 2023年6月16日
    088
  • vue项目发布到docker nginx的方法总结

    我总结了以下两种方法可用 一、通过制作镜像,使用镜像生成docker 这个是比较常用的方法,制作镜像(images)后,如果还要生成docker可以直接使用镜像比较方便以下是操作步…

    数据库 2023年6月9日
    098
  • MySQL学习(4)—MySQL索引

    ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引。其中聚集索引、复合索引、前缀索引、唯一索引默认都是使用B+树,…

    数据库 2023年6月14日
    084
  • 文件传输工具:FileZilla的使用

    FileZilla FileZilla 是一款高效的 FTP 客户端工具。FileZilla 可以帮助您将本地计算机上的文件上传到虚拟主机实例中。 FileZilla 界面介绍 如…

    数据库 2023年6月11日
    095
  • 商企网络拓扑的搭建

    前段时间因为工作项目需要模拟搭建客户环境的网络拓扑结构用于验证某款网关产品的功能, 因为不是专业的网管,对于计算机网络的实践也相对较少,所以在组件网络拓扑时遇到了不少的坑,做下记录…

    数据库 2023年6月6日
    0109
  • 记一次有意思的业务实现 → 单向关注是关注,双向关注则成好友

    开心一刻 有一个问题一直困扰着我:许仙选择了救蛇,但为什么杨果选择了救鹰(而不是救蛇)。 [En] A question has been bothering me: Xu Xia…

    数据库 2023年5月24日
    0116
  • SFML学习之配置环境(VS2019)

    vs2019 SFML环境配置 主要就是两个地址和一个链接的设置 一切的源头都在官网:SFML官网:https://www.sfml-dev.org/download.php 下载…

    数据库 2023年6月11日
    077
  • 部署tomcat

    tomcat tomcat 一、tomcat是什么 二、tomcat部署 1.实现访问java测试网页 2.能够成功登录到tomcat首页中的host manager、server…

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