MyBatis的XML映射文件

Mybatis的开发有两种方式:

  1. 注解

  2. XML配置文件

通过XML配置文件的形式来配置SQL语句,这份儿XML配置文件在MyBatis当中也称为XML映射文件。 

导学:在MyBatis当中如何来定义一份儿XML映射文件?

在MyBatis当中,定义XML映射文件它是有一定的规范的。

2.1 XML配置文件规范

  • 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能
  • 如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范 - XML映射文件定义规范:

  1. XML映射文件的名称与Mapper接口名称保持一致并且将XML映射文件和Mapper接口放置在相同包下(同包同名)- 在项目开发当中,一般都是一个接口对应一份儿映射配置文件;

  2. XML映射文件的namespace{命名空间}属性与Mapper接口的全限定名{包名+接口名}一致;

  3. XML映射文件中SQL语句的id与Mapper接口中的方法名一致并保持返回类型一致。

  • 通过以上的规则,MyBatis会在运行时动态生成Mapper接口的实现类,并根据接口方法的调用来查找对应的XML配置文件中的SQL语句,并执行该SQL语句,这样,就实现了Mapper接口方法与XML配置文件中SQL语句的关联。 

  • 在标准的Maven项目结构当中,java目录下存放的都是Java的源代码,而resources这个目录下存放的才是配置文件。
  • 在映射配置文件当中来定义SQL语句

  • 每一个SQL语句都有一个唯一标识,就是它的id属性,这个id属性需要与Mapper接口的方法名保持一致。 

<select>标签:就是用于编写select查询语句的。

  • resultType属性,指的是查询返回的单条记录所封装的类型。

2.2 XML配置文件实现

第1步:创建XML映射文件

注意:我们想要的包结构是一级一级的目录,如果用点来分隔,就会当成一个文件,目录之前的               分隔我们要使用斜杠/来分隔。 

打开磁盘目录验证: 

目录结构: 

第2步:编写XML映射文件

  • XML映射文件中的dtd约束,直接从MyBatis官网复制即可

配置XML文件的约束:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=""></mapper>

<mapper></mapper>标签是根标签!

配置:XML映射文件的namespace属性为Mapper接口全限定名  

  • 在<mapper>标签当中,它有一个唯一的属性,就叫namespace命名空间,namespace属性需要与Mapper接口的全类名保持一致。  

  •  XML配置文件的namespace属性与Mapper接口的全限定名一致!

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gch.mapper.EmpMapper"></mapper>

配置:XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gch.mapper.EmpMapper"><!--查询操作    resultType:指的是单条记录所封装的类型{实体类全类名}--><select id="select" resultType="com.gch.pojo.Emp">select id,username,password,name,gender,image,job,entrydate,dept_id,create_time,update_timefrom mybatis.empwhere name like concat('%', #{name}, '%')and gender = #{gender}and entrydate between #{begin} and #{end}order by update_time desc</select>
</mapper>

Mapper接口方法:

package com.gch.mapper;import com.gch.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.time.LocalDate;
import java.util.List;/**加上@Mapper注解就代表程序在运行时会自动的创建该接口的代理对象,并且会将这个代理对象放入到IOC容器当中*/
@Mapper
public interface EmpMapper {/*** 条件查询员工信息* 基于XML映射文件的形式来配置SQL语句* @param name => 查询的姓名* @param gender => 查询的性别* @param begin => 查询的入职时间* @param end => 查询的离职时间* @return => 把查询返回的多条记录封装到List集合里面*/public List<Emp> select(String name, short gender, LocalDate begin, LocalDate end);
}

测试类:

