學習使用mybatis框架初遇異常

weixin_45474989發表於2020-09-25

初學mybatis框架時遇到的異常PersistenceException

異常情況:
Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException:
Error building SqlSession.
The error may exist in SQL Mapper Configuration Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: validationQuery

異常資訊圖
當時遇到這個問題,只百度了“org.apache.ibatis.exceptions.PersistenceException”,“Error building SqlSession”,“org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: validationQuery”這幾個問題的解決辦法,無果,故只能自己找出錯誤。
最終注意到關鍵詞“validationQuery”,這個詞語曾在我的上一篇部落格中出現(當初是為了建立druid連線池時需要寫druid.properties),也在這個mybatis的總配置檔案中出現。

<?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">
<!-- mybatis的主配置檔案 -->
<configuration>
    <!-- 配置環境 -->
    <environments default="mysql">
        <!-- 配置mysql的環境-->
        <environment id="mysql">
            <!-- 配置事務的型別-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置資料來源(連線池) -->
            <dataSource type="POOLED">
                <!-- 配置連線資料庫的4個基本資訊 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--jdbc:mysql://localhost:3306/travel?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC-->
                <property name="url" value="jdbc:mysql://localhost:3306/database?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="xxxx"/>
                <property name="characterEncoding" value="utf-8"/>
                <property name="initialSize" value="5"/>
                <property name="maxActive" value="10"/>
                <property name="maxWait" value="3000"/>
                <property name="validationQuery" value="SELECT 1"/>
                <property name="testWhileIdle" value="true"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定對映配置檔案的位置,對映配置檔案指的是每個dao獨立的配置檔案 -->
    <mappers>
        <mapper resource="Dao.xml"/>
    </mappers>
</configuration>

於是把它刪掉,後發現以下這幾個都會丟擲異常,故在使用過程中需要把他們刪除才不會丟擲異常。

<property name="characterEncoding" value="utf-8"/>
                <property name="initialSize" value="5"/>
                <property name="maxActive" value="10"/>
                <property name="maxWait" value="3000"/>
                <property name="validationQuery" value="SELECT 1"/>
                <property name="testWhileIdle" value="true"/>

究其原因,發現問題的出現是由於配置dataSource中的一個標籤,在該標籤下,應該是隻能放入配置資料庫的基本連線資訊{driver,url,username,password}。
<!-- 配置資料來源(連線池) --> <dataSource type="POOLED">......<dataSource>

(以上配置是mysql8.0.21的資料庫連線方式如有錯誤,可留言指正~)

相關文章