代理开发
以下四点分别解释上述步骤
1.定义Mapper接口
定义SQL文件同名的接口,置于java目录下,并且定义一个Mapper包。
Maven项目要求Java文件与配置文件分开,所以就不置于同一目录下,置于resources目录下。
此处,我们需要代理成功的,是要置于一个目录之下。
注意:
我们的项目在编译之后是会生成一个classes的目录,目录下存放着包和配置文件,我们可以在resources目录下创建的包要和上面创建的Mapper包有一样的路径。
注意:
在创建该包名时,不要用.,例如com.xxx.xxx,
因为idea会认为这是整个的包名,而并不会指向Mapper目录,正确的创建方式为com/xxx/xxx。
这样,Mapper的映射文件和接口文件就在一个目录下了。
2.设置SQL文件的namespace属性
<mapper namespace="com.XXXX.mapper.UserMapper">
3.在Mapper接口中定义方法
- 方法名就是SQL映射文件中sql语句的id
- 并保持参数类型和返回值类型一致
List<User> selectAll();
返回值类型是user类型,要保持参数类型与返回值类型一致
<select id="selectAll" resultType="user">
用List进行接收,返回user集合对象
映射文件位置在config文件中替换一下,替换为UserMapper.xml的path。
<mapper resource="com/itheima/mapper/UserMapper.xml"/>
4.编码
//3. 执行sql
//List<User> users = sqlSession.selectList("test.selectAll");
//3.1 获取UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
- 此处不再调用sqlSession.selectList()方法,而是获取UserMapper接口的代理对象。
- 并且参数为UserMapper的类型。
- 最后调用接口中selectAll()方法,这个selectAll()就对应着SQL语句的id,从xml就可以找到该id,从而就有了SQL语句。
tip:
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
<package name="com.xxxx.mapper"/>