刚刚接触SSM框架,第一次接触到Maven项目,也是第一次使用IDEA,遇到很多问题。
一:关于Mybatis读取配置文件失败。
项目结构
依赖可以正常的下载,导包没问题,类调用也没问题
测试代码
错误
二:多次尝试无法解决后,不使用Mybatis连接数据库仍然失败
测试代码
错误
三:不使用jar包的程序是能正常跑的,似乎需要用到jar包的都无法正常运行,在编写阶段,编译器的代码提示,导包提示一切正常。点击运行,到编译阶段就似乎找不到相应的类
请教知道原因的小伙伴
你maven有问题吧,依赖没正确引入。
首先你这个不是SSM,没有Spring和SpringMVC的依赖,仅仅只有Mybatis和数据库连接依赖,但你这也不是Mybatis项目,因为你也没有使用Mybatis,你写的就仅仅是一个jdbc而已呀
jdbc工具类代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtil {
private static Properties prop = new Properties();
private static String className = null;
private static String url = null;
private static String username = null;
private static String pwd = null;
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
static {
//读取配置文件
InputStream stream = JDBCUtil.class.getResourceAsStream("/JDBCUtil.properties");
try {
prop.load(stream);
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("读取配置文件异常:"+e);
}
className = prop.getProperty("className");
url = prop.getProperty("url");
username = prop.getProperty("username");
pwd = prop.getProperty("pwd");
}
//获取连接
public static Connection getConn() {
if(tl.get()==null) {
Connection conn = null;
try {
//1.加载驱动
Class.forName(className);
//2.获取连接
conn =DriverManager.getConnection(url, username,pwd );
} catch (Exception e){
// TODO Auto-generated catch block
throw new RuntimeException("获取连接异常:"+e);
}
tl.set(conn);
}
return tl.get();
}
//关闭连接
public static void closeAll(Connection conn,PreparedStatement pstm,ResultSet rs) {
try {
if(rs!=null)
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException("结果集关闭异常:"+e);
}
try {
if(pstm!=null)
pstm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException("pstm关闭异常:"+e);
}
try {
if(conn!=null) {
conn.close();
tl.remove();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException("conn关闭异常:"+e);
}
}
}
JDBCUtil.properties
className =com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
username =root
pwd = root
如果你真正想使用mybaits的话,mybatis工具类如下
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 MybatisUtil {
public static SqlSessionFactory ssf =null;
static {
try {
InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
ssf = new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
//获取sqlsession的方法
public static SqlSession getSqlSession() {
SqlSession session = ssf.openSession();
return session;
}
//关闭sqlsession的方法
public static void closeSqlSession(SqlSession session) {
if(session!=null)
session.close();
}
}
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 数据库连接配置信息池
default:当前使用的连接配置
-->
<environments default="e1">
<!-- 数据库连接配置信息
id : 给当前配置起名字
-->
<environment id="e1">
<!-- 设置事务控制机制
type: JDBC 使用原始的自动控制事务机制
Managered 使用第三方插件控制事务
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据库连接配置
type : POOLED 使用数据库连接池 占内存,crud效率提高
UNPOOLED 不适用数据库连接池 不占内存,效率低
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value=" jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 映射dao的mapper文件-->
<mappers>
<mapper resource="dao/AccountDaoMapper.xml"/>
</mappers>
</configuration>
你的mysql是什么版本,很可能是驱动和版本没有对应上
maven构建问题,你可以查看target目录下的编译文件看有没有依赖包和配置文件