Mybatis项目创建 + 规范

文章目录

  • 一、相关概念Mybatis
    • 1.1 什么是Mybatis
    • 1.1 如何实现简化JDBC
  • 二、如何创建 Mybatis 项目
    • 2.1 创建SpringBoot项目 + 加载依赖
    • 2.2 准备数据库 以及 对象的映射
    • 2.3 配置数据库连接池
    • 2.4 使用Mybatis操作数据库
    • 2.5 单元测试
  • 三、其他
    • 3.1 数据库与Java对象的映射规则 ---- 结果映射
      • 【1】概念介绍
      • 【2】注解写法的处理方式
      • 【3】xml写法的处理方式
    • 3.2 传参规则
    • 3.3 参数重命名规则
    • 3.2 开发规范介绍
    • 3.3 打印 Mybatis 执行的SQL

一、相关概念Mybatis

1.1 什么是Mybatis

  1. 是持久层框架:是一个用来操作数据库的持久层框架,基于JDBC开发的,可以简化JDBC的开发(将JDBC共性的东西放在框架里,程序员只要基于框架写个性的内容即可)
  2. 使用场景:我们一般会使用Mybatis操作关系型数据库
  3. 关于官网:Mybatis官网
  4. 两个依赖的区分
    在这里插入图片描述

1.1 如何实现简化JDBC

  1. 创建数据库连接池DataSource:在Spring Boot的配置文件中配置一下数据库的信息即可
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
  1. 通过DataSource获取数据库连接Connection:底层有一个默认的数据库连接池,可以直接从这里面拿连接
  2. 编写SQL语句:分为注解和xml两种写法
@Select("select * from userinfo")    //查询操作的注解写法
  1. 通过Connection即SQL创建命令对象 Statement
  2. 替换占位符
  3. 使用Statement执行SQL语句
  4. 根据查询/增删改执行不同的方法
  5. 处理结果
    • JDBC中,执行查询操作我们需要遍历结果集。而Mybatis直接返回一个List即可,Mybatis会根据我们的返回结果自动匹配
@Select("select * from userinfo")
List<UserInfo> selectAll();
  1. 处理异常和释放资源:异常还是要我们自己处理的,但一旦方法执行完了,Mybatis会立马帮我们释放资源

二、如何创建 Mybatis 项目

2.1 创建SpringBoot项目 + 加载依赖

  1. 需要加载的依赖
    在这里插入图片描述

2.2 准备数据库 以及 对象的映射

  1. 准备数据库:进行建库建表操作
    • 关于数据库客户端的使用:小黑框和图形化的数据库都可以使用
      在这里插入图片描述
  2. 对象的映射:数据库对象和Java对象映射
    在这里插入图片描述

2.3 配置数据库连接池

注意要根据自身数据库的情况,进行修改,如密码、数据库名、版本等

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

2.4 使用Mybatis操作数据库

  1. 创建包和接口:因为我们用的是@Mapper,所以包通常设置为【mapper】,类名则是以【Mapper】结尾,可以方便我们查找
  2. @Mapper:是ibatis提供的注解,ibatis是Mybatis前身。加了@Mapper就不需要再加上五大注解了。
    • 作用:寓意【Mybatis告诉Spring来管理这个对象】,效果和五大注解差不多。此处我们用的是Mybatis框架,故而不用五大注解。
  3. 为什么不是创建一个类:如果是一个类,selectAll方法里就必须要写方法的实现了
  4. @Select:表示一个查询语句,里面的参数是表示SQL语句的字符串。我们使用不同的注解,会调用不同的方法。
    在这里插入图片描述

2.5 单元测试

  1. 方式一:原始版:在src文件下里写一个代码调用接口。下面是在Controller层写,但这其实并不规范,毕竟单元测试的代码并不符合【控制层】的定义。
@RestController
public class UserInfoController {@Autowiredprivate UserInfoMapper userInfoMapper;@PostConstructpublic void init(){List<UserInfo> userInfos = userInfoMapper.selectAll();System.out.println(userInfos.toString());}
}
  1. 方式二:使用IDEA测试类:在Mapper接口下,选择generate —>test,让IDEA帮我们生成测试代码
    在这里插入图片描述

