插件properties_Mybatis3系列 - 4. mybatis-config的properties属性详解

前两章简单的讲解了MyBatis的使用方式. 接下来先全局的说一下MyBatis的全局的xml配置详细说明.

XML格式定义

-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">

configuration 的映射文件(根据定义顺序说明)

  • properties 属性
  • settings 设置
  • typeAliases 类型别名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • objectWrapperFactory MyBatis对基本类型, 基本对象map和集合的封装.
  • reflectorFactory 反射模块工厂
  • plugins 插件
  • environments 环境配置
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器

properties 属性

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,也可通过 properties 元素的子元素来传递。例如:

properties中的 resource 是根据项目查找, 所以config.properties 所在目录如下图所示:

b247345314e908ba3a190c30f93e6879.png

引用的config.properties内容如下:

29ac41feba3ee66dd6c15ff739ff3501.png

这里使用组合使用的方式主要是为了能够演示properties的使用方式, 在真正使用的时候, 直接引入config.properties就可以了. 这样在真正的和Spring做搭建的时候提供了便利.

在MyBatis的config中使用方式如下图:

f82c2f6eae85a6559b4d6ff37633cc2e.png

测试代码(UserMapperTest):

d459d8735a2a4a988dbf0569af512ad4.png

测试通过:

bca82df62e1b82fe5eb74dcf54129979.png

需要注意配置的加载顺序, 按照以下来加载。

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。也就是Java代码配置的方式。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值。使用范例如下:

这个特性默认是关闭的。如果你想为占位符指定一个默认值, 你应该添加一个指定的属性来开启这个特性。例如:

创建对应的配置文件(config.properties)和 dot-mybatis-config.xml 代码如下:

919e0332a896933217d2fdc0f440320f.png

编写测试程序(DotUserMapperTest), 代码如下:

e70ec3cfdc5629dbc8e4444513a40d89.png

准备测试, 测试通过。

83d85f97f713258effb47baa892e3663.png

就是你要的效果。 可以尝试输入一些错误的配置, 看一下效果。

注意:因为“:”是允许设置成name值得, 所以想开启上面的配置, 就需要修改默认的分隔符。

使用的时候就需要使用, 这里的db:username是一个property的name值

  

案例说明:

这里如果使用了db:username为name值, 就会出现如下的错误信息:

808d9d2bad35d6f1c0c63845f4f73895.png

从错误信息看, 应该是使用默认的“:”进行分割的。 模拟代码就是通过字符匹配到第一个“:”, 然后截取对应的字符串。源码如下:

0c275d93f9a647d2bbba7aa8a6586757.png

所以我们就需要配置自定义的分隔符(separator-mybatis-config.xml)。

1263ab0dd7b8cb945fcba2eaf8e59ac3.png

测试代码(SeparatorUserMapperTest):

ee335a390c040dab1636d8d31e15e2f1.png

测试结果为, 测试成功

ddbd7cfd16b0ba8c766a75382394f5ca.png

这里给点建议, 把上面的例子都自己动手做一边, 多修改修改数据,不用管对错, 先运行起来看看, 这样你除了能够看到如何正确配置之外,也能看到配置错误之后, 错误的信息是什么。 看的错误多了, 你也就成了别人眼里能够解决问题的大牛了。 你想成为大牛吗?

关注我, 感谢感谢。

全部代码已经上传到Github

GitHub地址: https://github.com/xymiao/mybatis3

本篇代码地址: https://github.com/xymiao/mybatis3/tree/master/mybatis3_03_mybatis_config_properties

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

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

相关文章

【Redis 6】秒杀业务——分布式锁

各位小伙伴们大家好,欢迎来到这个小扎扎的Redis 6专栏,在这个系列专栏中我对B站黑马的Redis教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Redis知识点速览&#…

【Swagger】看这一篇就够了

各位小伙伴们大家好,欢迎跟着小扎扎一起学习【Swagger】这门技术,在本片博客中我对B站狂神的Swagger教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Swagger知识点…

用python画大雄_python制作斗图生成器

网上各种带文字的表情图片都被大家玩坏了,今天就和大家一起用 python 亲自做一个带字表情图片生成器。 不知道大家有没有看到网上有很多人都在说 "人生苦短,我用 python",这句话我之前也不是很理解,觉得人生苦短和用pyt…

【spring cloud】(一)使用idea创建可相互调用的多模块应用

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡spr…

python字符串百分号_Python字符串格式化的2种方法

