我们知道在mybatis中,Mapper接口方法是不能被其他类重写的,而该接口就相当于。
接口:UserMapper.java
@Mapper
package cn.jxufe.web.mybatis;
public interface UserMapper {
public void insertUser(User user);
public User getUser(String name);
}
对应的映射文件:UserMapper.xml
<mapper namespace="cn.jxufe.web.mybatis.UserMapper">
<insert id="insertUser" parameterType="User">
insert into user(name,age) values(#{name},#{age})
</insert>
<select id="getUser" resultType="User" parameterType="java.lang.String">
select * from user where name=#{name}
</select>
</mapper>
其中:UserMapper.xml中每个标签中的id对应UserMapper接口中的方法。
那映射文件时如何根据对应的接口实现持久层中与数据库进行交互的呢?解析如下:
1.MapperRegistry
应用程序启动的时候就会创建这个类的实例,它有一个HashMap类型的属性用于存储每个Mapper接口(key)和相应的MapperProxyFactory(value);
另外有两个重要的方法getMapper()和addMapper(),分别用于获取和注册Mapper接口到这个HashMap中。
public <T> T getMapper(Class<T> type, SqlSession sqlSession)