1. 程式人生 > >mybatis配置的常見錯誤

mybatis配置的常見錯誤

我們在開發的過程中,或者在做畢設時,會經常使用到mybatis,用其來與資料庫進行互動,我們寫好了configurationx.ml,如果引用該檔案呢?

引入配置檔案

  1. 匯入mybaits架包,如果有必要的話,可以匯入原始碼包
  2. 利用Resource.getResourceAsStream(“xonfiguration.xml”),將configuration.xml轉化為流檔案
  3. 利用SQLSessionFactoryBuilder.build()來建立SQLSessionFactory物件。
  4. 利用SQLSessionFactory.opsession(),來開啟一個會話,由此來建立對資料庫連線的Connection物件。
package com.zandc.util.conn;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DataBaseConnect
{
/** * 通過Resources.getResourceAsStream(configXml)獲取輸入流 * 將輸入流放進SqlSessionFactoryBuilder()物件的build方法中 * 通過工廠設計模式來建立SqlSessionFactory物件 * * @return */ private static SqlSessionFactory getSqlSessionfactory(){ String configXml="configuration.xml"; InputStream is=null
; try { is=Resources.getResourceAsStream(configXml); } catch (IOException e) { e.printStackTrace(); } return new SqlSessionFactoryBuilder().build(is); } /** * 通過私有方法getSqlSessionfactory()建立SQLSessionFactory物件 * * 呼叫openSession方法來開啟一個會話 * @return */ public static SqlSession getConnection(){ return getSqlSessionfactory().openSession(); } public static void main(String[] args) { System.out.println(getConnection()); } }

但在配置的過程中,會出現很多錯誤,因而,我們來探討mybatis常見的錯誤。

常見錯誤

錯誤一:mapper錯誤

    <mappers>
        <mapper resource="com/zandc/jiancom/model/entity/select_data.xml" />
        <mapper resource="com/zandc/jiancom/model/entity/insert_data.xml" />
        <mapper resource="com/zandc/jiancom/model/entity/delete_data.xml" />
        <mapper resource="com/zandc/jiancom/model/entity/update_data.xml" />
    </mappers>

這是對映對資料庫表操作的xml檔案,我們需要獲取的xml的完整路徑,而且xml的名字不能寫錯,比如我在com/zandc/jiancom/model/entity/路徑下的select_data.xml,如果我把select_data.xml寫成了sel_data.xml,那麼將configuration.xml載入到執行時,會檢索XML檔案,發現沒有com/zandc/jiancom/model/entity/select_data.xml路徑下的檔案,於是就報出了錯誤:

這裡寫圖片描述

錯誤二: 操作資料庫資料的xml檔案錯誤

1、沒有寫mapper

我們都知道當建立一個delete_data.xml檔案,必定有一個名稱空間,這是區分其他xml的檔案,如果我們把我們沒有寫能夠對映的XML檔案,也會報錯:

這裡寫圖片描述

2、沒有引入名稱空間

我們忘記引入名稱空間:
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
也會出現錯誤。

錯誤三:沒有正確配置DataSource

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />

            <dataSource type="POOLED">
                <property name="driver" value="${drive}" />
                <property name="ur" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

也就是說,我們應該配置DataSource,如果我們寫錯其中的一個配置,比如我們name=”url” 寫成name=”ur” ,getResourceAsStream(“configuration.xml”)時,解析到name這裡,發現沒有沒有name裡面沒有“ur”這個屬性,因而,就會報錯。

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: ur at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)

錯誤四:沒有引入架包

我們有時候發現,configuration.xml解析沒有問題,能夠通過SQLSessionFactory.openSession()開啟一個會話,但無法建立java.sql.Connection;包下的connection物件,這是為什麼呢?我們來看看這個錯誤:
Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException:
Error getting a new connection. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: ${drive}
Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: ${drive} at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) at org.apache.ibatis.session.defaults.DefaultSqlSession.getConnection(DefaultSqlSession.java:222)
通過分析報錯資訊可得,找不到這個驅動類,這也正對應了上面的分析,我們沒有匯入mysql架包,當然,諸如此類錯誤還有:
Unknown database ‘jiansou’:沒有正確配置資料庫
Cannot find class: ${drive}:這裡的引數名和db.properties不一致