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不一致

猜你喜欢

转载自blog.csdn.net/lvoelife/article/details/78723285