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

news2025/7/18 20:44:40

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%2B8

mybatis配置
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.coloradmin.cn/o/36156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JQuery使用

简介 一个JavaScript的框架&#xff0c;简化了JS的语法和操作&#xff0c;定义了HTML属性操作、样式操作、DOM 操作等相关函数&#xff0c;实现了对ajax异步请求封装。提供了很多预定义函数的JS文件。 作用 简化部分JavaScript开发 使用步骤 1,引入Jquery 下载 地址1:http:/…

D-0015 红外接收硬件电路设计

红外接收硬件电路设计1 简介2 硬件电路实战3 红外遥控的原理4 主要参数5 电路设计要点1 简介 肉眼可见的光&#xff0c;按照波长进行排列依次为&#xff1a;红、成、黄、绿、青、蓝、紫。其中红光的波长范围为0.620.76μm&#xff1b;紫光的波长范围为0.380.46μm。比紫光波长…

[iOS]代码混淆

混淆有几点注意&#xff1a; 不能混淆系统方法 不能混淆init开头的等初始化方法 混淆属性时需要额外注意set方法 如果xib、 storyboard中用到了混淆的内容&#xff0c;需要手动修正。 可以考虑把需要混淆的符号都加上前缀&#xff0c;跟系统自带的符号进行区分。 混淆有风险&am…

MMEdu离线版的使用:实现石头剪刀布图像分类的检测

一、MMEdu离线版的使用 1.双击XEdu v1.0.exe解压缩到某个盘&#xff0c;会是一个文件夹XEdu 2.进入XEdu&#xff0c;双击运行“点我初始化.bat”&#xff0c;等待至运行结束命令提示符窗口自动关闭 3.双击运行“jupyter编辑器.bat”&#xff0c;将会打开一个网页版jupyter&…

记一次由于google新版本限制升级导致的跨域问题

记一次跨域问题 问题描述 系统集成到公司下面的门户网站&#xff0c;由于二级域名还没有申请下来只能先配置了我们的K8S域名 http://wire-qa.motortest.com/#/Data/systemNavigationK8s域名 http://wire-test.k8s-pv.motor.com/sce_web/index.html前端识别到跳转的如下地址后…

微服务介绍2

1 搭建项目 1.1 父项目的搭建 1.2 子项目的搭建 2 项目展示 1 搭建项目 1.1 父项目的搭建 步骤&#xff1a; 1 选择maven项目作为父项目&#xff0c;修改为1.8之后直接点击next 2 定义父项目的名称&#xff0c;修改Artifct Coordinates ---> GroupId 然后点击finsh就可以啦…

K8S部署后的使用:dashboard启动、使用+docker镜像拉取、容器部署

1、重置和清除旧工程&#xff1a;每个节点主机都要运行 kubeadm reset iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 2、部署新的k8s项目&#xff1a; 只在主节点运行&#xff0c;apiserver-advertise-address填写主…

(附源码)计算机毕业设计JavaJava毕设项目美容院管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

HDC 2022 开发者主题演讲与技术分论坛干货分享(附课件)

11月4日-11月6日&#xff0c;HDC 2022在东莞成功举办&#xff0c;这是一场大规模落地的思维与技术的碰撞&#xff0c;众多业内专家到场&#xff0c;共话未来。其中&#xff0c;开发者主题演讲围绕增强的声明式开发体系&#xff0c;通过一个Demo实例讲解技术创新点&#xff0c;助…

LEADTOOLS 入门教程: 使用文件观察器转换文件 - C# .NET Core

LEADTOOLS 是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#…

PyQt5 QTableWidget

PyQt5 QTableWidgetQTableWidget 示例1QTableWidget 示例2QTableWidget 示例3QTableWidget 示例4QTableWidget 示例5QTableWidget 示例6QTableWidget 示例1 演示QTableWidget控件的基本使用方法 import sys from PyQt5.QtWidgets import (QWidget, QTableWidget, QTableWidge…

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 …

CentOS 7:dmPython安装及测试连接达梦数据库

python下载地址&#xff1a;Python Source Releases | Python.org 查看数据库服务 dmPython 安装 cd /home/dmdba/dmdbms/drivers/python/dmPython python setup.py install [rootlocalhost dmPython]# python setup.py install running install running bdist_egg running e…

通过Python Pandas分析数据上涨下跌趋势的方法:求离散数据的差分、导数

在实际工作中&#xff0c;我们经常需要分析一组数据的历史走势/趋势情况&#xff0c;比如要从产品数据库中筛选出销量处于上升趋势的产品&#xff0c;或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数&…

Kubernetes CKA 模拟题解析【2022最新版】(连载001)

练习准备 这是 Kubernetes CKA 认证的模拟考试&#xff0c;大家不要错过哦。 在模拟考试开始之前建议您先设置一下以下命令&#xff1a; $ alias kkubectl $ export do"--dry-runclient -o yaml" # like short for dry output. use whatever you like 设置代码补…

Lumion和Enscape渲染器有什么区别?哪个适合你

提到“傻瓜式渲染器”&#xff0c;你的脑子里最先闪过哪个软件名&#xff1f;当一溜子软件名在脑袋里飞快跳转的时候&#xff0c;有没有发现现在很多软件都被打上“傻瓜式渲染器”的标签&#xff1f;那今天咱们就先聊一聊Lumion和Enscape这两个知名软件。 01、软件介绍 Lumio…

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

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

浏览器渲染原理-通俗易懂版本

文章目录浏览器渲染原理前言1. 网页的解析过程2. 浏览器的功能与组成2.1 浏览器内核2.2 进程与线程3. 浏览器渲染流程3.1 渲染引擎解析过程3.2 渲染引擎主要模块4. 渲染页面的详细流程4.1 HTML 解析过程4.2 生成 CSS 规则4.3 构建 Render Tree4.4 布局 (layout) 和绘制 (Paint)…

外观专利怎么申请?

问题一&#xff1a;什么是外观专利&#xff1f; 外观专利跟实用新型专利和发明专利有所不同。实用新型和发明主要保护的技术方案或者方法&#xff0c;配方。而外观专利保护的产品的形状、图案或其结合以及色彩富有美感&#xff0c;并且适用于工业应用的新设计。比如某企业推出…

华为“仓颉”不是中文编程,中文编程早有所属,势如破竹

“中国自己的编程语言究竟在哪里&#xff1f;”关心IT生态的我们&#xff0c;经常深思与担忧。 语言是文化精髓所在&#xff0c;一方水土养一方人&#xff0c;不管是中文&#xff0c;还是英语&#xff0c;作为交流工具&#xff0c;语言烙印着不同地方的生活场景&#xff0c;一方…