Mybatis Exception:
提示:org.apache.ibatis.exceptions.PersistenceException:
问题描述
提示:Error parsing SQL Mapper Configuration case: java.io.IOException: Could not find resource com/zwh/mapper/UserMapper.xml
public class test {
public static void main(String[] args) throws IOException {
//1.加载配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//3.使用工厂生产SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.使用SqlSession创建Dao接口代理对象
IUserDao userDao = (IUserDao) sqlSession.getMapper(User.class);
//5.使用代理对象执行方法
List<User> users = userDao.selectUserList();
for (User user:users){
System.out.println(user);
}
//6.释放资源
sqlSession.close();
inputStream.close();
}
}
原因分析:
提示:idea在resource目录第一创建文件夹时的小bug:
创建com.zwh.mapper时本是三个目录,结果变成一个目录的文件名
解决方案:
提示:
rm -rf com.zwh.mapper
mkdir -p ./com/zwh/mapper
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/zwh/mapper/UserMapper.xml"/><!--此路径读取不到原因如 ⬆️ 所述-->
</mappers>
</configuration>
问题描述
提示:Type class com.zwh.domain.User is not known to the MapperRegistry
小问题总是很致命,问题如图⬇️修改地方
public class test {
public static void main(String[] args) throws IOException {
//1.加载配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//3.使用工厂生产SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.使用SqlSession创建Dao接口代理对象
//IUserDao userDao = (IUserDao) sqlSession.getMapper(User.class);
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.selectUserList();
for (User user:users){
System.out.println(user);
}
//6.释放资源
sqlSession.close();
inputStream.close();
}
}