在MyBatis中,Mapper代理开发是一种常用的方式,它可以让我们使用Java接口来声明SQL语句,从而避免手写XML文件的繁琐和出错。
一、使用mapper代理开发的要求
-
Mapper接口必须使用Java接口来声明,并且方法名和参数列表应该与对应的SQL语句相同。
-
Mapper XML文件应该保存在与Mapper接口相同的包路径下,并且文件名应该与Mapper接口的名称相同。
-
在Mapper XML文件中,可以使用MyBatis的标签来编写SQL语句,并且可以通过
${}
语法来引用Mapper接口中声明的方法参数。 -
创建SqlSessionFactory对象时需要指定MyBatis的配置文件,并将其放置在类路径下。
-
使用SqlSession.getMapper()方法获取Mapper代理对象,并调用对应的方法来执行SQL语句。
-
记得在使用完毕后关闭SqlSession对象以释放资源。
二、步骤
1.编写Mapper接口
Mapper接口是用于声明SQL语句的Java接口,它应该包含一个或多个方法,每个方法对应一条SQL语句。方法名和参数列表应该与要执行的SQL语句对应。例如,如果要查询用户信息,可以编写如下的Mapper接口:
public interface UserMapper {
User selectById(int id);
}
2.编写Mapper XML文件
Mapper XML文件是用于实现Mapper接口中声明的SQL语句的XML文件。这个文件应该保存在与Mapper接口相同的包路径下,并且文件名应该与Mapper接口的名称相同。例如,在上面的例子中,我们应该编写一个名为 UserMapper.xml 的文件。
在这个XML文件中,我们可以使用MyBatis的标签来编写SQL语句,并且可以通过${}
语法来引用Mapper接口中声明的方法参数。例如,如果要查询用户信息,可以编写如下的XML片段:
<!-- 文件名:UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectById" resultMap="userResultMap">
SELECT id, name, age
FROM user
WHERE id = #{id}
</select>
</mapper>
其中,id属性对应于Mapper接口中声明的方法名,resultMap属性指定了查询结果映射的Java对象。
3.创建SqlSessionFactory对象
SqlSessionFactory是Mybatis中最重要的对象之一,它用于创建SqlSession对象。SqlSession是执行SQL语句的主要入口,它提供了一系列执行SQL语句的方法。可以通过如下代码来创建SqlSessionFactory对象:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
这里假设配置文件名为mybatis-config.xml,并且放置在类路径(classpath)下。Resources.getResourceAsStream()方法可以获取配置文件的输入流。
4.获取Mapper代理对象
在Java代码中使用Mapper代理来执行SQL语句。这可以通过SqlSession.getMapper()方法来实现。例如,在上面的例子中,可以编写如下代码片段:
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
System.out.println(user);
} finally {
sqlSession.close();
}
在这个例子中,我们首先通过SqlSessionFactory.openSession()方法创建一个SqlSession对象。然后,通过SqlSession.getMapper()方法创建一个Mapper代理对象,从而可以调用Mapper接口中声明的方法来执行SQL语句。最后,记得要关闭SqlSession对象以释放资源。
三、包扫描自动注册Mapper接口和XML文件
MyBatis提供了一种方便的方式来简化Mapper接口和Mapper XML文件的配置,即使用包扫描来自动注册Mapper接口和XML文件。这样可以减少手动配置的工作量,并使代码更加简洁和易于维护。
具体实现步骤如下:
1.在mybatis-config.xml配置文件中添加<mappers>标签。
2. 在<package>标签中指定Mapper接口和XML文件所在的包路径,这里假设Mapper接口和XML文件位于com.example.mapper包下。
3.然后就可以直接在Java代码中使用对应的Mapper接口了,无需再手动注册。
<mappers>
<package name="com.example.mapper"/>
</mappers>