SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis

news/2024/5/16 11:38:20/文章来源:https://blog.csdn.net/blbyu/article/details/127996220

SpringBoot整合Mybatis

  • 简介
  • SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis
    • 1.先用idea创建一个添加mybatis需要的相关依赖的工程。
    • 2.准备数据库和表
    • 3.创建表映射类
    • 4.创建mapper代理接口
    • 5.创建Service层和Service的实现层
    • 6.创建控制层(也就是web层)
    • 7.添加配置信息
      • 7.1添加数据库链接信息和设置mybatis中的别名信息
      • 7.2在应用程序入口类上配置@MapperScan扫描mapper接口文件所在包!
    • 8.运行
  • 扩展1(增删改查)
  • 扩展2(注解方式一对一 @One)
    • 补充1:xml的方式组装映射字段与数据库字段
    • 补充2:javaType与ofType的区别
  • 扩展3(注解方式一对多查询 @Many)

简介

在 Spring+SpringMVC 中整合 MyBatis 步骤需要在配置文件里配置多个 Bean,比如MapperScannerConfigurer,SqlSessionFactoryBean 等,步骤还是比较复杂的,Spring Boot 中对此做了进一步的简化,使 MyBatis 基本上可以做到开箱即用,也就是搭建SSM环境 。
Spring Boot中整合mybatis,主要有两种方式:①xml文件;②注解方式

SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis

方式2和方式1相比,主要是mapper文件的区别,所以除了第4和第7步有点不一样以外,其它步骤相同。

1.先用idea创建一个添加mybatis需要的相关依赖的工程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建出来的项目结构如下:
在这里插入图片描述

2.准备数据库和表

在这里插入图片描述

3.创建表映射类

之前创建表映射类时,我们是手动添加set,get,toString方法和构造方法等,比如像这样
在这里插入图片描述
现在,我们可以添加一个Lombok 依赖来简化这些代码
在这里插入图片描述
添加需要的注解,通过注解来实现自动帮我们加入get,set,构造方法等。

4.创建mapper代理接口

注意:不需要创建UsersMapper.xml文件,只需要创建UsersMapper接口就可以,将之前xml文件中的sql语句通过注解的方式写到接口中。
在这里插入图片描述

5.创建Service层和Service的实现层

在这里插入图片描述
在这里插入图片描述

6.创建控制层(也就是web层)

在这里插入图片描述

7.添加配置信息

7.1添加数据库链接信息和设置mybatis中的别名信息

