【MyBatis】代理开发&核心配置文件介绍(二)

举报
观止study 发表于 2023/05/31 16:55:30 2023/05/31
【摘要】 一.Mapper代理开发 (1) 引入在上一篇中我们有提到一点,MyBatis可以在一定程度上解决JDBC中所遇到的硬编码问题,但是经过上一篇的案例,我们发现又涉及到了新的硬编码问题,而且操起起来比较麻烦:每次使用都得去UserMapper.xml中查看对应SQL语句的id名称。编写过程idea不会有代码提示,必须仔细书写防止错误产生。由此在新版本的MyBatis官方文档中也更推荐我们以M...

一.Mapper代理开发

(1) 引入

在上一篇中我们有提到一点,MyBatis可以在一定程度上解决JDBC中所遇到的硬编码问题,但是经过上一篇的案例,我们发现又涉及到了新的硬编码问题,而且操起起来比较麻烦:

  • 每次使用都得去UserMapper.xml中查看对应SQL语句的id名称。
  • 编写过程idea不会有代码提示,必须仔细书写防止错误产生。
    image.png

由此在新版本的MyBatis官方文档中也更推荐我们以Mapper代理的方式使用它。
image.png

比之旧版本,使用起来更为简洁且可以避免因粗心导致的一些错误。此外,我们还可以使用注解的方式来映射一些简单的SQL语句使代码显得更加简洁。

(2) 入门使用

为了使用Mapper代理开发,接下来让我们一起对上一篇编写的入门案例进行一些改造。
image.png

(2.1) 编写同名接口

我们需要定义一个与SQL映射文件(xml)同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
image.png

如此当然可以,但是配置文件与Java代码混在了一起却不利于我们进行管理。我们可以选择将xml文件依旧放在resource目录下,这是因为项目在编译之后resource中的文件也和代码在一个区域中。但是我们要在resource下创建一个与UserMapper一样的包结构,然后将其置于其中。
image.png

要注意的是,当我们在resource下创建多级Directory时不能像创建包一样guanzhi.mapper而应该选择guanzhi/mapper的方式.。经过Maven的compile之后我们查看target\classes文件可以发现他们确实在一个目录下。
image.png

此外,由于我们改了UserMapper.xml文件的位置,在mybatis-config.xml中也要进行一定的更改。
image.png

(2.2) 设置namespace属性

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

(2.3) 在接口中定义方法

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

(2.4) 测试

至此我们已经完成了对入门案例的修改配置,接下来我们可以在代码中进行测试。

public class MyBatisDemo {
    public static void main(String[] args) {
        try {
            // 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.通过SqlSession的getMapper方法获取 Mapper接口的代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //4.直接使用接口中编写的方法即可
            List<User> userList = userMapper.selectAll();
            System.out.println(userList);

            // 4.释放资源
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

对比可以看到整体使用上并无太大差异,但是解决了硬编码问题,且使用起来更加舒服。
image.png

运行可以发现结果与之前一致
image.png

(2.5) 技巧补充

当我们使用mapper代理方式进行开发时,如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
image.png

当我们项目简单时,可能用不用无所谓,当我们项目庞大时,使用包扫描的方式,可以避免我们写一排xxxMapper.xml

二.核心配置文件

除了上述我们已经在mybatis-config.xml使用到的配置信息外,还有许多配置信息可以在里面写。官方文档中详细介绍了许多配置信息的作用,其首句便是“MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。”本篇只介绍几个常用的配置。

注意:在配置各个标签时必须遵循官网给出的如下顺序
image.png

(1) 环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。例如,开发、测试和生产环境需要有不同的配置信息;

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
image.png

(2) 类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,可以降低冗余的全限定类名书写。可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean.
image.png

三.MyBatisX插件

MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。主要功能:

  • 可以在XML和接口方法 之间相互跳转

  • 根据编写的接口方法生成快速在xml中生成statement
    image.png

使用:

  1. 可以先在Mapper接口中编写方法,点击出现红色波浪线,按下alt+回车键可弹出如下选项,点击Generate statement
    image.png

  2. 可以看到在xml文件中直接生成了对应语句,我们只需要在此编写SQL代码即可
    image.png

除此之外还有一些更为便捷的方法,我们后续慢慢介绍。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。