Mybatis-Mapper代理开发
之前的问题
之前Mybatis的快速入门案列中
获取完sqlSession对象后
List<User> users = sqlSession.selectList("test.selectAll");
我们用这个代码来执行
其实这个也属于硬编码-用的是我们使用xml文件中的
命名空间(namespace)+指令(id)的形式
字符串的形式,不会自动补全
so我们用一种新的方式-Mapper代理开发
<mapper namespace="test">
<!--statement-->
<!-- id是指令的唯一标识,returnType是返回类型(对应JavaBean类)-->
<select id="selectAll" resultType="com.itheima.pojo.User">
select *
from tb_user;
</select>
</mapper>
Mapper代理开发
学习目标
案列
目录和接口创建
1.我们的sql映射文件叫:UserMapper
创建一个同名接口
放在同一目录
为了方便统一管理sql映射文件一般是不放到java包里的
so我们需要在resource里面创建一个和我们接口同名的目录
注意:在resource只能创建目录所以要这样写
然后把我们的sql映射文件拖入这个文件夹
编译的时候他们就会在同一目录下(和UserMapper接口)
如图
namespace的修改
注意改成全路径
原名test改为从com开始的接口名
com.itheima.mapper.UserMapper
Mapper接口中定义方法
在Mapper接口中定义方法
方法名和SQL映射文件的id一致
参数类型和返回类型也要一致
注意这里的到底是返回什么
查询多个是返回一个列表
查询一个的话User就够了
编码
//3.1获取对应UserMapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
System.out.println(users);
流程
通过创建的sqlSession获取Mapper代理对象
通过代理对象找到对应的接口(UserMappper)
然后因为同目录下有一个同名的映射文件
我们调用方法selectAll,对应的mapper对象
会找到xml(sql映射)文件的对应的唯一id
获取对应语句
加载sql映射文件细节
如图
可以从上面的编程下面的Mapper代理方式