Mapper代理开发

在Mybatis原生代码中,原生代码还是存在一些硬编码,使用Mapper代理开发可简化后期执行SQL。

​ 所以通过使用Mapper代理开发,会更加方便

image-20240329105537803

使用Mapper代理开发流程

  1. 定义与SQL映射文件同名的Mapper接口,将Mapper接口和SQL映射文件位置放在同一目录下

    • resources下创建与java目录下com.xxx.mapper一致
    • resources下创建时为com/xxx/mapper
    • image-20240329113449014
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

    image-20240329113827938

    image-20240329114012968

    • 这边推荐IDE中MybatisX插件 可用来快速跳转和探究是否已映射上
  3. 在Maooer接口中定义方法,方法名为SQL映射文件中sql语句的ID,并保持参数类型和返回值一致

    • 在Mapper接口中需要创建与SQLID同名的方法image-20240329125042549

      • 获取userMapper接口的代理对象image-20240329130823652
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class MybatisDemo2 {
    public static void main(String[] args) throws IOException {
    // 1.加载mybatis核心配置文件,获取SqlSessionFactory Mybatis官方网站有
    String resource = "mybatis-config.xml";//mybatis相对路径
    //获取inputStream通过Resources对象(资源加载类)getResourceAsStream(resource)将字符串传进来 返回一个字节输入流
    InputStream inputStream = Resources.getResourceAsStream(resource);
    //通过SqlSessionFactoryBuilder()对象的build()方法将流传进来返回SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 2.获取SqlSessionFactory对象 执行sql语句
    SqlSession session = sqlSessionFactory.openSession();

    // 3.获取userMapper接口的代理对象
    //session.getMapper(UserMapper.class);
    UserMapper userMapper = session.getMapper(UserMapper.class);
    List<User> userList = userMapper.selectAll();
    System.out.println(userList);

    // 4.释放资源
    session.close();

    }
    }
    • 注意 mybatis-config.xml中的映射路径 所以这种方式在后期Mapper文件多了之后会极其繁琐(UserMapper,OrderMapper,PhoneMapper)随着业务的增加image-20240329125158523
    • 所以后期多采用包扫描方式来进行扫描映射 所有Mapper映射都在/mapper文件夹下image-20240329130615459