[spring]MyBatis介绍 及 用MyBatis注解操作简单数据库

news2024/11/15 15:51:21

文章目录

  • 一. 什么是MyBatis
  • 二. MyBatis操作数据库步骤(使用注解)
    • 创建工程
    • 创建数据库
    • 创建对应实体类
    • 配置数据库连接字符串
    • 写持久层代码
    • 单元测试
  • 三. MyBatis基础操作 使用注解
    • 打印日志
    • 参数传递

一. 什么是MyBatis

在这里插入图片描述
在这里插入图片描述
简单来说 MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具

二. MyBatis操作数据库步骤(使用注解)

在这里插入图片描述

创建工程

创建springboot⼯程,并导⼊ mybatis的起步依赖、mysql的驱动包
在这里插入图片描述
Mybatis 是⼀个持久层框架, 具体的数据存储和数据操作还是在MySQL中操作的, 所以需要添加MySQL驱动
在这里插入图片描述

创建数据库

CREATE TABLE `userinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(127) NOT NULL,
  `password` varchar(127) NOT NULL,
  `age` tinyint(4) NOT NULL,
  `gender` tinyint(4) DEFAULT '0' COMMENT '1-男 2-女 0-默认',
  `phone` varchar(15) DEFAULT NULL,
  `delete_flag` tinyint(4) DEFAULT '0' COMMENT '0-正常, 1-删除',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

创建对应实体类

在这里插入图片描述

配置数据库连接字符串

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

修改数据库名称, 密码即可

写持久层代码

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

Mybatis的持久层接⼝规范⼀般都叫 XxxMapper

@Mapper注解:表⽰是MyBatis中的Mapper接⼝
程序运⾏时, 框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理

@Select注解:代表的就是select查询,也就是注解对应⽅法的具体实现内容

单元测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择想要测试的方法, 就会在Test中对应的文件帮我们创建测试方法
在这里插入图片描述

  1. 需要我们添加@SpringBootTest注解, 该测试类在运行时, 就会自动加载Spring的运行环境
  2. 通过@Autowired这个注解, 注入我们要测试的类, 就可以开始测试了
    在这里插入图片描述

在这里插入图片描述

运行成功

三. MyBatis基础操作 使用注解

打印日志

在Mybatis当中我们可以借助⽇志, 查看到sql语句的执⾏、执⾏传递的参数以及执⾏结果

mybatis:
  configuration: # 配置打印 MyBatis⽇志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

参数传递

在方法中添加参数, 将方法中的参数, 传给SQL, 在SQL语句中使用**#{ }**来接收
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述

  1. 如果方法形参只有一个参数, 那么#{} 中的属性名可以随便写
  2. 如果是多个参数, 那么就要求参数名和属性名一致
    在这里插入图片描述
  3. 可以通过@Param()设置别名, 来映射到对应的属性名
    在这里插入图片描述此时, 只会按照id2来映射, id会失效

在这里插入图片描述
在这里插入图片描述
如果使用@Param
在这里插入图片描述
想要获取到自增字段:
使用@Options(useGeneratedKeys = true, keyProperty = “id”)
在这里插入图片描述
在这里插入图片描述
将JDBC的useGeneratedKeys方法拿到的数据库中生成的主键, 赋给keyProperty指定的属性中
测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
观察日志发现, 数据库将后面字段的数据传回来了, 但是在打印userInfo对象时, 却没有接收到
原因分析:
当⾃动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略
⼤⼩写)。 这意味着如果发现了 ID 列和 id 属性,MyBatis 会将列 ID 的值赋给 id 属性
但是由于规范性, 命名的时候, 字段名和属性名 不可能完全一致
** 办法一: 起别名**
在这里插入图片描述
在这里插入图片描述
成功接收
** 办法二: 结果映射**
使用@Results({@Result(column = ..., property = ...), @Result(column = ..., property = ...)...})注解, 来映射字段和属性
在这里插入图片描述
在这里插入图片描述
映射成功
但是每当我们写个sql都需要加上这个映射关系
复用映射关系:
如果其他SQL, 也希望可以复⽤这个映射关系, 可以给这个Results定义⼀个id
在这里插入图片描述
其他的sql使用@ResultMap注解来复用这个映射关系即可
在这里插入图片描述
办法三: 开启驼峰命名
加上配置:

mybatis:
  configuration: 
    map-underscore-to-camel-case: true #配置驼峰⾃动转换

在这里插入图片描述
代码中无需做任何处理
在这里插入图片描述
映射成功

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

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

相关文章

langchain的构成

1.简介 langchain的构成其包含langchain-core,langchain-community,langchain,langgraph,langserve,langSmith。 2,构件的详解 ‌LangChain Core‌ ‌LangChain Core‌是LangChain框架的核心组成部分,它包含了不同组件的基本抽象以及将它们组合在一起…

ruoyi-flowable流程设计配置的表单时,级联选择如何配置??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

为什么自学python那么难?

在科技日新月异的今天,编程能力已成为一项备受追捧的技能。仿佛一夜之间,各种编程学习资源如雨后春笋般涌现,让人眼花缭乱。然而,许多人投身于自学编程的行列,却往往在半路折戟沉沙。究竟是什么原因让自学编程变得如此…

如何重置企业/媒体/组织/个体户类型管理员微信号

请您通过浏览器打开该网页https://mp.weixin.qq.com/acct/findacct?actionscan重置公众号绑定邮箱和管理员微信号, 在申请找回帐号的页面填写的对公账户信息和运营者信息可以和注册不一致,完成找回后,管理员微信号会同步更新; …

【小程序】微信小程序课程 -3 快速上手之常用方法

目录 1、 对话框 1.1 模态对话框 1.2 消息对话框 2、 存储 2.1 同步 2.1.1 同步保存数据 2.1.2 同步获取数据 2.1.3 同步删除数据 2.1.4 同步清空数据 2.2 异步 2.2.1 异步保存数据 2.2.2 异步获取数据 2.2.3 异步删除数据 2.2.4 异步清空数据 3、 上拉加载更多…

代码随想录算法训练营第三十八天 | 322. 零钱兑换,279.完全平方数,139.单词拆分,多重背包

322.零钱兑换 题目链接 解题过程 递推公式写对了&#xff0c;但对于特殊情况的案例没有想清楚&#xff0c;如不能凑成则需返回-1dp[i] min(dp[i], dp[i - coin] 1); 完全背包 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector…

SSM影院订票系统—计算机毕业设计源码35370

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个SSM影院订票系统&#xff1b;订票系统的管理工作系统化、规范化&#xff0c;也会提高平台形象&#xff0c;提高管理效率。 本影院订票系…

11周年 | 初心不改,焕新前行,奔赴下一个10年!

2024年8月13日&#xff0c;爱加密正式迎来了11岁生日&#xff0c;在爱加密肩负着崇高使命踏浪而行的10年间&#xff0c;蓝绿色的品牌标识一直伴于左右。随着时代的变迁以及市场需求的不断变化&#xff0c;企业同样也需要在品牌上做出创新递进&#xff0c;从而更加适应市场竞争的…

AI知识库助力电商企业打造精准营销策略

在数字化时代&#xff0c;电商行业的竞争日益激烈&#xff0c;消费者需求的多样化和个性化趋势愈发明显。为了在这场没有硝烟的战争中脱颖而出&#xff0c;电商企业纷纷借助人工智能技术&#xff0c;特别是AI知识库&#xff0c;来打造更加精准、高效的营销策略。本文将深入探讨…

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值&#xff0c;比如内网ip、hostame&#xff0c;每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。实操演示 例&#xff1a;定义一个local_ip的命名空间变量…

单利复利计算器使用方法

单利复利计算器使用方法 背景 这个工具主要是小部分人用&#xff0c;因为以前要算个单利复利的时候&#xff0c;搜索出来的工具上来就要获取你的手机号&#xff0c;进去之后再收费。如果使用频繁的话&#xff0c;可以购买他们的更多服务&#xff0c;产品功能更多更完善。偶尔…

年轻用户对Facebook的使用趋势分析

在社交媒体的蓬勃发展中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;尽管面临着来自新兴平台的竞争&#xff0c;仍然在年轻用户中扮演着重要角色。然而&#xff0c;年轻用户对Facebook的使用方式和趋势却在不断变化。本文将探讨年轻用户对Facebook的使用趋势&a…

性能测试工具——JMeter

目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一&#xff1a; 方式二&#xff1a; 3、JMeter基础设置 4、JMeter基本使用流程 &#xff08;1&#xff09;启动JMeter &#xff08;2&#xff09;在测试计划下添加线程组 &#xff08;3&#xff09;在 “线…

防止企业数据泄露 | 信息数据电脑保护系统 | 天锐DLP数据安全

在当今这个高度信息化的时代&#xff0c;数据已跃升为企业运营不可或缺的核心战略资源&#xff0c;而面对企业内部终端上海量的数据信息&#xff0c;及时、准确地识别出重要的敏感数据是一项关键任务&#xff0c;它直接关系到企业的数据安全、合规性以及业务风险的控制。 【地址…

鸿蒙HarmonyOS NEXT系统揭秘:跨端迁移与多端协同

随着科技的飞速发展&#xff0c;万物互联的时代已经悄然来临。 在这个背景下&#xff0c;华为鸿蒙HarmonyOS NEXT系统的最新动向无疑成为了业界关注的焦点。 近日&#xff0c;关于鸿蒙操作系统将多设备协同功能细分为“跨端迁移”与“多端协同”的消息不胫而走&#xff0c;这…

基于单片机的太阳能热水器控制系统的研究-设计说明书

设计摘要&#xff1a; 本研究旨在设计和实现基于单片机的太阳能热水器控制系统。太阳能热水器是一种有效利用太阳能来加热水的设备&#xff0c;在节能和环保方面具有显著的优势。本研究通过使用单片机技术&#xff0c;将传统的太阳能热水器与智能控制相结合&#xff0c;提高了…

QT 中的信号与槽机制详解

目录 一、引言 二、信号与槽的基本概念 1.信号&#xff08;Signals&#xff09; 2.槽&#xff08;Slots&#xff09; 三、声明信号和槽 1.声明信号和槽 2.发射信号 3.连接信号和槽 四、高级特性 1.多信号连接到一个槽 2.一个信号连接到多个槽 3.断开信号和槽的连…

多融合的信息收集工具--Mitan

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

北京市朝阳区自闭症寄宿学校:为孩子提供优质照顾与学习环境

北京市朝阳区自闭症寄宿学校的愿景与广州星贝育园的卓越实践 在北京市朝阳区&#xff0c;乃至全国范围内&#xff0c;自闭症儿童的教育与照护一直是社会各界关注的焦点。家长们渴望为孩子找到一所能够提供优质照顾与学习环境的学校&#xff0c;让他们在爱与专业的滋养下茁壮成…

trl中的PPO代码解析(炒冷饭版)

不说其他的解释&#xff0c;上来就看代码。建议先对PPO的整体流程有了解。 trl的版本为0.4.0&#xff0c;注&#xff1a;【新版的trl中代码更复杂&#xff0c;如果只是想读懂PPO具体怎么用trl实现的&#xff0c;0.4.0版本即可】 step1: rollout ppo_trainer.generate()函数…