https://rnang0.github.io/2019/12/26/Mybatis的Mapper实现原理/
相信只要是使用过MyBatis开发的同学,都有使用其中的Mapper接口来开发,因为确实是很方便,方便到我们只需要编写接口而不需要写实现类,就能够完成对数据库的CRUD操作。
但是不知道大家有没有去思考过,如果我们真的只有Mapper接口的话,程序又是如何去完成实际的业务的呢?来看看下面的代码
cn.wolfcode.mybatis.mapper.UserMapper接口
public interface UserMapper {
void save(User u);
}
xml
<mappernamespace="cn.wolfcode.mybatis.mapper.UserMapper">
<insertid="save">
INSERT INTO user (id, username, password) VALUES (NULL, #{username}, #{password})
</insert>
</mapper>
java
publicvoidsave(User u)throws IOException{
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.save(u);
session.commit();
session.close();
}
从上面的代码中可以看出,我们只需要给MyBatis提供Mapper接口和与之匹配的映射文件,就能够让MyBatis按照我们的需求执行到对应的SQL
这里的实现原理就是我们前面所讲过的 动态代理,接下来我们看一波源码。