这里写目录标题
引言
我们在开发的过程中,或者在做毕设时,会经常使用到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文件错误
没有写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不一致
总结
在技术的道路上,需要学会积累,这样才能走得更远。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99297.html