在这里插入图片描述

三、其他

3.1 数据库与Java对象的映射规则 ---- 结果映射

【1】概念介绍

  1. 什么是结果映射:Mybatis会自动根据数据库的字段名和Java对象的属性名进行映射
    • 名称一致:直接赋值
    • 名称不一致
      • 从mysql层面进行结果映射 :xxx as xxx
        不推荐,感觉改变了mysql的命名规范,而且把SQL语句弄得很复杂
      • 从Mybatis层面进行结果映射:告诉Mybatis哪些字段是对应的,让它帮我们映射
      • 配置驼峰自动转换:因为命名规范上,数据库默认用蛇形,Java属性名用小驼峰。故而可以直接写入配置文件,由Mybatis映射时自动转驼峰

【2】注解写法的处理方式

1. 对mysql查询结果重命名

@Select("select id, username, password, age, gender," +"phone, delete_flag as deleteFlag, create_time as createTime," +"update_time as updateTime from userInfo ")
List<UserInfo> selectAll();

在这里插入图片描述
2. 使用@Results、@Result
在这里插入图片描述
3. 配置自动转驼峰
:Mybatis拿到数据结果后,会读取配置,然后根据配置里的内容进行结果映射

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

【3】xml写法的处理方式

1. 对mysql查询结果重命名:和注解的一样

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.sp20240530.mapper.UserInfoXMLMapper"><select id="selectAll" resultType="com.example.sp20240530.model.UserInfo">select id, username, password, age, gender,phone, delete_flag as deleteFlag, create_time as createTime,update_time as updateTime from userInfo</select>
</mapper>
  1. 使用< resultMap>、< result>
    • resultType VS resultMap:前者指【结果的类型】,后者指【结果的映射】,有了resultMap就不需要resultType了

在这里插入图片描述

  1. 配置自动转驼峰:和注解的一样

3.2 传参规则

  1. 只有一个参数:如果只有一个参数,名称是可以不匹配的,Mybatis会直接拿去用。但通常情况下,为了方便去阅读,我们还是会让他们保持一致
@Mapper
public interface UserInfoMapper {@Select("select * from userinfo where id = #{id}")UserInfo selectUser(Integer id123);
}
  1. 有多个参数:要求名称对应上

3.3 参数重命名规则

  1. 参数不为对象:直接使用改名后的参数即可
@Mapper
public interface UserInfoMapper {@Select("select * from userinfo where id = #{userId}")UserInfo selectUser(@Param("userId") Integer id);//结合了映射规则,只有一个参数的情况@Select("select * from userinfo where id = #{userId111}")UserInfo selectUser2(@Param("userId") Integer id);
}
  1. 参数为对象:用【对象.属性名】的写法
    在这里插入图片描述

3.2 开发规范介绍

  1. XXXMapper:使用Mybatis对数据库的操作类,叫做XXXMapper(因为我们多用@Mapper)
  2. 企业建表规范:需要具备4个字段,哪怕项目中用不到,也需要我们有
    • id:身份标识
    • create_time:记录,可以方便后续使用
    • delete_flag:表示一个删除的标志,表示数据有无被删除,可以让我们使用【逻辑删除】而不是【物理删除】
      • 原理:企业开发中,我们一般不轻易删除数据,能用逻辑删除就用逻辑删除。
        (1)逻辑删除指从逻辑上进行数据删除,如把标志改变,后续查找的时候不查找这块。物理删除则是delete操作,真的从硬盘里删除了数据

        (2)一旦物理删除了,后续找回数据十分麻烦,我们也并不确定该数据在未来是否真的再也不用了,故而不推荐物理删除。

    • update_time:保障数据修改时的安全
  3. is_xxx:表达是否概念的字母,必须使用is_xxx的方式命名
  4. 字段名、表名全部小写
  5. 开发时尽量不要使用*:需要查询哪些字段,直接去写即可,如果需要全部的字段就全部写完

