我们在开发的过程中,或者在做毕设时,会经常使用到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不一致