这是今天在学习Mybatis时遇到的错误,搞了一下午
最后晚上终于整出来了,错误就是因为映射文件中的id和selectOne中的参数写的不一致
造成这一异常的还有其他可能,搜了许多的博客,他们都是在说是因为Mybatis的配置文件中没有写映射文件
总之总算整完了,这MyBatis入门也太费事了吧orz。
更-----2020年10月5日17:37:53
为了不让自己上面的情况再次发生,下面还有一种方案
编写一个接口:
映射文件中(PersonMapper.xml):
接口中PersonMapper.java:
namespaces=接口的全类名(eclipse)[namespaces=接口名(idea)]
id =接口中的方法名
parameterType=方法中的参数类型
SQL语句中的参数=方法中的参数名
resultType=方法的返回值类型(若没有resultType时,返回值类型为void)
编写好后,测试代码也需要改
原来的代码:
Person person = session.selectOne("selectPersonByNo",2);
更改过后
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person = personMapper.selectPersonByNo(1);
//session.commit();
若要是进行增删改操作时需要进行session.commit操作。
映射文件代码PersonMapper.xml
<?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">
<mapper namespace="PersonMapper">
<select id="selectPersonByNo" parameterType="int" resultType="Person">
select * from person where no = #{no}
</select>
</mapper>
Mybatis的配置文件Mybatis.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>
<environments default="development">
<environment id="development">
<!--事务提交的方式
JDBC:利用JDBC方式处理事务(commit,rollback,close)
MANAGED:将事务交由其他组件去-->
<transactionManager type="JDBC"/>
<!--数据源类型:
UNPOOLED:传统的JDBC模式(每次访问数据库,均需要打开,关闭数据库)
POOLED:使用数据库连接池
JNDI:从tomcat中获取一个内置的数据库连接池
-->
<dataSource type="POOLED">
<!-- 配置数据库信息-->
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"/>
<property name="username" value="scott"/>
<property name="password" value="686900"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射文件-->
<mapper resource="PersonMapper.xml"/>
</mappers>
</configuration>
接口PersonMapper.java代码
public interface PersonMapper {
Person selectPersonByNo(int no);
}
测试代码:
public static void selectPersonByNo()throws IOException {
//加载Mybatis配置文件,为了访问数据库
Reader reader = Resources.getResourceAsReader("Mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//这里的session相当于当时jdbc的connection
SqlSession session = sqlSessionFactory.openSession();
// Person person = session.selectOne("selectPersonByNo",2);
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person = personMapper.selectPersonByNo(1);
System.out.println(person);
session.close();
}