摘要:MyBatis 接口绑定主要有两种实现方式,它们都旨在将 Mapper 接口的方法与 SQL 语句关联起来,从而实现无需编写 Mapper 接口实现类即可执行 SQL 操作。 这两种方式分别是:
MyBatis 接口绑定主要有两种实现方式,它们都旨在将 Mapper 接口的方法与 SQL 语句关联起来,从而实现无需编写 Mapper 接口实现类即可执行 SQL 操作。 这两种方式分别是:
1. xml 映射文件绑定 (XML Mapper Configuration):
实现方式: 这是 MyBatis 最传统和最常用的接口绑定方式。它通过在 XML 映射文件中定义 SQL 语句,并将 XML 文件的 namespace 属性设置为 Mapper 接口的完全限定名,然后通过 XML 文件中的 , , , 标签的 id 属性与 Mapper 接口的方法名进行匹配来实现绑定。a) 定义 Mapper 接口: 创建一个 Java 接口,接口中的方法对应数据库操作。package com.example.mapper; import com.example.model.User; import org.apache.ibatis.Annotations.Param; publicinterfaceUserMapper { User getUserById(@Param("id")int id); intinsertUser(User user); intupdateUser(User user); intdeleteUser(@Param("id")int id); }b) 创建 XML 映射文件: 创建一个 XML 文件 (通常与 Mapper 接口同名,例如 UserMapper.xml),并放置在资源目录下 (例如 src/main/resources/mapper/)。xml复制代码 SELECT * FROM users WHERE id = #{id} INSERT INTO users(name, email) VALUES(#{name}, #{email}) UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} DELETE FROM users WHERE id = #{id} c) 在 MyBatis 配置文件中注册 XML 映射文件: 在 mybatis-config.xml 文件中,通过 标签注册 XML 映射文件。xml复制代码 d) 获取 Mapper 接口实例并使用: 通过 SqlSession 获取 Mapper 接口的实例,然后调用接口方法执行 sql 操作。java复制代码SqlSessionsqlSession = sqlSessionFactory.openSession; try { UserMapperuserMapper = sqlSession.getMapper(UserMapper.class); // 获取 Mapper 接口实例Useruser = userMapper.getUserById(1); // 调用接口方法,MyBatis 会执行 UserMapper.xml 中 id="getUserById" 的 SQL System.out.println(user); // ... 其他操作 ... } finally { sqlSession.close; }原理: MyBatis 在启动时会解析 mybatis-config.xml 文件,加载注册的 XML 映射文件。它会读取 XML 文件中的 namespace 和各个 SQL 标签的 id 属性,并将它们与对应的 Mapper 接口和方法关联起来。 当通过 sqlSession.getMapper(UserMapper.class) 获取 Mapper 接口实例时,MyBatis 会动态地创建一个 Mapper 接口的代理对象。 当调用代理对象的方法时,MyBatis 会根据方法名找到对应的 XML 映射文件中 id 相同的 SQL 语句并执行。2. 注解绑定 (Annotation Configuration):
实现方式: 注解绑定直接在 Mapper 接口的方法上使用 MyBatis 提供的注解 (例如 @Select, @Insert, @Update, @Delete) 来定义 SQL 语句。a) 定义 Mapper 接口并使用注解: 在 Mapper 接口的方法上使用注解来定义 SQL 语句。java复制代码package com.example.mapper; import com.example.model.User; import org.apache.ibatis.annotations.*; publicinterfaceUserMapper { @Select("SELECT * FROM users WHERE id = #{id}")// 使用 @Select 注解定义 SQL User getUserById(@Param("id")int id); @Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")// 使用 @Insert 注解定义 SQLintinsertUser(User user); @Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")// 使用 @Update 注解定义 SQLintupdateUser(User user); @Delete("DELETE FROM users WHERE id = #{id}")// 使用 @Delete 注解定义 SQLintdeleteUser(@Param("id")int id); }b) 在 MyBatis 配置文件中注册 Mapper 接口 (可选,但推荐): 在 mybatis-config.xml 文件中,可以通过 标签注册 Mapper 接口所在的包,MyBatis 会自动扫描该包下的所有接口并进行绑定。xml复制代码--> 注意: 如果使用包扫描注册,MyBatis 会扫描包下所有接口,如果某些接口不需要被 MyBatis 管理,需要进行排除配置或者放在不同的包下。c) 获取 Mapper 接口实例并使用 (与 XML 绑定相同): 通过 SqlSession 获取 Mapper 接口的实例,然后调用接口方法执行 SQL 操作。java复制代码SqlSessionsqlSession = sqlSessionFactory.openSession; try { UserMapperuserMapper = sqlSession.getMapper(UserMapper.class); // 获取 Mapper 接口实例Useruser = userMapper.getUserById(1); // 调用接口方法,MyBatis 会执行 @Select 注解中的 SQL System.out.println(user); // ... 其他操作 ... } finally { sqlSession.close; }原理: MyBatis 在启动时会解析 mybatis-config.xml 文件,加载注册的 Mapper 接口或包。 它会扫描 Mapper 接口,读取接口方法上的注解 (例如 @Select, @Insert 等) 中定义的 SQL 语句,并将它们与对应的方法关联起来。 同样,当通过 sqlSession.getMapper(UserMapper.class) 获取 Mapper 接口实例时,MyBatis 会动态地创建一个 Mapper 接口的代理对象。 当调用代理对象的方法时,MyBatis 会根据方法找到对应方法上的注解 SQL 语句并执行。
总结:
实现方式XML 映射文件绑定 (XML Mapper Configuration)注解绑定 (Annotation Configuration)SQL 与代码解耦高低无论选择哪种方式,MyBatis 的核心思想都是将 SQL 语句与 Java 代码分离,提高代码的可维护性和灵活性。 接口绑定是 MyBatis 的核心特性之一,它极大地简化了数据库操作的代码编写,提高了开发效率。
来源:小岳科技频道