• Spring之Mybatis


    目录

    Mybatis的原理简易实现

    为什么选用Mybatis 

    注解形式

     关联SQL和参数化SQL

     方法的返回值(查询的)

    ​XML形式

    文件配置(用来找xml文件的位置)

    XML形式下的两种结果映射

    插入操作

     修改操作

    删除操作


    Mybatis的原理简易实现

    需要那些依赖

    需要的配置文件的内容 

    配置好对应的数据url,数据库用户名,数据库密码,Mybatis自动帮我们连接 

    使用示范 

    • 将我们数据库的一行数据封装为一个对象 

    为什么选用Mybatis 

    Mybatis围绕数据库读写的解决方案,解决问题:每次从头写JDBC都太麻烦了

    • 动态拼接SQL
    • ORM,程序员直接把表映射当成类,把表中的记录映射成一个对象,表的结构简单,关系不复杂,使用ORM更方便
    • Mybatis偏向ORM,@Mapper接口(映射器),但是对动态的SQL支持还不错,主要还是因为Mybatis的市场占有率比较高

     Mybatis的基本原理

    • 其基本原理还是对象代理那套
    • 我们作为mybatis的用户需要提供一些信息

    1接口:接口中写明了各种各样的方法

    2需要告诉mybatis接口的这些方法

    • 需要执行的是哪条SQL(关联SQL)
    • 参数化的SQL,如何匹配方法中的参数和SQL里面的参数(参数匹配)
    • 查询出来的表记录结果,如何和方法的返回值(一般对象)引进映射(结果映射)

    3Mybatis根据我们准备的接口+相关的这些准备工作,提供好一个对象的代理,来完成JDBC的整套流程(支持注解或者XML)

    注解形式

     关联SQL和参数化SQL

     方法的返回值(查询的)

    • 返回一条记录:User这种,对象其实就是一个有约束的Map ,类似于Map
    • 返回一批记录:List/Set,就类似于List>,Set<....>

     XML形式

    文件配置(用来找xml文件的位置)

     XML文件的配置

    对应代理类的样式

     代理对象的调用

    XML形式下的两种结果映射

    • 在我们上面的例子对象的属性名和我们的数据库中字段名是一样的,所以不需要做结果映射,但是对应不上的时候,就需要我们自己来处理 
    • 让SQL语句去靠近对面的命名,也就是完全给SQL的字段起别名
    • 给mybatis一个映射关系,让mybatis帮我们进行映射
    • 注解也可以进行映射,但是比较麻烦,这里先不学

     方法返回值跟使用注解差不多(就是一个使用注解实现,一个使用XML文件配置实现)

    • 在配置文件中,告诉mybatis,咱的XML路径所在
    • 准备好了XML文件,并且和@Mapper接口建立关系
    •  为接口的每个方法建立 1进行相关方法的绑定和返回类型的确定2要执行的SQL ,参数化SQL(或者关联SQL) 3返回结果映射

    直接使用注解的方式,更方便,但是做一些复杂的需求的时候不是很方便,使用XML的方式,做需求的相对跟合适(ResultMap,动态SQL),两者可以配合使用

    插入操作

    XML形式

    • 首先还是配置Spring的配置文件,能让Spring扫描到这个xml文件
    • XML文件,让我们的XML文件和对应执行sql的代理类连接起来,然后为对应的方法配置SQL语句和相关设置
    • 我们这里新用了一个@Component的注解,表示Spring在运行的时候能够启动这个类的run方法 

    注解形式

     修改操作

    •  明确Param的作用,和没有Param修饰的时候,为什么又可以对应

    删除操作

    • 也可以用User对象自动去对应,这里就不掩饰了,跟前面的操作是一样的

    动态SQL 

    实现批量插入

     我们想将userList的数据都插入到数据库,怎么做到呢?

    回忆一下纯SQL是如何一次插入多条数据,怎么写?

    insert into 表名(属性....) values(属性值...),(属性值...),(属性值...),这里到底有多少个(...),我们是不知道的,这里依赖的就是userList.size,一定是在运行阶段把SQL写完成,所以我们需要动态SQL

    批量删除操作

     批量查询

     

  • 相关阅读:
    WPF —— ToolBar、Checkbox控价详解
    LeetCode / Scala - 无重复字符最长子串 ,最长回文子串
    JavaScript双for循环,判断对象数组的阈值重合。
    Java 转换 WebP 图片,使用 webp-imageio
    用u盘装系统教程操作图解
    【英语:基础进阶_核心词汇扩充】E5.常见词根拓词
    Delaunay三角网之逐点插入法(优化版本二)
    Linux(05) Debian 系统修改主机名
    【数据加密、解密】前后端数据传输的过程中,如何进行数据加密传输,保证数据的传输安全,防止被他人窃取
    扩展包的安装
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/126573170