zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mybatis配置的常见错误 org.apache.ibatis.exceptions.PersistenceException Unknown database Cannot find class

DatabaseApache错误配置mybatis 常见 Cannot Class
2023-09-27 14:25:29 时间

引言

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

没有写mapper

我们都知道当创建一个delete_data.xml文件,必定有一个命名空间,这是区分其他xml的文件,如果我们把我们没有写能够映射的XML文件,也会报错:

这里写图片描述

没有引入命名空间

我们忘记引入命名空间:

<!DOCTYPE mapper  
  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不一致

总结

在技术的道路上,需要学会积累,这样才能走得更远。