首页 > 其他分享 >MyBatis的配置文件详解

MyBatis的配置文件详解

时间:2024-09-22 23:24:29浏览次数:11  
标签:xml 配置文件 标签 数据库 mybatis 详解 MyBatis id 属性

01-MyBatis的配置文件详解

创建的接口和xml文件的名字最好写一样的要不然会出问题,然后和接口名相同的xml文件在resources下创建个和接口相同文件夹把xml文件放进去,而且resources下的创建的文件夹需要一级一级的创键,比如:cn创建完,创建tulingxue,然后再创建mapper文件夹才行

在接口里声明方法时返回类型需要和红色圈1一样,,方法名需要和红色圈2一样,参数需要和红色圈3一样

在创建 根据全局配置文件的xml构建成SqlSessionFactory,里的将xml构建成输入流里的inputStream=Resource里时需要导入包必须是下图蓝色框鼠标指的

第一句代码引用全局配置文件的.xml文件,

第二句因为要创建SqlSessionFactory所以需要用InputStream输入流,因为SqlSessionFactory需要根据输入流才能构建

第三句的作用构建SqlSessionFactory :将全局配置文件和所有的mapper全部加载到Configuration

openSession()用法如下注解所示

EmpMapper是我们创建的接口,为什么接口可以调用方法呢,都是对象才能调用方法,因为Mybatis在底层把接口用jdk动态代理给实现了和接口名相同的代理类就可以实现调用方法了

用jdbc查询数据库如下面语句

创建日志框架,门面用SLF4J,实现用Logback,使用日志是为了记录后台的错误信息

首先导入依赖包如下图两个

然后在测试类中设置全局变量logger,导入的包选红色框的

然后LoggerFactory也要导入上面同款的包

日志级别说明系统默认是debug级别意思是比debug级别大的错误信息都能输入出来,如下图测试类可以解释,只有当配置logback.xml配置文件的时候才会优先遵循配置文件

logback.xml日志配置文件如下图

mybatis.xml配置文件介绍

mybatis_config.xml文件里的environments default作用是可以通过改变值来自由切换数据库,值就是每个environment id里面的值,例如外部属性资源文件用的mybatis数据库,environment id=development,直接在mybatis_config.xml文件写的用的mybatis_test数据库,id=test,environments default可以通过改写值,来切换两个数据库的使用

mybatis_config.xml文件里的mapper标签详细解释

在引用外部属性资源文件配置mybatis时,对于mysql8.0的来说url在外部配置文件的写法和直接在mybatis.xml里面的写法有些区别,如下图花圈的部分要注意,还有直接用jdbc写的url和用外部属性资源文件的写法是一样的如下方第四章图

在Navicat创建数据库名为mybatis_test

怎么在mybatis.xml里面用外部属性资源文件

首先先创建资源文件(注意如果你的外部属性资源文件在resources下用的时候直接写文件名.properties就行了,如果它在resources的包下就得在前面先引用包名在写文件名.properties因为properties resource是在classpath下引用的也就是下下图的classes路径下)

你可以在mybatis.xml里面再声明一些内部属性和在db..properties里面引用的属性用法是一样的

settings标签的介绍和使用(注意settings标签必须要在properties标签下,挨着properties标签,如果没有properties标签,就默认放到第一位)

userColumnLabel属性是为sql语句中的属性设置别名默认是可以设置的,只有当写的sql语句中的属性和sql语句中的属性不一样的使用才设置别名,怎么设置如下下图

settings标签里的userColumLabel的解释如下图

settings标签里的defaultExecutorType,默认是SIMPLE就是每次执行都会重新执行sql语句,REUSE就是就检查一次sql语句,在执行就不会了

settings标签里的defaultStatementTimeout,设置超时时间,它决定数据库驱动等待数据库响应的秒数

settings标签里的mapUnderscoreToCamelCase(作用如下图)

settings标签里的jdbcTypeForNull作用是当往数据库插入数据某个数据值为null时映射到数据库的类型

settings标签里的logImpl这个属性的作用是当没有用SLF4J门面的时候并且有多个日志框架的时候我们就加入这个标签,当我们用了SL4J门面的时候就可以不用配置这个标签了

typeAliases标签,会将类的名字作为别名(忽略大小写)意思是package name包下的类在写入mapper的时候就写类名就行了不区分大小写,在类上写@Alias()注解就是给这个类起个别名,mybatis还有一些自带的别名如下下图resultType里面的string,long这些事自带的别名

mapper.xml里面的resultType是写入要返回的类型

plugins标签的作用:插件:可以把它理解成mybatis的拦截器,可以拦截4大对象,可以拦截SQL 给SQL去加一些公共的功能

databaseIdProvider标签是用于根据不同的数据库调用不同SQL,property中的name里面必须写数据库厂商的名字value名字可以随便起,怎么查看数据库厂商的名字,如下图在设置完sqlSessionFactory

后吸入下面两句代码就能在控制台上看见了,然后在mapper.xml里面用如下下下个图此时id可以相同因为一个是MySQL数据库一个是Oracle数据库,databaseId写入mybatis.xmldatabaseIdProvider标签下对应的value值

mapper.xml文件介绍和使用

mapper namespace的作用命名空间,一般 情况下一个mapper映射文件对应一个不同的命名空间,利于管理和维护 书写:默认情况下可以随意输入,但是如果使用接口绑定的方式就必须要输入对应的接口的完整限定名

