mybatis中 MAPPER接口中定义的接口方法是如何实现的?
1、PersonMapper.java 文件内容如下:
<?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指用户自定义的命名空间。 -->
<mapper namespace="org.fkit.mapper.PersonMapper">
<!-- 根据id查询Person,返回resultMap -->
<select id="selectPersonById" parameterType="int" resultMap="personMapper">
SELECT * from tb_person where id = #{id}
</select>
<!-- 映射Peson对象的resultMap -->
<resultMap type="org.fkit.domain.Person" id="personMapper">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
</resultMap>
</mapper>
2、PersonMapper.java 文件内容如下:
package org.fkit.mapper;
import org.fkit.domain.Person;
public interface PersonMapper
{
Person selectPersonById(Integer id);
}
3、OneToOneTest.java 文件内容如下:
package org.fkit.test;
public class OneToOneTest {
public static void main(String[] args) throws Exception {
// 读取mybatis-config.xml文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 初始化mybatis,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例
SqlSession session = sqlSessionFactory.openSession();
PersonMapper pm = session.getMapper(PersonMapper.class);
// 直接调用接口的方法,查询id为1的Peson数据
Person p = pm.selectPersonById(1);
}
}
请问:
1、 Person p = pm.selectPersonById(1) 这个用法中 PersonMapper.java 类中只声明了 selectPersonById 方法 但是没有定义 selectPersonById 呀。它是如何实现的,请讲解一下原理。
2、PersonMapper pm = session.getMapper(PersonMapper.class) 这是一种什么用法,请讲解一下。