MyBatis学习-(八)数据库外部属性配置文件

本文最后更新于:January 24, 2022 pm

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

目录

MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html

将数据库的主要内容,通过一个单独的文件进行读取。

步骤

    1. 在resources目录中,创建properties文件。
    1. 在上述文件中用key=value形式配置数据库信息。
    1. 在mybatis的主配置文件中,使用property标签引用外部的属性配置文件。
    1. 在对应位置使用${key}形式获取value值。

示例

  • mysql.properties
1
2
3
4
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/link?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT
mysql.username=root
mysql.password=loong461
  • mybatis的主配置文件:mybatis.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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="mysql.properties" />
<!-- 日志 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!-- <typeAlias type="com.tothefor.Study1.entity.Person" alias="pp"></typeAlias>-->
<package name="com.tothefor.Study1.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/tothefor/Study1/dao/PersonDao.xml"/>
</mappers>
</configuration>

报错处理

1
2
3
4
5
6
### Error querying database.  Cause: java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=UTC'.
### The error may exist in com/tothefor/Study1/dao/PersonDao.xml
### The error may involve com.tothefor.Study1.dao.PersonDao.queryPersonByWhere
### The error occurred while executing a query
### Cause: java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';serverTimezone=UTC'.

这是我将原本的数据库信息配置改为现在的外部引入方式时报的错。

我原本的为:

1
mysql.url=jdbc:mysql://localhost:3306/link?useSSL=false&amp;serverTimezone=UTC

然后改为:

1
mysql.url=jdbc:mysql://localhost:3306/link?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT

就可以正常运行。

但是,在我复制上面这个代码时,发现了我之前的代码的错误错在了哪里。

改后,使用下面的也可以正常运行:

1
mysql.url=jdbc:mysql://localhost:3306/link?useSSL=false&serverTimezone=UTC

可以发现,这一句和我原本的区别就在于那个&符号的不同写法。在mybatis的主配置文件中使用的是&amp;,在外部属性文件中用的是&。这是因为主配置文件是xml的,而外部属性文件不是。