下图主要介绍增加的方法(删除和修改同理是大致上是一模一样的就sql语句不一样),id只能是唯一的除非有不同的databaseId(例如mysql和oracle),parameterType设置参数类型,statementType设置参数是否自动解析,useGeneratedKeys和keyProperty一起用用于获取自动增长的数据怎么用如下下图,databaseId 用于配合databaseIdProvider 数据库厂商id 指定不同数据库下调用不同SQL上面详细介绍过,下下图VALUES里面的#号后的内容必须和java类中的属性名保持一致,`mybatis_test`.`emp`()括号里面的属性必须和数据库一致

打印emp类里的数据会有id的值如果不设置useGeneratedKeys和keyProperty,自动增长的数据将获取不到(注意keyProperty写的值必须和java中类的属性名保持一致如果数据库里的属性与有id但是java类中的id1后有个1,里面的值必须写id1)

如果有些数据库软件没有自动增长这个选项(如oracle),就需要用到selectKey标签,他里面的属性order为在执行增加sql语句前先执行,keyProerty为要接受的id属性值,resultType为下方sql语句运行出来的结果为int类型,(由于keyProerty取的属性名必须为和java类中的属性一致,而sql语句中的VALUE中的id属性也必须保持和java类中的属性一致,所以查询到的最大数id的值,会自动的传入到下方VAKUES中)

接口的返回值还可以返回bool(增删改)

面试题:


1. Mybatis都有哪些Executor执行器?它们之间的区
别是什么?


2. ORM是什么?


3. 为什么说Mybatis是半自动ORM映射工具?它与
全自动的区别在哪里?


4. Mybatis之Mapper接口的实现原理

标签:xml,配置文件,标签,数据库,mybatis,详解,MyBatis,id,属性
From: https://blog.csdn.net/kkkkkkkok/article/details/142216608

相关文章

  • C++三大特性——继承性(超万字详解)
    目录前言一、封装1.封装(Encapsulation)二、继承1.构造函数的调用顺序原理:2.析构函数的调用顺序原理:3、派生类的隐藏 1.成员函数隐藏2.成员变量隐藏3.基类函数的重载隐藏三、多重继承问题1.构造函数的调用顺序2.析构函数的调用顺序3.多重继承中的命名......
  • AC自动机详解,原理、优化分析,代码实现
    零、前言对于模式串匹配问题,在很多基础的数据结构课程中都有涉及到,如KMP算法,BM算法,Trie。但是给定文本串,我们有多个模式串要去查询。难道要多次调用KMP/BM,或者在Trie上多次查询吗?Aho和Corasick基于Trie,对KMP进行了推广,使得Trie可以在一个文本串中识别一个关......
  • 2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛) RC-u5 工作安排详解
    本文参考https://www.cnblogs.com/Kescholar/p/18306136这一题可能对高手来说就能轻而易举的看出是个01背包,但是对于我这种小白还是要经过详细的分析才可以理解。我们题目要求的是获得的最大报酬,题目的影响因素有三个:工作时长、工作截止时间、对应的报酬,那么怎么样合理的去......
  • ConcurrentLinkedQueue详解(图文并茂)
    前言ConcurrentLinkedQueue是基于链接节点的无界线程安全队列。此队列按照FIFO(先进先出)原则对元素进行排序。队列的头部是队列中存在时间最长的元素,而队列的尾部则是最近添加的元素。新的元素总是被插入到队列的尾部,而队列的获取操作(例如poll或peek)则是从队列头部开始。与传统的L......
  • ConcurrentLinkedQueue详解(图文并茂)
    前言ConcurrentLinkedQueue是基于链接节点的无界线程安全队列。此队列按照FIFO(先进先出)原则对元素进行排序。队列的头部是队列中存在时间最长的元素,而队列的尾部则是最近添加的元素。新的元素总是被插入到队列的尾部,而队列的获取操作(例如poll或peek)则是从队列头部开始。与传统的......
  • 综合靶场 DC-1 通关详解
    一、环境搭建:1、靶机描述DC-1是一个专门建立的脆弱实验室,目的是获得渗透测试领域的经验。它是为初学者设计的挑战,但它到底有多容易取决于你的技能和知识,以及你的学习能力。要成功完成这一挑战,您需要掌握Linux技能,熟悉Linux命令行,并具有基本渗透测试工具的经验,例如可以在Kali......
  • 详解HTTP/HTTPS协议
    HTTPHTTP协议全名为超文本传输协议。HTTP协议是应用层协议,其传输层协议采用TCP协议。请求—响应模型HTTP协议采用请求-响应模型,通常由客户端发起请求由服务端完成响应。资源存储在服务端,客户端通过请求服务端获取资源。 认识URL当我们访问网页时,浏览器扮演的就是客户端......
  • Mybatis相关知识总结
    目录1.什么是Mybatis?2.Mybatis所提供的功能?3.MyBatis的优缺点是什么?4.为什么说mybatis是半自动化orm映射工具?它与全自动的区别在哪里?5.Hibernate和Mybatis的区别?6.JDBC编程有哪些不足之处?Mybatis是如何解决这些问题的?7.Mybatis编程步骤是什么样的?【简化:见下】【详细:......
  • ANDROID手机如何在TERMUX安装kali nethunter详解
    TRMUX安装地址:https://f-droid.org/en/packages/com.termux如果这个不行可以在GITHUB获取:GitHub-termux/termux-app:Termux-aterminalemulatorapplicationforAndroidOSextendiblebyvarietyofpackages.Releases·termux/termux-app·GitHub安装好后打开就......
  • SQL Server 日期格式查询详解
    引言在SQLServer中,日期格式的查询和处理是数据库开发和管理过程中经常遇到的需求。无论是在数据过滤、排序还是数据分析中,日期都起着关键的作用。理解如何操作和格式化日期数据,不仅能够提升查询效率,还能够保证输出数据的准确性和一致性。本文将深入探讨SQLServer中日期格式查......