mybatis配置的常見錯誤
我們在開發的過程中,或者在做畢設時,會經常使用到mybatis,用其來與資料庫進行互動,我們寫好了configurationx.ml,如果引用該檔案呢?
引入配置檔案
- 匯入mybaits架包,如果有必要的話,可以匯入原始碼包
- 利用Resource.getResourceAsStream(“xonfiguration.xml”),將configuration.xml轉化為流檔案
- 利用SQLSessionFactoryBuilder.build()來建立SQLSessionFactory物件。
- 利用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不一致