3.3 打印 Mybatis 执行的SQL

  1. 作用:帮我们进行调试,看到SQL代码的执行情况(运行的SQL、参数、结果分别是什么)
  2. 打印在开发环境:该日志的打印只建议出现在开发环境中,不要出现在线上环境。
    • 原理:因为当前我们打印这个日志,是为了帮助开发人员进行数据上的调试的。线上环境已经不是调试阶段了
  3. 环境分类:我们在实际的开发工作中,通常分为下面四种环境
    • 开发环境:写代码过程中,进行调试的这个环境
      • 方式:本地开发,或者一些公司提供单独的服务器让员工进行开发调试
      • 数据库使用:使用的是开发环境的数据库
    • 测试环境:测试人员使用的
      • 数据库使用:使用的是测试的数据库、配置,和开发环境没什么关系
    • 预发布环境:和线上环境同等地位,但不对外提供服务,主要用来观测上线的程序是否会出问题
      • 数据库使用:和线上环境一样都用的是【线上数据库】
      • 数据库使用
    • 发布环境(线上环境):域名后面会对应好几个服务器,分为“发布环境”和“预发布环境”,用户访问只能访问到“发布环境”。
mybatis:configuration: # 配置打印 MyBatis 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

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

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

相关文章

为什么GD32F303代码运行在flash比sram更快?

我们知道一般MCU的flash有等待周期&#xff0c;随主频提升需要插入flash读取的等待周期&#xff0c;以stm32f103为例&#xff0c;主频在72M时需要插入2个等待周期&#xff0c;故而代码效率无法达到最大时钟频率。 所以STM32F103将代码加载到sram运行速度更快。 但使用GD32F30…

复习kafka

Kafka 介绍 Kafka 是一种分布式的&#xff0c;基于发布/订阅的消息系统。它最初由 LinkedIn 开发&#xff0c;并于 2011 年开源。Kafka 的设计目标是提供一种高效、可靠的消息传输机制&#xff0c;能够处理大量的实时数据。 Kafka 基本概念 Producer&#xff1a;生产者&#xf…

Spring Boot 官方不再支持 Spring Boot 的 2.x 版本!新idea如何创建java8项目

idea现在只能创建最少jdk17 使用 IDEA 内置的 Spring Initializr 创建 Spring Boot 新项目时&#xff0c;没有 Java 8 的选项了&#xff0c;只剩下了 > 17 的版本 是因为 Spring Boot 官方不再支持 Spring Boot 的 2.x 版本了&#xff0c;之后全力维护 3.x&#xff1b;而 …

ArcGIS属性域和子类型

01 属性域 道路的车道数值是小于10的。在编辑道路的此属性时&#xff0c;为了限制其值在10以内&#xff0c;可以使用属性域。当输入数据超过10时&#xff0c;就会限制输入。 限制输入这个功能是Pro特有的&#xff0c;在ArcMap中输入超出限制的值也是合法的&#xff0c;需要手动…

【NOIP提高组】进制转换

【NOIP提高组】进制转换 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 我们可以用这样的方式来表示一个十进制数&#xff1a;将每个阿拉伯数字乘以一个以该数字所处位置的&#xff08;值减1&#xff09;为指数&#xff0c;以 10 为底数的幂…

Mac硬件设备系统环境的升级/更新 macOS