本文介绍了Python字符串格式化,主要有两种方法,分享给大家,具体如下 用于字符串的拼接,性能更优。 字符串格式化有两种方式:百分号方式、format方式。 百分号方式比较老,而format方式是比较先进的&#xff…

【踩坑,已解决】spring cloud删除子模块后创建同名模块时遇到的删除不净,java、resources包失效,java、resources包被标记为模块等问题

💡问题速览📌 问题复现📌 没有任何操作,model又出现了📌 模块重建后java、resources包失效📌 模块重建后java、resources包被标记为了模块📌 问题复现 本人是在跟着B站尚硅谷的视频练习Spring c…

蓝牙扫描过程解析_智慧定位系统之蓝牙网关在室内定位技术的原理浅析-新导智能...

蓝牙室内定位技术是利用在室内安装的若干个蓝牙局域网接入点,把网络维持成根据多用户的基础网络连接形式,并确保蓝牙局域网接入点始终是这个微网的主设备,然后经过丈量信号强度对新加入的盲节点进行三角定位。苏州新导实时定位体系(RTLS)和室…

【spring cloud】(二)服务的注册发现——Eureka

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡spr…

新手攻略熔炉_我的世界攻略:生存模式新手攻略

《我的世界》(英文:《minecraft》)是一款风靡全球的高自由度沙盒游戏,由瑞典MojangAB和4J Studios开发。国际版由微软Mojang工作室开发,中国版由网易代理。Minecraft着重于让玩家去探索、交互,并且改变一个由一立方米大小的方块动态生成的地图…

【spring cloud】(三)服务调用——Ribbon、OpenFeign

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡服务…

c语言斐波那契数列_剑指Offer-10-I.斐波那契数列

题目题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) 0, F(1) 1F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数…

mysql 导入 mssql_MySQL(csv,text)导入mssql使用方法

MySQL(csv,text)导入mssql是非常的简单了但是在导入过程中会碰到text字段问题了,下面我们就来看一篇关于MySQL(csv,text)导入mssql使用方法吧,具体的操作细节如下所示。分两步处理,第一步是将csv导入到mysql。没有使用mssql自带客户端的导入功…

c# mvvm模式获取当前窗口_AWTK-MVVM 介绍

MVVM(Model-View-ViewModel)介绍8.1 分离用户界面和业务逻辑在开发应用程序时,要把用户界面和业务逻辑分离开来,这是每个程序员都知道的常识。分离用户界面和业务逻辑有几个重要的好处:有利于隔离变化。用户界面是最容易变化的,易…

【spring cloud】(三)服务降级——Hystrix

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡服务…

mysql高级查询教程_MYSQL高级查询

实际开发中,经常需要对某些数据进行统计,比如,统计某个字段的最大值、最小值、平均值等。MySQL中,提供了一些函数来实现这些功能聚合函数COUNT()——返回某列的行数SUM()——返回某列值的和AVG()——返回某列的平均值MAX()——返回…

【dubbo】(一) dubbo是什么?

各位小伙伴们大家好,欢迎来到这个小扎扎的dubbo专栏,在这个系列专栏中我对B站尚硅谷雷神的dubbo教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡dubbo知识点速览&a…

axios安装_Vue脚手架安装,与基本语法(干货)

首先,这篇Vue文章是为了下一篇我整合springbootvue前后分离的小demo,这两天整理好会上传哈哈1. Node.js安装1.1 下载安装在node.js 官网下载, 根据自己电脑系统安装,一直点下一步即可1.2 测试安装是否成功WindowsR打开cmd窗口&…

base64 能放数组里面么_数组:总结篇

我们做个总结吧数组理论基础数组是非常基础的数据结构,在面试中,考察数组的题目一般在思维上都不难,主要是考察对代码的掌控能力也就是说,想法很简单,但实现起来 可能就不是那么回事了。首先要知道数组在内存中的存储方…

xampp mysql 卸载_卸载Xampp并安装apache + mysql + php 过程

首先是卸载xampp,打开xampp-control.exe 控制面板,停止apache和mysql服务。如果你是安装版xampp,可以到如果不是则安装如下方法。停止服务之后。就需要卸载服务。打开cmd,用sc.exe这个Windows命令开始——运行——cmd.exe&#xf…

nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出

虽然把JSON数据存入mysql也是比较蛋疼,但是相比使用Nodejs嵌套处理多个mysql查询并拼接返回数据也算是没mongo时的一个折中方案了。我使用python拼接了一个json格式的字符串,却遇到了一些问题1,如果把json数据转成str存入,那么nod…