编译器:Maven Idea
Mybatis初学的时候遇到的错误如下:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may exist in org/spring/Mapper/UserMapper.xml### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource org/spring/Mapper/UserMapper.xml at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at MyBatis.MybatisTest.main(MybatisTest.java:20)
按照上面读取错误的原因是没有找到配置文件
我的文件目录是:
我的配置文件是:
<?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"> <!--xml配置文件对Mybatis系统的核心配置--> <configuration> <!--mybatis所用日志的具体实现--> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="mysql"> <!--环境配置,连接数据库--> <environment id="mysql"> <!--指定事务管理器,type=“JDBC”指直接简单使用了JDBC的提交和回滚设置--> <transactionManager type="JDBC"/> <!--dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--mappers告诉了mybatis去哪里找持久化类的映射文件--> <mappers> <mapper resource="org/spring/Mapper/UserMapper.xml"/> </mappers> </configuration>我的Mapper文件是:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace指用户自定义的命名空间 设置成包名加上sql文件映射名 --> <mapper namespace="org.spring.Mapper.UserMapper"> <!-- id="save"是唯一的标示符 --> <!-- parameterType属性指明插入时使用的参数类型 --> <!-- useGeneratedKeys="true"表示使用数据库的自动增长策略 --> <insert id="save" parameterType="org.spring.domain.User" useGeneratedKeys="true"> INSERT INTO TB_USER(name,sex,age) VALUES(#{name},#{sex},#{age}) </insert> </mapper>我的测试程序是:
package MyBatis; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.spring.domain.User; import java.io.IOException; import java.io.InputStream; public class MybatisTest { public static void main(String[] args) { //读取配置文件 try { InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml"); //创建SqlSessionFactory的实例 SqlSessionFactory sessionFactory= new SqlSessionFactoryBuilder().build(inputStream); //从工厂获取一个Session SqlSession session=sessionFactory.openSession(); //创建User实例 User user=new User("admin","男",23); //插入数据 session.insert("classes.Mapper.UserMapper.save",user); //提交事物 session.commit(); //关闭事物 session.close(); } catch (IOException e) { e.printStackTrace(); } } }错误原因:将Usermapper.xml文件放到src/java目录下,Idea编译不出在java下的xml文件,需要将xml文件放到resources目录下才行
修正后的目录结构:
