【MyBatis】mvc模式以及Mapper文件中的namespace以及ORM思想

news2024/10/5 17:24:40

目录

什么是MVC三层架构,初步了解?

namespace的作用是什么?

Mapper文件中的namespace?

ORM思想(对象关系映射思想)

其中提供了一套映射规则和API


什么是MVC三层架构,初步了解?

三层架构包括,表示层、业务逻辑层、数据层,对应到我的项目中的代码中就是,在web包下书写的是表示层,而表示层是负责调用的,相当于指挥官级别,他只负责调用,逻辑层就是service层,他是负责动手办事的层,例如主要的业务逻辑等等,数据层也就是操作数据的层;

层与层之间一般是使用接口来连接,为了降低耦合度,大概的结构就是你表示层中调用service接口,service中调用dao接口,此外接口一般是父类引用指向子类对象(也就是多态);

又因为我们不可创建的接口只调用一次,他也有可能在所在代码中还有别的用处,所以我们通常会将接口的定义放到方法外面,

 public class AccountServiceImpl implements AccountService {
  private AccountDao accountDao = new AccountDaoImpl();
  @Override
  public void transfer(String fromActno, String toActno, double money) throws MoneyNotEnoughException, AppException {...

注意:在每个层都有每个曾负责的东西,例如不要在到层书写和业务逻辑相关的东西,他就只负责CRUD,其余不要乱放,这也体现了MVC的解耦合终极用途;

namespace的作用是什么?

Mapper文件中的namespace?

Mapper文件中的namespace用于绑定Dao接口。在MyBatis中,namespace的值应该设置为对应的Dao接口的全类名,以实现面向接口编程。

  1. 在MyBatis中,mapper文件中的namespace是用来唯一标识该mapper文件的,它通常与对应的Mapper接口的全限定名相同。namespace的作用主要有以下几个方面:

    1. 命名空间管理:MyBatis中可以存在多个mapper文件,每个mapper文件中可能包含多个SQL语句。通过namespace来对这些SQL语句进行分类管理,方便组织和查找。

    2. 避免冲突:使用namespace可以避免不同mapper文件中相同ID的SQL语句冲突。namespace使得每个SQL语句有了独立的标识,确保了其唯一性。

    3. 映射关系绑定:namespace与Mapper接口的全限定名相同,它们之间建立了映射关系。MyBatis会根据namespace和方法名,自动找到对应的mapper文件和SQL语句执行。

初次认识是,我们的web项目中会有很多的Mapper文件(一般是一张表对应一个Mapper文件),我们操作数据库中的表时,一个大型的项目中坑定有很多的Mapper文件,在业务代码中我们会通过sqlsession对象调用执行数据的方法例如select或者update等等,调用的时候我们会传入一个id,然后通过id去到配置文件中去找出对应的配置的sql语句,并执行,但是一旦Mapper文件变得很多,呢我我们如何快速找出id多对应的Mapper文件,此时就需要到了namespace。我们在书写sqlsession调用的方法的参数中的id时,就要写namespace.selectbyid,这样就可以快速找见对应的Mapper文件;

 //Mapper配置文件
 <mapper namespace="user">
 //对应的java代码
 SqlSession sqlSession = util.getSqlSession();
 int updateData = sqlSession.update("user.UpdateEmployeeData", 4);

ORM思想(对象关系映射思想)

ORM(对象关系映射)是一种编程思想和技术,用于将关系型数据库中的表结构映射到面向对象编程语言中的对象模型。

ORM 的基本思想是通过定义对象和数据库表之间的映射关系,使得开发人员可以像操作对象一样操作数据库,而不需要直接编写SQL语句。

ORM 的优点包括:

  1. 简化开发:ORM 提供了一种易于理解和使用的编程模型,开发人员可以直接使用对象的方法和属性来操作数据库,从而免去了复杂的SQL语句和数据库细节。

  2. 提高可维护性:通过将数据库和应用程序的逻辑分离,使得代码更加模块化和可维护。当数据库结构改变时,只需更新映射定义,而不需要修改大量的业务逻辑代码。

  3. 提高可移植性:ORM 可以隐藏不同数据库之间的差异,使得应用程序可以比较容易地切换或同时支持多种数据库。

  4. 提供对象级的查询和持久化:ORM 不仅提供了方便的增删改查操作,还支持复杂的查询和关联操作,可以方便地处理对象之间的关系。

常见的ORM框架包括Hibernate(Java)、Django ORM(Python)、Entity Framework(.NET)等。这些框架都提供了一套映射规则和API,使得开发人员可以更轻松地进行数据库操作,提高开发效率和代码质量。

其中提供了一套映射规则和API

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

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

相关文章

谷歌浏览器多版本切换测试兼容性

谷歌浏览器多版本切换测试兼容性 在开发过程中&#xff0c;我们常常会出现浏览器兼容问题&#xff0c;客户的浏览器版本参差不齐&#xff0c;只有对应版本的浏览器才会出现对应的问题&#xff0c;所以我们需要在本地通过切换不同的浏览器来测试对应的问题。本篇内容就是介绍不用…

投资理财:增额终身寿的优点和缺点

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家继续探讨一下最近理财爆火的增额终身寿&#xff0c;你是真的了解增额终身寿的本质吗&#xff1f; 一、增额寿3.0%的利率真的吸引人吗&#xff1f; 身边有很多富有的成功人士以及财经博主都开始购买增额终身寿保险&#xf…

中国人民大学与加拿大女王大学金融硕士庞雪雨:行学之道,在自律、在勤勉、在止于至善

庞雪雨 中国人民大学-加拿大女王大学金融硕士2022-2023级行业高管班 光大保德信资产管理有限公司董事总经理 当我进入到人大校园的那一刻&#xff0c;映入眼帘的是明德楼&#xff0c;由此我想到了《大学》&#xff0c;大学开篇中讲到&#xff0c;大学之道&#xff0c;在明明德…

Maven 基础教程系列

Maven是一个项目开发管理和理解工具。基于项目对象模型的概念&#xff1a;构建、依赖关系管理、文档创建、站点发布和分发发布都由pom.xml声明性文件控制。Maven可以通过插件进行扩展&#xff0c;以使用许多其他开发工具来报告或构建过程。 一、Maven 使用教程-CSDN博客 二、…

电源芯片测试规范是什么?如何测试电源芯片输入电压范围?

电源芯片测试贯穿着研发、设计、生产过程的始终&#xff0c;目的就是为了通过反复检测来确保电源芯片的性能、质量和可靠性&#xff0c;保证正常工作运行。电源芯片测试涉及到许多测试项目&#xff0c;并且有着具体的测试规范标准和方法。本文纳米软件将介绍电源芯片输入电压范…

Flutter视图原理之StatefulWidget,InheritedWidget

目录 StatefulElement1. 构造函数2. build3. _firstBuild3. didChangeDependencies4. setState InheritedElement1. Element类2. _updateInheritance3. InheritedWidget数据向下传递3.1 dependOnInheritedWidgetOfExactType 4. InheritedWidget的状态绑定4.1. ProxyElement 在f…

为中小企业的网络推广策略解析:扩大品牌知名度和曝光度

目前网络推广已经成为企业获取潜在客户和提升品牌知名度的重要手段。对于中小企业而言&#xff0c;网络推广是一个具有巨大潜力和可行性的营销策略。在本文中&#xff0c;我们将探讨中小企业为什么有必要进行网络推广&#xff0c;并分享一些实用的网络推广策略。 一、扩大品牌知…

【Go之道】探索Go语言之旅:基础与进阶指南

在这个数字化快速发展的时代&#xff0c;掌握一门编程语言已成为必备技能。今天&#xff0c;我将带你踏上【Go之道】&#xff0c;探索Go语言的魅力&#xff0c;为你的编程之旅助力。 一、Go语言概述 Go&#xff0c;又称为Golang&#xff0c;是由Google设计和开发的一种静态类型…

如何提高嵌入式软件工程师的技术深度?

今日话题&#xff0c;如何提高嵌入式软件工程师的技术深度&#xff1f;建立坚实的基础知识是深入研究的关键。只有深入理解基础知识&#xff0c;才能在理论指导下不断深化和扩展自己的技术。没有坚实的基础&#xff0c;深入研究就显得空中楼阁。如果你有兴趣进入嵌入式行业我可…

WebDAV之π-Disk派盘 + Autosync

Autosync如何设置可以让各种云储存软件能够自动的同步备份手机上面的各种内容,让你手机当中的重要文件内容能够得到保存,让你的重要文件不会在手机上面丢失,随时都能够在各种云储存当中找到?快来试下Autosync自动同步工具吧。 Autosync是一款自动文件同步和备份工具。 它能…

StyleCLIP global direction详解

StyleCLIP中global direction的实现原理 前言第一阶段:预计算生成latents计算均值与标准差计算 Δ i \Delta i Δi 第二阶段:计算与文本的对应关系 前言 基于的假设&#xff1a; CLIP中虽然图像特征与文本特征不存在一一对应的关系&#xff0c;但相同的语义下&#xff0c;图像…

iOS上架App Store的全攻略

​ 第一步&#xff1a;申请开发者账号 在开始将应用上架到App Store之前&#xff0c;你需要申请一个开发者账号。 1.1 打开苹果开发者中心网站&#xff1a;Apple Developer 1.2 使用Apple ID和密码登录&#xff08;如果没有账号则需要注册&#xff09;&#xff0c;要确保使用…

会议OA项目-其它页面->自定义组件应用,其它界面的布局

1.自定义组件应用 文档参考:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ //oamin\project.config.json {"description": "项目配置文件","packOptions": {"ignore": [],"include": []},…

聊聊BOM的基础概念、管理难点

物料清单&#xff08;Bill of Materials&#xff0c;简称BOM&#xff09;是描述产品组成结构的信息数据。BOM信息是制造信息化/数字化管理的最核心的基础数据&#xff0c;BOM信息贯穿从产品设计、生产计划制定、物料采购和销售服务等制造全业务流程&#xff0c;是开展生产活动的…

vue 插槽 - 具名插槽

vue 插槽 - 具名插槽 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\09-插槽-具名插槽 vue --version vue create…

兼容支付宝抖音小程序的工具还能把他们迁移到自己的app

事情的起因是这样的。 之前在微信、支付宝和抖音开放平台都上架了自己的小程序&#xff0c;虽然几个平台有自己的开发标准&#xff0c;但是都是基于 JavaScript 这种已经被广泛使用的编程语言进行开发的&#xff0c;对于开发者而言学习的门槛并不高&#xff0c;也很容易进行开…

标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。

最近有朋友在研究Halcon中gen_gabor的函数&#xff0c;和我探讨&#xff0c;因为我之前也没有怎么去关注这个函数&#xff0c;因此&#xff0c;前前后后大概也折腾了有一个星期去模拟实现这个东西&#xff0c;虽然最终没有实现这个函数&#xff0c;但是也是有所收获&#xff0c…

协程,GIL全局解释器,互斥锁,线程池,Concurrent模块

进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位。每一个进程中至少有一个线程。 Python对并发编程的支持 (1)多线程&#xff1a;threading&#xff0c;利用CPU和IO可以同时执行的原理&#xff0c;让CPU不会干巴巴等待IO完成。 (2)多进程&#xff1a;multiproces…

nvcc -V和nvidia-smi的关系

nvcc -V 和 nvidia-smi 都与NVIDIA GPU相关&#xff0c;但它们提供的信息和功能有所不同。 nvcc -V: nvcc 是 NVIDIA CUDA 编译器的命令&#xff0c;用于获取CUDA工具包的版本信息。CUDA&#xff08;Compute Unified Device Architecture&#xff09;是一种用于并行计算的GPU编…