基本使用方式,它也存在硬编码的问题,如下:
List<User> users = sqlSession.selectList("test.selectAll");
这里调用 selectList()
方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用 Mapper 代理方式(如下图)则不存在硬编码问题。
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
通过上面的描述可以看出 Mapper 代理方式的目的:
-
解决原生方式中的硬编码
-
简化后期执行SQL
通过SqlSession的getMapper方法获取Mapper接口的代理对象UserMapper, 就可以找到UserMapper的接口,然后又可以找到对应同名的映射文件,然后找到sql语句,这样不会解决原生方式中的硬编码和简化后期执行SQL