文章目录

  • 一、前言
  • 二、Mapper代理要求及配置
  • 1.概述
  • 2.新建目录
  • 3.移动文件
  • 4.修改mybatis-config.xml文件
  • 5.检验
  • 6.编写Mapper接口文件
  • 三、实例(查询表内数据)


一、前言

在前面使用MyBatis优化了JDBC代码以后,仍然存在着一些问题,比如下面这两行代码也存在着硬编码问题,这里调用 selectList() 方法传递的参数是映射配置文件中namespace.id值,这样写也不便于后期的维护,所以要使用Mapper代理来解决问题,并简化代码

//执行SQL
        List<User> user = sqlSession.selectList("test.selectALL");

        //打印结果
        System.out.println(user);


二、Mapper代理要求及配置

1.概述

使用Mapper代理方式,必须满足以下要求:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

2.新建目录

由于我们会把配置文件单独放在一个文件夹中,又想要把Mapper的配置文件(UserMapper.xml)和接口文件(UserMapper)放在一起,所以要保证其目录相同,由于是新建目录,所以要写成com/itheima/mapper才能创建,但在IDEA中显示的还是com.itheima.mapper便于查看是否在同一目录下

java中mapper类型 mapper java_配置文件

3.移动文件

这里直接选中我们要移动的Mapper的配置文件(UserMapper.xml)移动到刚刚新建好的目录下即可,直接摁回车确认就可以了

java中mapper类型 mapper java_配置文件_02

4.修改mybatis-config.xml文件

这里我们要把namespace改一下,设置SQL映射文件的namespace属性为Mapper接口全限定名,这里要注意不需要写根路径,只要写在这个项目中哪个包下的即可

<mapper namespace="com.itheima.mapper.UserMapper">

5.检验

在这里只需要compile一下项目,然后再去查看生成的Mapper的配置文件(UserMapper.xml)和接口文件(UserMapper)是否在一个目录下MyBatisDemo\target\classes\com\itheima\mapper注意是在target目录下的mapper文件夹中,具体效果如下图所示

java中mapper类型 mapper java_java中mapper类型_03

6.编写Mapper接口文件

  • 接口命名一般为表的名字+Mapper ,所以这里接口的名字命名为UserMapper
  • 接口文件一般存放在mapper包下,即域名下再新建一个包,因此在新建的时候可以选中Java包,右键新建Java类,并输入com.itheima.mapper.UserMapper
  • 语句的含义为:将SQL语句执行完毕后查询到的结果封装到一个集合中,集合的名字应该与我们新建的实体类(类中的成员属性与表中字段一致)
package com.itheima.mapper;

import com.itheima.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> selectALL();
}

三、实例(查询表内数据)

这里与前面不同的是执行SQL语句可以省略,取而代之的是获取UserMapper接口代理对象,如果不知道左边写什么,可以直接使用快捷键Ctrl+Alt+V快速生成左边,然后再自己修改变量名或者选择提示的变量名

package com.itheima;

import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo2 {
    public static void main(String[] args) throws IOException {

        //加载MyBatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


        //SqlSession获取对象
        SqlSession sqlSession = sqlSessionFactory.openSession();


        
        //获取UserMapper接口代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectALL();

        //打印结果
        System.out.println(users);

        //释放资源
        sqlSession.close();
    }
}