MyBatis的配置文件详解

news2024/9/20 23:55:14

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.coloradmin.cn/o/2142755.html

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

相关文章

python绘制月亮

import matplotlib import matplotlib.pyplot as plt import moviepy.editor as mpymatplotlib.rcParams[font.family] SimHei# 坐标列表 positions [(0, 0), (1 / 4, 1 / 4), (1 / 3, 1 / 4), (1 / 2, 1 / 4), (2 / 3, 1 / 4),(3 / 4, 1 / 4), (1, 1 / 4), (5 / 4, 1 / 4), …

C++中的容器——vector

1. vector的介绍 vector:vector的底层实际上就是一个数组(也称为顺序表),数据是连续存储在数组中的,因此vector是可以使用下标来进行访问的,但是它的大小并不是像数组一样是固定的,而是可以动态…

漳州自闭症寄宿学校,孩子的快乐学习乐园

在温暖而包容的南方都市——广州,藏着一所特别的学校,它以爱为名,为自闭症儿童编织了一个充满希望的未来,这就是星贝育园自闭症儿童寄宿制学校。这里,不仅是知识的殿堂,更是孩子们心灵得以自由飞翔、快乐学…

削峰+限流:秒杀场景下的高并发写请求解决方案

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 哈喽,大家好!我是小米,一个29岁、活泼积极、热衷分享技术的码农。今天和大家聊一聊应对高并发的写请求这个主题,尤其是在大促、秒杀这种场景下,系统…

【Docker Nexus3】maven 私库

1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…

微服务_入门2

文章目录 一、Feign二、Gateway服务网关 一、Feign 来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一(url需要自己在代码中拼写出来)参数复杂URL难以维护&#xff0…

Weapons Armor PBR Pack 1 - Fantasy RPG 武器护甲游戏模型

武器和护甲包#1有30个武器和护甲,每个对象都有默认外观,大多数都有网格变形和Substance Painter源文件,用于自定义纹理。 无限PBR&我的哲学 Infinity PBR是十几位艺术家的作品,他们都在做自己最擅长的事情。我想为独立游戏开发者制作最通用、最优质的资产,按照我希望的…

鸿蒙开发之ArkUI 界面篇 四

文字溢出处理、省略号、文字太长的处理用textOverflow,语法格式是: Text.textOverflow({ overflow: TextOverflow; }) 尤其注意,单独的这个设置没有效果,需要和maxLines一起使用才有效果 Text("男频男频男频男频男频男频男…

好代码网同款wordpress主题,完全开源无加密可二开

这个其实就是好代码网站的早期整站打包代码,当时售价198的,现在里面的部分数据已经过期了,只能展示效果,没法下载。所以就只当做主题分享给大家使用。 资源下载类网站目前还是红利期,搞个特价主机和域名,再…

代码随想录Day 46|动态规划完结,leetcode题目:647. 回文子串、516.最长回文子序列

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一:647. 回文子串解题思路:暴力解法动态规划 题目二: 516.最长回文子序列解题思路: 动态规划总结动规五部曲基础概念常见问题类型 动态规划…

算法设计与分析(循环赛日程表

目录 循环赛日程表算法介绍代码实现注意事项 小结: 循环赛日程表 在组织和安排体育赛事时,循环赛日程表的编制是一项重要且复杂的任务。循环赛,即每个参赛队伍都要与其他所有队伍进行一场比赛,确保比赛的公平性和所有队伍之间的平…

Linux下的CAN通讯

CAN总线 CAN总线简介 CAN&#xff08;Controller Area Network&#xff09;总线是一种多主从式 <font color red>异步半双工串行 </font> 通信总线&#xff0c;它最早由Bosch公司开发&#xff0c;用于汽车电子系统。CAN总线具有以下特点&#xff1a; 多主从式&a…

JAVA基础面试题总结(十五)——设计模式

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

面向对象程序设计(C++)———多态

1.认识多态 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态)。编译时 多态(静态多态)主要就是我们…

一分钟掌握 Excel VBA 技巧,轻松批量生成工资条,提高工作效率!

可能大家忽视了一点&#xff0c;Excel是我们日常办公中使用最多的工具&#xff0c;所以&#xff0c;学好Excel并加以运用&#xff0c;一定能提升你的工作效率&#xff0c;比如Excel VBA可以用代码实现自动化办公&#xff0c;下面举一个Excel VBA批量生成工资条的办公小案例。 …

swagger新玩法 - 让你API接口开发原地起飞

作为Java后台接口开发人员&#xff0c;无论对对接方是前端还是第三方&#xff0c;很多时候我们在文档和代码两头都需要费心&#xff0c;而做到自动的同步将会非常省心。本教程将带你领略下如何借助swagger官方提供的新玩法&#xff0c;让你的API接口开发原地起飞&#xff0c;甚…

34.贪心算法1

0.贪心算法 1.柠檬水找零&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int x : bills) {if (x 5) // 5 元&#xff1a;直接收下…

4. Python之运算符

一. Python运算符 常用的运算符有&#xff1a;算述运算符&#xff0c;赋值运算符&#xff0c;比较运算述&#xff0c;逻辑运算符&#xff0c;位运算符等等。 1. 算述运算符 用于处理四则运算的符号&#xff0c;主要有&#xff1a; 运算符描述加法-减法*乘法/除法//整除%取余…

嵌入式DCMI摄像头功能调试方法

STM32F407芯片带有DCMI接口,在我们的核心板上已经将接口用18PIN的FPC座子引出。 这个接口可以接我们的OV2640接口。 本节我们开始调试摄像头。 16.1. DCMI DCMI接口是ST自己定义的接口。 Digital camera interface (DCMI),是意法半导体公司产品STM32F4xx系列芯片的快速摄像头…

【JavaEE初阶】多线程(5 单例模式 \ 阻塞队列)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 实例1: 单例模式 饿汉模式 懒汉模式 实例2:阻塞队列 生产者消费者模型 优点 ​编辑 代价 简单实现一个生产者消费者模型 Java标准库中的阻塞队列 ​编辑 模拟实现一…