springboot mybatis如何打印出查询语句_SpringBoot学习笔记之整合Mybatis

v2-31c6f3d48b49c0834b3cdd8f133c91cb_1440w.jpg?source=172ae18b

编者按

在前一篇文章中,主要记录了学习Spring框架的过程,通过实践让自己对基于SpringBoot的项目实现有了粗浅的认识。在本文进一步学习了SpringBoot后端部分的知识点中关于整合Mybatis的部分。欢迎指正。


(一)Mybatis的概念

百度百科中给出了Mybatis官网中的定义,说明了它是一个持久层框架,可以用过xml文件进行配置,并且支持很多高级映射。而Mybatis又是直接基于Java数据库连接(Java Database Connectivity,JDBC),因此简单的理解Mybatis就是一个集成度更高的、能够实现数据库与Java项目连接的工具。

(二)Mybatis整体框架[1]

注释链接中是一篇非常详尽的Mybatis使用教程,从jdbc开始讲起,到SpringBoot框架整合,流程具体细节明确,跟着教程就可以很顺利地使用上Mybatis进行数据库操作。我从中截取了其标注的Mybatis整体框架图,留作自己的学习笔记。

v2-6ff0be80629212994c25494bf8e764f2_b.jpg
Mybatis整体框架图

(三)SpringBoot框架整合Mybatis

上一篇文章没有描述SpringBoot项目的实践步骤,本文中选择要点简单展开。

1.新建SpringBoot项目

方法①:在IDEA中选择Spring Initializr自带的模板创建SpringBoot框架。
方法②:在Spring官网http://start.spring.io中创建下载项目。

本文了使用方法②。选择添加所需的依赖包,Lombok用于Java项目中添加注解,Web包含前端的配置,MyBatis和MySQL驱动属于数据库部分的依赖。

v2-9eb61fa288c0690d1d36c14d5d981615_b.jpg
添加SpringBoot框架依赖包

2.构建测试用表格

在终端或其他地方建立项目所需的数据库及表格,用于后续连接。

# 

3.构建项目目录

v2-0bdafa365d7560d87a3a64d0d4556867_b.jpg
项目目录结构
  • java/package/entity:实体类, 对应数据库表格内容
  • java/package/mapper:映射
  • java/package/service:接口层
  • java/package/impl:service接口实现
  • java/package/controller:业务访问
  • resources/mapper:用于存放xml文件
  • resources/application.yaml:用于配置SpringBoot

4.配置文件application.yaml

# 配置端口

5.构建实体类User.java

@Data

实体类中定义的变量要与表格中列项对应。而在之后使用<resultMap>元素后可允许变量名与表内列名不一致。

6.构建接口层Mapper.java

@Mapper

要与Mapper.xml文件对应。为简化代码,后续仅以增删改查中的查询功能为例。

7.构建服务层接口及其实现Service.java & ServiceImpl.java

Service.java

public 

ServiceImpl.java

@Service

将Service与impl分离是为了实现代码的解耦,减少代码量极大的项目调试过程中可能出现的修改负担。

8.构建业务访问层Controller

@RestController

9.项目构建完毕

至此,启动测试!

(四)Mybatis配置文件

使用Mybatis与数据库连接,主要通过mapper.xml文件进行配置。

<mapper 

1.<resultType>

配置文件中可以直接指定SQL指令中的入参和出参类型,在函数接口中设置parameterType和resultType类型,同时需要保证数据库表字段名与实体类中的变量名一致,则可以直接进行SQL操作,否则无法简历连接。

该方法可以看做直接调用函数,设定对应的输入输出。这种方法使用时非常直接,但需要对所有指令一一设定参数类型,当有大量SQL命令或字段操作时会变得非常繁琐复杂。因此出现了<resultMap>方法。

2.<resultMap>

可以将<resultMap> 看作xml文件的一个全局变量,在配置开始时就将实体类中的变量与数据表字段建立了映射关系。在进行SQL操作时,只需要直接指定语句中具体的操作对象,返回结构统一用<resultMap>代替<resultType>即可。

<resultMap 

<resultMap>标签中的type指定了映射实体类的路径,id可以看做了resultMap的变量名称。

  • <resultMap>之<id><result>

<id>标签表示该变量对应数据表中的主键,<result>标签表示其他表字段。

表字段标签中的property是实体类中的变量名,column是数据库表格中的列名。然后通过jdbcType指定数据库表字段的类型,javaType指定实体类中的数据类型,通过这个步骤将两者变量进行映射连接。

<resultMap>将它查询到的column数据库的值,装到了property内。因此只要<resultMap>中property和column对应,实体类变量名与表中字段名是否一致就不需要关心了,通过这种方法可以避免因命名不同导致的错误。

v2-bb7dd2aff3a74a63f38dcdcf7c8a4f79_b.jpg
id/result标签-语句属性配置细节
  • <resultMap>之<collection>

用来实现JavaBean类型复合的多表查询(嵌套结构)。在构建实体类的时候,包含了其他JavaBean类型变量,在进行多表联合查询的时候,将表字段映射到对应JavaBean中,从而实现多表联合查询。

在进行多表联合查询的时候,如果该查询结果使用频率较高,也可以为其设置独立的实体,并配置mapper.xml文件。将这个查询看做新的对象进行操作,这样与使用<association>等标签设置<resultMap>相比,会是代码模块更有区分度,看起来更加整洁清爽。

以下内容可能在实际应用过程中使用频率较少,所以在学习过程中略过,如有需求可去相关教程中学习。 <resultMap>之<constructor>
构造器可以代替<id><result>的位置,两者作用相同但实现过程有所区别。
<id><result>通过映射使得实体获得数据库表字段内容;<constructor>将获得的表字段内容作为入参传到实体中,使得其变量得到内容。 <resultMap>之<association><discriminator>
可以通过<collection>或设置独立实体实现。
(略)

参考

  1. ^Mybatis教程详解 https://blog.csdn.net/hellozpc/article/details/80878563
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值