系列四、全局配置文件mybatis-config.xml

一、全局配置文件中的属性

mybatis全局配置中的文件非常多,主要有如下几个:

  • properties(属性)
  • settings(全局配置参数)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境集合属性对象)
  • environment(环境集合属性子对象)
  • transactionManager(事务管理器)
  • dataSource(数据源)
  • mappers(映射器)

1.1、properties

properties可以用来引入一个外部配置,最常见的例子就是引入数据库的基本配置信息,例如在resources目录新建了一个db.properties文件,内容如下:

复制代码
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/20231101_mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
db.username=root
db.password=123456

mybatis-config可配置为如下:

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 引入外部的配置文件 -->
    <properties resource="db.properties"></properties>

    <environments default="deployment">
        <environment id="deployment">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <!--
                    # yml中的写法,xml中要把&转换为 &amp;
                    driver: jdbc:mysql://localhost:3306/20231101_mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
                -->
                <!--
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/20231101_mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
                -->

                <!-- 读取外部配置文件中的信息进行注入 -->
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--
        配置mapper的位置
        注意事项:
            如果xxxMapper.xml是在resources目录配置的,那么需要创建和src中mapper同名的Directory才行,否则的话就会报
            "org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误"
            (1)如果xxxMapper.xml文件和xxxMapper在同一个目录,需要配置为package方式,并且修改pom.xml的配置信息
            (2)如果xxxMapper.xml文件想单独配置在resources目录,如将其放在resources/mappers目录,可以使用mapper的方式
    -->
    <mappers>
        <!---->
        <package name="org.star.mapper"/>
        <!--<mapper resource="mappers/UserMapper.xml"></mapper>-->
    </mappers>

</configuration>

1.2、settings

1.3、typeAliases

XML 复制代码
<typeAliases>
	<!--
		批量起别名:此处配置的是为 org.star.entity.model 包下的所有持久层类起别名
		起别名规则:首字母小写,例如UserDO的别名是userDO,这样配置的话在xxxMapper.xml中的返回值就不用写类的完整路径了
	-->
	<package name="org.star.entity.model"/>
</typeAliases>

1.4、typeHandlers

八种基本数据类型的增删改查之所以能够处理成功,就是因为有上边的各种类型的默认处理器,这些处理器处理基本数据类型够用了,但是要是处理特殊类型就需要我们自定义类型处理器了,比如User有一个爱好字段,类型为 private List<String> interests; 在数据库中对应的类型为varchar,那么这种情况下就需要我们自定义类型处理器了,这个自定义的类型处理器需要满足如下功能:

(1)数据存储时,自动地将List集合转换为字符串(格式自定义);

(2)数据查询时,将查询到的字符串在转换为List集合;

1.5、mappers

xxxMapper.xml配置位置的几种写法:

XML 复制代码
<mappers>
	<!-- 方式一: -->
	<!--<mapper resource="mappers/UserMapper.xml"></mapper>-->
	
	<!--方式二:使用绝对路径,不推荐-->
	<!--<mapper url="D:\augenstemn@gitee\mybatis-parent\mybatis\src\main\java\org\star\mapper\UserMapper.xml"></mapper>-->
	
	<!-- 
		方式三:使用mapper接口路径
		注意事项:此种方式要求mapper接口和映射文件的名称相同,且放在同一个目录中 
	-->
	<!--<mapper class="org/star/mapper/UserMapper.xml"></mapper>-->
	
	<!-- 
		方式四:注册指定包下的所有mapper接口
		注意事项:此种方式要求mapper接口和映射文件的名称相同,且放在同一个目录中 
		实际项目中多采用此种方式,推荐 
	-->
	<package name="org.star.mapper"/>
</mappers>
相关推荐
如意猴24 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i27 分钟前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
可乐鸡翅yeah_34 分钟前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
旋生万物1 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
沫璃染墨1 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
写后端的胖头鱼1 小时前
【高频面试题】FullText 全文索引(MySQL)
数据库·mysql·索引·全文索引
时间的拾荒人1 小时前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
专业程序开发源1 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
用户094248568031 小时前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
wuminyu1 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++