Mybatis 共用代码
时间: 2024-12-31 14:15:30 浏览: 6
### MyBatis 共用代码实现方式与最佳实践
#### 使用Mapper接口继承共享通用方法
为了减少重复代码并提高可维护性,可以创建一个基类 `BaseMapper` 接口,在其中定义常用的CRUD操作。其他具体的 Mapper 可以继承自这个基类。
```java
public interface BaseMapper<T> {
int insert(T record);
T selectByPrimaryKey(Object key);
int updateByPrimaryKeySelective(T record);
int deleteByPrimaryKey(Object key);
}
```
具体实体对应的 Mapper 继承此基础接口即可获得这些基本功能[^1]。
#### 抽象公共查询逻辑至XML片段
对于复杂的 SQL 查询语句,尤其是那些经常被不同地方调用的部分,应该把它们提取成独立的 `<sql>` 片段保存在 XML 文件里。这样不仅能够简化主查询文件的内容结构,而且便于统一管理和修改。
```xml
<sql id="base_column_list">
id, name, description, create_time
</sql>
<select id="selectUsers" parameterType="map" resultType="User">
SELECT
<include refid="base_column_list"/>
FROM users u
WHERE ...
</select>
```
这种方式有助于保持 DRY 原则(Don't Repeat Yourself),即不重复自己。
#### 利用动态SQL构建工具
MyBatis 提供了丰富的标签用于编写动态 SQL 表达式,比如 `<if>`, `<choose>`, `<when>`, `<otherwise>`, 和 `<foreach>` 等等。通过合理运用这些标签可以在一定程度上降低硬编码带来的风险,并使得 SQL 更加灵活多变。
例如:
```xml
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<!-- More conditions -->
</where>
```
这允许根据传入参数自动调整最终执行的实际 SQL 文本。
#### 配置全局插件优化性能
针对一些普遍存在的需求如分页处理、日志记录等功能,则可以通过开发或引入第三方插件的形式来满足。这类插件通常会注册到 MyBatis 的拦截器链中,从而影响所有符合条件的操作行为而不必改动原有业务层代码。
例如,使用 PageHelper 插件来进行数据库层面的结果集分页控制,只需简单配置就能让整个应用受益于高效的分页机制而无需手动拼接 LIMIT 子句。
阅读全文