数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.url=jdbc:mysql://localhost:3306/boot?characterEncoding=utf8&serverTimezone=GMT%2B8mybatis配置
mybatis.type-aliases-package=com.test.ssm.pojo ```

7.2在应用程序入口类上配置@MapperScan扫描mapper接口文件所在包!

在这里插入图片描述

8.运行

在这里插入图片描述
在这里插入图片描述

扩展1(增删改查)

(可以删去UserMapper.xml)
在这里插入图片描述
在这里插入图片描述

扩展2(注解方式一对一 @One)

一个人拥有一张金卡或银卡
表一:id uname pwd card_id
表二:id category(1 金卡、2 银卡)
表一的card_id与表二的id对应,card定义为对象 (private Card card)

当我们创建的表映射类中的映射字段与数据库中的字段不一致时(如映射字段为uname,数据库字段为u_name),需要我们自己组装。(xml方式中通过resultMap,注解方式中通过@Result)
如果不进行组装,那么进行反射的时候,无法通过u_name找到对应的名字。

@Result({@Result(property = "id",column = "id " , id = true),@Result(property = "uname",column = "u_name " ),   // 可以使用javaType=""后可以转换一下数据类型@Result(property = "pwd",column = "pwd " )@Result(property = "card",column = "card_id " ,one=@one(select=com.tst.ssm.mapper.CardMapper.selectCardById))
})

UserMapper.java
在这里插入图片描述
在这里插入图片描述
CardMapper.java
在这里插入图片描述
视图层(user.card.category )
在这里插入图片描述

补充1:xml的方式组装映射字段与数据库字段

// association表示单个对象(一对一、多对一)
// association中属性一定要设置javaType,用来指定对象类型
<resultMap type="Userinfo" id="userinfoMap"><id property="uid" column="uid"><result property="uname" column="u_name"><result property="pwd" column="pwd">// 代表一个学生有一个班级<association property="Grade" javaType="Grade"><id property="cid" column="cid" /><result property="cname" column="cname" /></association>
</resultMap>// collection表示集合(一对多)
<resultMap type="Grade" id="gradeMap"><id property="uid" column="uid"><result property="uname" column="u_name"><result property="pwd" column="pwd"><collection property="userlist" ofType="Userinfo"><id property="cid" column="cid" /><result property="cname" column="cname" /><result property="cage" column="cage" /></collection>
</resultMap>

补充2:javaType与ofType的区别

共同点:JavaType和ofType都是用来指定对象类型的。
不同点:JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。
javaType是< association >(一对一/多对一)中的属性,用于指定从表方的引用实体类。
ofType 是< collection > (用于建立一对多中集合属性的对应关系)的属性,用于指定集合元素的数据类型。

扩展3(注解方式一对多查询 @Many)

一个用户对应多个地址
表一:id uname pwd card_id addressList
表二:id detail(1 肥东、2 肥西、3 长丰、4 瑶海) userid(1 1 1 2)
表一的id与表二的userid对应,addressList定义为集合 (private List

addressList;)

User.class(地址不止一个,使用集合)
在这里插入图片描述
AddressMap.java
在这里插入图片描述
UsersMapper.java
在这里插入图片描述
在这里插入图片描述
视图层
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_36939.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五种方法帮你解决电脑内存占用大的问题

有用户反映自己的电脑什么都没开&#xff0c;但是运行内存显示占用90%以上&#xff0c;这是什么情况&#xff1f;运行内存占用大&#xff0c;直接影响了用户的使用体验&#xff0c;下面小编就给大家分享五个解决电脑内存占用大的办法吧。 方法一&#xff1a; 1、右键【我的电脑…

Spring Boot Admin2 自定义异常监控

其他相关文章&#xff1a; Spring Boot Admin 参考指南SpringBoot Admin服务离线、不显示健康信息的问题Spring Boot Admin2 EnableAdminServer的加载Spring Boot Admin2 AdminServerAutoConfiguration详解Spring Boot Admin2 实例状态监控详解Spring Boot Admin2 自定义JVM监控…

GEO振弦式钢筋计的组装

&#xff08;1&#xff09;按钢筋直径选配相应的钢筋计&#xff0c;如果规格不符合&#xff0c;应选择尽量接近于结构钢筋直径 的钢筋计&#xff0c;例如&#xff1a;钢筋直径为 35mm&#xff0c;可使用 NZR-36 或 NZR-32 的钢筋计&#xff0c;此时仪器的最小 读数应进行修…

MapReduce

4.1 MapReduce概述 2003年和2004年&#xff0c;Google公司在国际会议上分别发表了两篇关于Google分布式文件系统和MapReduce的论文&#xff0c;公布了Google的GFS和MapReduce的基本原理和主要设计思想。 4.1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架&#…

【无百度智能云与实体经济“双向奔赴”: 一场1+1>2的双赢 标题】

实体经济&#xff0c;已经成为检验科技企业潜力的试金石。 在最近的财报季中&#xff0c;各家大厂的财报里“实体经济”都是关键字眼&#xff0c;已经成为各家心照不宣的共同目的地。 当然&#xff0c;条条大路通罗马。每一家的战略思路和打法都不一样。11月22日&#xff0c;…

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸 PEG接枝修饰麦芽糖&#xff0c;麦芽糖-聚乙二醇-四氮杂环十二烷四乙酸&#xff0c;DOTA-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-四氮杂环十二烷四乙酸 英文名称&#xff1a;maltose-DOTA 别称&#xff1a;DOTA修…

HCIA 访问控制列表ACL

一、前言 ACL又称访问控制列表&#xff0c;其实这个东西在很多地方都有用&#xff0c;可能名字不太一样但原理和功能都差不太多&#xff0c;比如服务器、防火墙&#xff0c;都有类似的东西&#xff0c;功能其实也就是“过滤”掉不想收到的数据包。为什么不想收到一些数据包呢&…

The Seven Tools of Causal Inference with Reflections on Machine Learning 文章解读

目录 THE THREE LAYER CAUSAL HIERARCHY. 4 THE SEVEN TOOLS OF CAUSAL INFERENCE (OR WHAT YOU CAN DO WITH A CAUSAL MODEL THAT YOU COULD NOT DO WITHOUT?) 7 Tool 1: Encoding Causal Assumptions – Transparency and Testability. 10 Tool 2: Do-calculus and the …

深入浅出基于HLS流媒体协议视频加密的解决方案

一套简单的基于HLS流媒体协议&#xff0c;使用video.js NodeJS FFmpeg等相关技术实现的m3u8tsaes128视频加密及播放的解决方案示例。 项目简介 起初是为了将工作中已有的基于Flash的视频播放器替换为不依赖Flash的HTML5视频播放器&#xff0c;主要使用了现有的video.js开源播…

【学习笔记25】JavaScript字符串的基本认识

JavaScript字符串的基本认识一、严格模式二、字符串1、字面量2、构造函数3、包装类型三、字符集&#xff08;了解&#xff09;1、ASCII&#xff1a;128个2、GBK国标码&#xff1a;前128位ASCII&#xff0c;从129开始为汉字3、unicode(万国码)四、字符串的length与下标一、严格模…

学弟:功能测试转测试开发容易吗?

最近看到后台留言问&#xff1a;功能测试转测试开发容易吗&#xff1f; 从这个问题&#xff0c;我能读出一些信息如下&#xff1a; 不知道你从事测试工作多久了&#xff0c;可以看出您特别羡慕测试开发工程师&#xff1b;你可能一直从事功能测试工作&#xff0c;工作模式或大…

排名预测系统

排名预测系统 题目链接 题目背景&#xff1a; 本题大模拟来自真实的需求&#xff0c;即&#xff1a;综合三场网络赛的名次&#xff0c;来预计一个正式队伍在所有正式参赛队伍中的名次以此来估计自己能不能拿牌。本来只有一道题&#xff0c;即为你们看到的T5&#xff0c;经过…

HTTP响应详解

目录 一.状态码 小结&#xff08;记住&#xff09; 二.认识响应正文&#xff08;body&#xff09; 三.如何构造http请求 一.状态码 是一个数字&#xff0c;这个数字描述了当前这次请求的状态&#xff08;成功&#xff0c;失败&#xff0c;失败的原因&#xff09; http的状态…

logcat日志文件分析

3:显示时间戳日志 adb logcat -v time > d:\文件\log.txt 日志文件分析 输出的日志格式由5部分组成 1:写下日志的时间 2:优先级&#xff0c;日志优先级从低到高分以下几种 v -verbose 最低级别&#xff0c;开发调试中的一些详细信息&#xff0c;仅在开发中使用&#…

以分割栅格为例实现FME模板的方案优化

一、利用FME分割栅格 &#xff08;一&#xff09;问题的产生 对于FME使用者来说&#xff0c;利用FME完成栅格的批量分割是一件极为平常且容易的事情。只需要输入栅格和确定分割方案就可以实现利用FME对栅格数据的分割&#xff0c;再配合FME的“扇出”功能&#xff0c;就能够实…

【colab安装mmcv-full和mmclassification】

colab安装mmcv-full和mmclassification改变cuda和pytorch版本查看torch版本安装mmcv-full安装mmclassification克隆并安装mmcls切换到目录源码安装检查mmcls版本改变cuda和pytorch版本 !pip --default-timeout1000 install torch1.9.0cu111 -f https://download.pytorch.org/w…

常用辅助类

CountDownLatch 应用场景&#xff1a;1.多线程任务汇总。2.多线程任务阻塞住&#xff0c;等待发令枪响&#xff0c;一起执行。 减法计数器 每次有线程调用&#xff0c;数量-1&#xff0c;当计数器归零&#xff0c;countDownLatch.await()就会被唤醒向下执行。 import java.uti…

c语言tips-带参main函数

0.写在最前 最近因为工作需要开始重新学c语言&#xff0c;越学越发现c语言深不可测&#xff0c;当初用python轻轻松松处理的一些数据&#xff0c;但是c语言写起来却异常的复杂&#xff0c;这个板块就记录一下我的c语言复习之路 1. main函数的两种表现形式 main函数是c/cpp语言的…

Docker学习(5)—— 在Docker上安装软件

一. 安装Tomcat 1. 下载最新版 (1) 拉取Tomcat镜像 docker pull tomcat (2) 查看是否拉取到Tomcat镜像 docker images tomcat (3) 创建Tomcat容器并启动 docker run -d -p 8080:8080 tomcat 这时访问tomcat首页报404错误&#xff0c;有以下两个原因&#xff1a;①防火…

XSS绕过安全狗WAF

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XSS绕过安全狗WAF。 一、测试环境搭建 我们使用Vmware虚拟机搭建靶场环境。在Vmware虚拟机上&#xff0c;安装有PHPStudy&#xff0c;如下所示&#xff1a; 然后安装安全狗WAF&#xff0c;安全狗WAF有一系列的…