当前位置: 首页 > article >正文

MyBatis的配置文件详解

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接口的实现原理


http://www.kler.cn/a/308142.html

相关文章:

  • 什么时候需要复写hashcode()和compartTo方法
  • vue2+ element ui 集成pdfjs-dist
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • [ 网络安全介绍 5 ] 为什么要学习网络安全?
  • HarmonyOS SDK下的实践与探索
  • 网络远程操控
  • druid jdbc 执行 sql 输出 开销耗时
  • Linux下抓包分析Java应用程序HTTP接口调用:基于tcpdump与Wireshark的综合示例
  • 秒验HarmonyOS NEXT集成指南
  • ERP进销存管理系统的业务全流程 Axure高保真原型源文件分享
  • 仪表盘检测系统源码分享
  • Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的
  • 【运维监控】influxdb 2.0 + grafana 11 监控jmeter 5.6.3 性能指标(2)
  • Git进阶(十五):Git LFS 使用详解
  • Leetcode—740. 删除并获得点数【中等】(unordered_map+set+sort)
  • python提取pdf表格到excel:拆分、提取、合并
  • LLM - 理解 多模态大语言模型 (MLLM) 的预训练与相关技术 (三)
  • S-Procedure的基本形式及使用
  • 补题篇--codeforces
  • 安卓将本地日志上传到服务器
  • C语言 | Leetcode C语言题解之题409题最长回文串
  • 深入理解Appium定位策略与元素交互
  • 使用原生HTML的drag实现元素的拖拽
  • Linux C execv/execl函数调用 bash -c
  • 【疑难杂症2024-005】docker-compose中设置容器的ip为固定ip后,服务无法启动
  • supermap iclient3d for cesium中entity使用