package com.gch;import com.gch.mapper.EmpMapper;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {/**从Spring的IOC容器当中,获取类型是EmpMapper的对象并注入*/@Autowiredprivate EmpMapper empMapper;/*** 条件查询*/@Testpublic void testSelectList() {// 调用查询方法查询员工信息,并将查询返回的结果使用List集合接收List<Emp> list =  empMapper.select("张", (short) 1,LocalDate.of(2010, 01, 01), LocalDate.of(2020, 01, 01));// 遍历集合输出list.stream().forEach(s ->{System.out.println(s);});}
}

运行测试类,执行结果:  

思考:在定义XML映射文件的时候,为什么要遵守这三点规范?

  • 通过MyBatis这个框架来操作数据库,最终我们只需要调用Mapper接口当中的接口方法就可以完成数据库的操作,但是我们要明白,最终我们操作数据库并不是直接通过Mapper接口中的方法来操作数据库,而是执行了与该接口方法对应的SQL语句来完成数据库的操作。

思考:通过Mapper接口中的接口方法怎么找到与之关联的SQL语句?

  • 如果使用注解的方式来进行配置,就不用思考这样的问题,因为使用注解的方式进行配置,我们执行这个接口方法,最终执行的不就是注解当中的SQL语句吗?SQL语句与Mapper接口中的接口方法是绑定在一起的。
  • 但是如果我们采用XML配置文件的形式来配置SQL语句,Mapper接口中的接口方法的定义与XML配置文件当中配置的SQL语句,它们两是分开的,我们现在要做的就是根据Mapper接口中的接口方法来找到在XML配置文件当中配置的SQL语句。 
  • 如果我们按照规范来定义了这样一份儿XML配置文件,此时当我们调用Mapper接口当中的接口方法的时候,此时MyBatis框架就会自动的去查找namespace属性值与这个接口全类名相同的这份XML映射文件,并且在这份儿XML映射文件当中找到id属性值与方法名相同的这条SQL语句,最终来运行这条SQL语句,从而就完成了数据库的操作。

2.3 MybatisX的使用

  • MybatisX是一款基于IDEA的快速开发Mybatis的插件,为效率而生。
  • 通过MyBatisX这款插件就可以提高MyBatis的开发效率。 

MybatisX的安装:  

如图:

  • 这只是IDEA的一个误报,IDEA识别错乱的一个问题;
  • 在真实的企业开发当中,一个项目就是一个单独的工程,所以是不会出现这个问题的。

可以通过MybatisX快速定位:  

MyBatisX的使用在后续学习中会继续分享...  

学习了Mybatis中XML配置文件的开发方式了,大家可能会存在一个疑问:到底是使用注解方式开发还是使用XML方式开发?  

官方说明:入门_MyBatis中文网

  • 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
  • 选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。

结论:

  • 使用Mybatis的注解,主要是来完成一些简单的增删改查功能。
  • 如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。  

总结:

 

 

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

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

相关文章

python编辑器安装与配置,python用哪个编辑器好用

大家好&#xff0c;给大家分享一下python编辑器pycharm安装教程&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 哪些python的编程软件值得推荐&#xff1f; 编写python源代码的软件.首推的Pycharm。 PyCharm用于bai一般IDE具备的功能&…

VS2015+cublas实操记录(cuda加速GEMM矩阵乘加算子)

1. 环境配置&#xff1a; cuda安装后一般的安装位置在&#xff1a;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8 把这个目录下的include和lib分别配置在vs中&#xff0c;安装cuda教程可参考&#xff1a;https://zhuanlan.zhihu.com/p/520995962&#xff08;笔者…

Reinforcement Learning with Code 【Chapter 10. Actor Critic】

Reinforcement Learning with Code 【Chapter 10. Actor Critic】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of …

iview 日期 datetimerange

问题&#xff1a;每次点击编辑按钮进入到编辑页面&#xff0c;活动时间明明有值&#xff0c;却还是提示请选择活动时间。 原因&#xff1a;值没绑定上 解决办法&#xff1a;v-model 修改为 :value <Form-item label"活动时间" prop"timeRange"><d…

VUE+ElementUI的表单验证二选一必填项,并且满足条件后清除表单验证提示

上代码 <el-form-item label"出库单号" prop"ecode" ref"ecode" :rules"rules.ecode"><el-input v-model"queryParams.ecode" placeholder"出库单号和出库箱号至少填写一项" clearable style"width…

Spring Cloud 的版本和SpringBoot的版本

Spring Cloud 的版本选择 Spring Cloud 和SpringBoot的版本存在对应关系 Spring Cloud 的版本和SpringBoot的版本&#xff0c;存在对应关系。最新的SpringCloud版本&#xff08;发布文章时为2022.0.3&#xff09;&#xff0c;需要SpringBoot&#xff08;3.0.9&#xff09; 的…

vscode关闭绑定元素“xxx”隐式具有“any”类型这类错误

在ts的项目里面&#xff0c;真的经常看到any类型的报错&#xff0c;真的很烦的 所以为了眼不见心不乱&#xff0c;我决定消除这个错误提示 在tsconfig.json里面配置 "noImplicitAny": false 就可以了 {"compilerOptions": {"target": "E…

Mac超好用软件推荐

没有广告&#xff0c;良心推荐哦 刷到有福啦 非常非常感谢一路支持的大佬&#xff0c;你们的支持是我的荣幸 目录 Keka Free Download Manager Noizio Lite Microsoft 365 ​编辑 LocalSand Hidden Bar Obsidian iWork VMware Fusion SwitchHosts Xmind Listen…

Linux命令200例:ls用于列出指定目录下的文件和子目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

解决Vue+Element UI使用表单rules国际化时From表单验证信息不能实时更新

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 博主在工作之余开始进行自动化测试平台的开发&#xff0c;虽然已经996一个月了但是还是在使劲挤时间做这件事情&#xff0c;目前平台使用前端框架vu…

STM32F429IGT6使用CubeMX配置IIC通信(AT2402芯片)

1、硬件电路 写地址&#xff1a;0xA0 读地址&#xff1a;0xA1 存储容量&#xff1a;256Byte 2、设置RCC&#xff0c;选择高速外部时钟HSE,时钟设置为180MHz 3、配置IIC 4、生成工程配置 5、部分代码 #define IIC_WRITE_ADDR 0xA0 // IIC写地址 #define IIC_READ_ADDR 0xA1 …

推荐系统工作小结

最初的构想 由于我们的技术团队中并没有人真正用大数据的方法做过推荐系统。所以我们定的步骤是先解决有没有的问题。然后再持续地进行效果优化的工作。 现状 但一方面考虑到要快速上线。另一方面也希望对推荐系统的效果有一个合理的参照。我们打算先使用达观数据的推荐系统云…

爬虫015_python异常_页面结构介绍_爬虫概念介绍---python工作笔记034

来看python中的异常 可以看到不做异常处理因为没有这个文件所以报错了 来看一下异常的写法

【css】渐变

渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型&#xff1a; 线性渐变&#xff08;向下/向上/向左/向右/对角线&#xff09; 径向渐变&#xff08;由其中心定义&#xff09; 1、线性渐变 语法&#xff1a;background-image: linear-gradient(direction, co…

原子css 和 组件化css如何搭配使用

如果让你来实现下面这种页面&#xff0c;该怎么实现呢 原子化和css组件化方式写法&#xff0c;可以搭配起来使用&#xff0c;常用的css 原子css 比如 下面这些类似flex 布局&#xff0c;lstn curser-pointer 等常用的或者 具备一定规律性的padding margin 样式可以抽取为单独…

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程&#xff0c;Magento是一款开源电商网站框架&#xff0c;其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发&#xff0c;支持版本范围从PHP 5.6到PHP 7.1&#xff0c;并使…

Selenium图片滑块验证码

因为种种原因没能实现愿景的目标&#xff0c;在这里记录一下中间结果&#xff0c;也算是一个收场吧。这篇文章主要是用selenium解决滑块验证码的个别案列。 思路&#xff1a; 用selenium打开浏览器指定网站 将残缺块图片和背景图片下载到本地 对比两张图片的相似地方&#…

【果树农药喷洒机器人】Part6:基于深度相机与分割掩膜的果树冠层体积探测方法

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

JVM垃圾回收

如何确定垃圾 对堆垃圾回收前的第一步就是要判断哪些对象已经死亡&#xff08;即不能再被任何途径使用的对象&#xff09; 引用计数法 这个方法就是为对象添加计数器来标识引用个数&#xff0c;计数器为 0 的对象就是不可能再被使用的。但是这种方法存在循环引用问题&#x…

IntelliJ IDEA快捷键大全

文章目录 1、构建/编译2、文本编辑3、光标操作4、文本选择5、代码折叠6、辅助编码7、上下文导航8、查找操作9、符号导航10、代码分析11、运行和调试12、代码重构13、全局 CVS 操作14、差异查看器15、工具窗口 本文参考了 IntelliJ IDEA 的官网&#xff0c;列举了IntelliJ IDEA&…