当前位置: 首页 > news >正文

零基础学习【Mybatis】这一篇就够了

Mybatis

  • 查询
    • resultType使用
    • resultMap使用
    • 单条件查询
    • 多条件查询
    • 模糊查询
    • 返回主键
  • 动态SQL
    • if
    • choose
    • set
    • foreach
    • sql片段
  • 配置文件
  • 注解
    • 增删改查
    • 结果映射

查询

resultType使用

当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中

在这里插入图片描述

resultMap使用

当数据库返回的结果集中的字段和实体类中的属性名存在不对应情况时,可以使用 resultMap 自定义映射关系

在这里插入图片描述

面试题: resultType和resultMap使用区别

单条件查询

在这里插入图片描述

多条件查询

在这里插入图片描述

模糊查询

在这里插入图片描述

面试题:#和$的区别

  • #表示占位符, 相当于JDBC中的?, 底层工作的是PreparedStetement对象, SQL只编译一次, 而且没有SQL注入问题
  • $ 表示字符串拼接, 底层工作的是Statement对象, 每次SQL都会重新编译, 而且存在SQL注入问题

返回主键

向数据库保存一个用户后, 然后在控制台记录下此用户的主键值(id)

在这里插入图片描述

动态SQL

在Mybatis中,动态SQL是通过下面几个标签来实现的:

  • if,choose 用于条件判断
  • where,set 用于格式控制
  • foreach 用于循环遍历

if

在这里插入图片描述

  • if标签用于单分支条件判断, 相当于java中的if关键字
  • where标签作用:
    1. 当where代码块中的条件都不成立的时候, where代码块不生效
    2. 当where代码块中的条件至少有一个成立的时候
      在代码块之前加入一个where关键字
      当代码块以and | or开头的时候,它会帮你去掉第一个and | or

在这里插入图片描述

choose

在这里插入图片描述

  • choose 用于包含多个条件
  • when 用于编写某个条件
  • otherwise所有的when都判断失败时,进入此分支

在这里插入图片描述

set

  • set标签的作用:
    1. 在代码块之前加入一个set关键字
    2. 删除掉代码块中的最后一个,
    3. set代码块中至少要有一个条件是成立

在这里插入图片描述

foreach

  • foreach 循环遍历
    collection=“collection” 指定要遍历的集合或者数组
    item=“item” 指定临时变量
    separator=“,” 指定分隔符
    open=“(” 指定开始字符
    close=“)” 指定结束字符

  • collection会根据传入参数的类型不同而采用不同的值
    集合—collection
    数组—array
    实体—实体的属性

在这里插入图片描述

sql片段

sql片段的作用是将代码中重复的sql,提取出来达到复用的目的

  • 定义SQL片段: <sql id="selectUser"></sql>
  • 引用SQL片段: <include refid="selectUser"></include>

在这里插入图片描述

配置文件

  • sqlMapConfig.xml 此文件中的标签有严格的顺序要求, 可以省略一部分, 但是不能乱序
  • 主要选项
    properties: 引入外部的properties文件
    typeAlias: 给映射文件中实体类起别名
    environments: 用于配置数据库连接信息和事务管理器
    mappers: 用于引入映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--引入一个properties的配置文件--><properties resource="jdbc.properties" /><!--别名: 应用在映射文件中--><typeAliases><!--type 指定原始类型  alias 指定别名--><!--<typeAlias type="com.itheima.domain.User" alias="user" />--><!--指定一个包名: 只要是在这个包之下的类,都会自动产生一个别名, 规则就是类名首字母消息--><package name="com.itheima.domain"/></typeAliases><!--环境: environments  可以配置多个数据库配置default 用于指定使用哪个环境--><environments default="development"><!--配置开发环境--><environment id="development"><!--事务管理器--><transactionManager type="JDBC"/><!--数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment><!--配置测试环境--><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="测试驱动"/><property name="url" value="测试数据库连接"/><property name="username" value="测试用户名"/><property name="password" value="测试密码"/></dataSource></environment></environments><!--导入sql映射文件--><mappers><!--方式1: 直接导入映射文件(了解)--><!--<mapper resource="mappers/UserMapper.xml"/>--><!--方式2: 写接口路径--><!--<mapper class="com.itheima.mapper.UserMapper" />--><!--方式3: 直接写mapper接口所在的包(保证最后Mapper接口和Mapper.xml会编译到同一个目录下,并且名字一致)--><package name="com.itheima.mapper"/></mappers></configuration>

在这里插入图片描述

注解

使用注解书写SQL其实是对使用XML书写SQL的一种替代方式,其功能基本一致。

两种方式各有优缺点, 没有谁好谁坏之分, 具体看公司选择

在一个项目中是允许xml和注解混用的,但是对于同一个方法来讲,只能使用一种形式

非动态sql,使用注解简单写 但是对于动态sql,xml就相对简单了

增删改查

在这里插入图片描述

结果映射

在这里插入图片描述

http://www.lryc.cn/news/412002.html

相关文章:

  • Shell入门(保姆级教学)
  • 【JDK11和JDK8并行与切换】
  • vue大数据量列表渲染性能优化:虚拟滚动原理
  • 昇思25天学习打卡营第1天|快速入门
  • LinkedList 实现 LRU 缓存
  • ubuntu安装workon
  • (面试必看!)锁策略
  • RAGflow:开源AI框架的创新与应用
  • AI的学习明确路径
  • 【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
  • mysql排查死锁的几个查询sql
  • 快速部署私有化大模型 毕昇(使用docker-compose方式)
  • B端:导航条就框架提供的默认样式吗?非也,看过来。
  • idea的git与SVN切换
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 【常用库】【pytorch】基本部件
  • 深入Scrapy框架:掌握其工作流程
  • 从零开始学习机器学习,掌握AI未来的关键!
  • CI/CD(持续集成/持续部署)
  • 实现字母的大小写转换。多组输入输出(c语言)
  • 2024华为OD机试真题-最小矩阵宽度Python-C卷D卷-200分
  • 【Vue3】标签的 ref 属性
  • llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估
  • python安全脚本编写之流量泛洪
  • 一文看懂Java反射、注解、UML图和Lambda表达式
  • 【漏洞复现】搜狗输入法简单绕过Windows锁屏机制
  • JAVA Spring学习Day1
  • linux常见面试题(三)
  • 【JS】ES6新类型Map与Set
  • FETCH FIRST ROW ONLY和 DISTINCT ON和 LIMIT 1的用法