Mac硬件设备上进行系统环境的升级/更新macOS 1.大版本(升级)判断(比如&#xff1a;我买的这台电脑设备最高支持Monterey) 点击进入对应的大版本描述说明页查看相关的兼容性描述&#xff0c;根据描述确定当前的电脑设备最高可采用哪个大版本系统(Sonoma/Ventura/Monterey/Big Su…

构建高效便捷的家政平台系统——打造优质家政服务的关键

随着人们生活节奏的加快和工作压力的增大&#xff0c;家政服务的需求日益增长。为了满足这一需求&#xff0c;家政平台系统应运而生。本文将探讨家政平台系统的整体架构&#xff0c;以实现高效便捷的家政服务&#xff0c;打造优质家政体验。 ### 1. 家政平台系统背景 随着现代…

PKG系统安装包及IPSW固件下载(MacOS 11-14)11.7.10/12.7.1/13.6.

MacOS 14 Sonoma&#xff0c;为提高生产力和创造力带来了全新的功能&#xff0c;有了更多使用小部件和令人惊叹的新屏幕保护程序进行个性化设置的方法&#xff0c;对Safari浏览器和视频会议进行了重大更新&#xff0c;以及优化的游戏体验——Mac体验比以往任何时候都更好。 下载…

C++中的类

一&#xff0c;类的定义 class classname {//类体由成员函数和成员变量组成}; class为定义类的关键字&#xff0c;ClassName为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分 号不能省略。 类的两种定义方式&#xff1a; 声明和定义全部放在类体中…

从集合论到位运算

前言 本文将扫清位运算的迷雾&#xff0c;在集合论与位运算之间建立一座桥梁。 在高中&#xff0c;我们学了集合论&#xff08;set theory&#xff09;的相关知识。例如&#xff0c;包含若干整数的集合 S{0,2,3}。在编程中&#xff0c;通常用哈希表&#xff08;hash table&…

自然资源-农村土地流转知识全解

自然资源-农村土地流转知识全解 随着农村经济的发展和城市化进程的加快&#xff0c;农村土地面临着多方面的压力&#xff0c;如人口增长、城市扩张、环境恶化等。这些压力导致了农村土地利用率低、经济效益差、农民收入水平低、农村社会经济不发达等问题。因此&#xff0c;改变…

计算机网络学习2

文章目录 信道复用技术 第三章数据链路层概述数据链路层的三个重要问题封装成帧和透明传输差错检测可靠传输的相关基本概念可靠传输的实现机制停止等待协议回退N帧协议选择重传协议 点对点协议PPP共享式以太网网络适配器和MAC地址CSMA_CD协议的基本原理共享式以太网的争用期共享…

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前根据可靠消息&#xff0c;应该还有个预选赛和去年一样&#xff0c;就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二&#xff0c;没过的话就是国三。 每…

<MySQL> 表的增删改查 - 基本查询

目录 前言&#xff1a; 一、表的插入 &#xff08;一&#xff09;指定列插入和多行插入 &#xff08;二&#xff09;全列插入 &#xff08;三&#xff09;插入选择更新 &#xff08;四&#xff09;替换数据 二、表中的数据查询 &#xff08;一&#xff09;select查询语…

【SQL学习进阶】从入门到高级应用【三范式】

文章目录 什么是数据库设计三范式三范式一对多怎么设计多对多怎么设计一对一怎么设计最终的设计 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这里可以感受到一份…

sql注入-布尔盲注

布尔盲注&#xff08;Boolean Blind SQL Injection&#xff09;是一种SQL注入攻击技术&#xff0c;用于在无法直接获得查询结果的情况下推断数据库信息&#xff1b;它通过发送不同的SQL查询来观察应用程序的响应&#xff0c;进而判断查询的真假&#xff0c;并逐步推断出有用的信…

低代码选型要注意什么问题?

低代码选型时&#xff0c;确实需要从多个角度综合考虑&#xff0c;以下是根据您给出的角度进行的分析和建议&#xff1a; 公司的人才资源&#xff1a; 评估团队中是否有具备编程能力的开发人员&#xff0c;以确保能够充分利用低代码平台的高级功能和进行必要的定制开发。考察实…

告别繁琐SQL,4K星开源神器让数据库管理像聊天一样简单!

大家好&#xff0c;今天我要给大家介绍一个超级棒的开源项目——SQL Chat。如果你是一名开发者&#xff0c;数据库管理员&#xff0c;或者对数据分析感兴趣&#xff0c;那你绝对不能错过这个神器。SQL Chat&#xff0c;一个近4K星的GitHub项目&#xff0c;它将彻底改变你与数据…

本地安装AI大模型

使用ollmam安装llmama3等模型 1.打开ollmam下载对应系统的软件&#xff0c;安装即可 官网&#xff1a;Ollama&#xff0c; 安装直接点就就行了&#xff0c;没有其他操作 2.安装模型 在官网找到对于的模型下载命令 记录命令:ollama run llama3 打开一个cmd窗口&#xff0c;输…

【已解决】HtmlWebpackPlugin.getHooks is not a function

安装下面的依赖&#xff0c;获得 html-webpack-plugin 的 beta 版本 npm i html-webpack-pluginnext --save此问题在github上有讨论&#xff1a;https://github.com/facebook/create-react-app/issues/5465