Mybatis-Mapper代理开发

发布时间:2024年01月06日

以下代码建立在上篇博客Mybatis快速搭建的基础上,没有搭建或者忘记如何搭建的可以去跟着搭建一下子Mybatis快速搭建

目的

  • 解决原生方式中的硬编码
    原先编码执行sql语句要在main方法中写死查询语句的id,且每个语句的id都是不一样的,这样再去main方法中写的时候就会写很多个id,麻烦且复杂,用Mapper代理开发就可以解决这个问题
  • 简化后期执行sql
    区别就是之后不用再修改代码,修改配置文件即可

使用Mapper代理方式入门

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

首先新建一个Mapper接口

新建一个UserMapper接口,再在resources文件夹下新建一个com.svt.mapper,但是不能直接写com.svt.mapper,资源文件夹会认为com.svt.mapper就是你这个文件夹的名字,要在新建Directory的时候写com/svt/mapper,这样就能分成三级了
在这里插入图片描述

编译mybatis-demo

这里直接执行会出错,可以使用一个maven helper插件,使用里面的run maven进行编译
插件可以在idea内下载
File->Settings->Plugins->进行搜索maven helper
在这里插入图片描述
下载之后重启idea即可使用,我们编译一下子
在这里插入图片描述
出来的结果有编译成功的文件夹名,这时候我们就可以去对应目录下看是否已经成功放在同一目录下
在这里插入图片描述
像这样就已经成功完成第一步啦
在这里插入图片描述

更改sql映射文件路径

还有个小细节,此时资源路径已经更改,所有在mybatis-config.xml文件里我们需要修改一下加载sql映射文件的路径,右击UserMapper.xml文件选择Copy Relative Path,直接粘贴到路径内

<!--加载sql映射文件-->
        <mapper resource="com/svt/mapper/UserMapper.xml"/>

2.设置SQL映射文件的namespace属性为Mapper接口全限定名

前一个博客内写的命名空间是test,比较随意,这里就需要将test改为自己定义的mapper接口路径

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

在这里插入图片描述

3.在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

在UserMapper接口中写一个和id名一样的方法

User selectAll();

但此时有个小细节,之前写的查询语句查询的是整张表的数据,查询的是一个集合,这时候我们就需要用一个集合来接收数据,所有方法的类型是List集合,里面放的是一个一个user对象

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

4.编码

通过 SqlSession的 getMapper方法获取 Mapper接口的代理对象
调用对应方法完成sql的执行

  • 代码实现
/**
 * Mybatis 代理开发
 */
public class MybatisDemo2 {
    public static void main(String[] args) throws IOException {
        //1.加载mybatis核心配置文件,获取 SqlSessionFactory 对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取 SqlSession 对象,用它执行 SQL 语句
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //3.1获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        System.out.println(users);

        //4.释放资源
        sqlSession.close();
    }
}
  • 执行结果
    在这里插入图片描述

细节

如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
在这里插入图片描述

<!--Mapper代理方式-->
        <package name="com.svt.mapper"/>

以后像这样的xml文件还会有很多,我们就可以使用扫描的方式进行加载,扫描一下对应的包就可以直接夹在里面所有的xml文件,不用再一个一个加载了

至此Mapper代理开发就阐述完毕,一起实现一下子吧!

文章来源:https://blog.csdn.net/qq_52879387/article/details/135429226
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。