🚗MyBatis学习·第二站站~
🚩起始站:MyBatis概述&环境搭建(一)
🚩本文已收录至专栏:数据库学习之旅
👍希望您能有所收获
一.Mapper代理开发
(1) 引入
在上一篇中我们有提到一点,MyBatis可以在一定程度上解决JDBC中所遇到的硬编码问题,但是经过上一篇的案例,我们发现又涉及到了新的硬编码问题,而且操起起来比较麻烦:
- 每次使用都得去UserMapper.xml中查看对应SQL语句的id名称。
- 编写过程idea不会有代码提示,必须仔细书写防止错误产生。
由此在新版本的MyBatis官方文档中也更推荐我们以Mapper代理的方式使用它。
比之旧版本,使用起来更为简洁且可以避免因粗心导致的一些错误。此外,我们还可以使用注解的方式来映射一些简单的SQL语句使代码显得更加简洁。
(2) 入门使用
为了使用Mapper代理开发,接下来让我们一起对上一篇编写的入门案例进行一些改造。
(2.1) 编写同名接口
我们需要定义一个与SQL映射文件(xml)同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
如此当然可以,但是配置文件与Java代码混在了一起却不利于我们进行管理。我们可以选择将xml文件依旧放在resource目录下,这是因为项目在编译之后resource中的文件也和代码在一个区域中。但是我们要在resource下创建一个与UserMapper一样的包结构,然后将其置于其中。
要注意的是,当我们在resource下创建多级Directory时不能像创建包一样guanzhi.mapper
而应该选择guanzhi/mapper
的方式.。经过Maven的compile之后我们查看target\classes文件可以发现他们确实在一个目录下。
此外,由于我们改了UserMapper.xml文件的位置,在mybatis-config.xml
中也要进行一定的更改。
(2.2) 设置namespace属性
设置SQL映射文件的namespace属性为Mapper接口全限定名。
(2.3) 在接口中定义方法
在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句所对应的id,并保持参数类型和返回值类型一致。
(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();
}
}
}
对比可以看到整体使用上并无太大差异,但是解决了硬编码问题,且使用起来更加舒服。
运行可以发现结果与之前一致
(2.5) 技巧补充
当我们使用mapper代理方式进行开发时,如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
当我们项目简单时,可能用不用无所谓,当我们项目庞大时,使用包扫描的方式,可以避免我们写一排xxxMapper.xml
。
二.核心配置文件
除了上述我们已经在mybatis-config.xml
使用到的配置信息外,还有许多配置信息可以在里面写。官方文档中详细介绍了许多配置信息的作用,其首句便是“MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。”本篇只介绍几个常用的配置。
注意:在配置各个标签时必须遵循官网给出的如下顺序
(1) 环境配置(environments)
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。例如,开发、测试和生产环境需要有不同的配置信息;
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
(2) 类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,可以降低冗余的全限定类名书写。可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean.
三.MyBatisX插件
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。主要功能:
-
可以在XML和接口方法 之间相互跳转
-
根据编写的接口方法生成快速在xml中生成statement
使用:
-
可以先在Mapper接口中编写方法,点击出现红色波浪线,按下alt+回车键可弹出如下选项,点击Generate statement
-
可以看到在xml文件中直接生成了对应语句,我们只需要在此编写SQL代码即可
除此之外还有一些更为便捷的方法,我们后续慢慢介绍。