你写代码会复用公共SQL么?

B站影视 韩国电影 2025-09-28 20:28 1

摘要:比如,在一个用户管理的模块中,经常需要查询用户的某些基础字段,像 id 、username 、email 等。如果每次都手写这些字段,既麻烦又容易出错,我就用 标签把它们抽出来。

跟蜗牛哥一起,每天进步一点点

大厂程序员一枚 跟蜗牛一起 每天进步一点点

**

“你在写代码时会复用公共 SQL 吗?如果会的话, #技术分享能详细介绍一下你是如何实现的吗?”

在 Java 后端开发中,我最常用的 ORM 框架是 MyBatis。MyBatis 提供了一个非常方便的特性—— 标签,可以用来定义可复用的 SQL 片段。

比如,在一个用户管理的模块中,经常需要查询用户的某些基础字段,像 id 、username 、email 等。如果每次都手写这些字段,既麻烦又容易出错,我就用 标签把它们抽出来。

举个例子,我的 UserMapper.xml 可能会这样写:

id, username, email, created_at, updated_at SELECT FROM users WHERE status = #{status} SELECT FROM users WHERE id = #{id}

通过 标签,我可以在多个 SQL 语句中复用 userBaseColumns 这个片段。这样,如果以后需要调整查询字段(比如新增 phone 字段),只需要改动 定义的地方,所有引用它的查询都会自动更新,省时省力。

有时候,SQL 的复用不仅仅是字段列表,还可能是复杂的条件逻辑。比如,很多业务场景下会有分页查询的需求,LIMIT 和 OFFSET 是固定的模式。我会结合 MyBatis 的动态 SQL 和 Java 代码来实现复用。

比如,我会写一个通用的分页工具类:

public class PageHelper { public static String appendPageSql(String sql, int pageNum, int pageSize) { int offset = (pageNum -return sql +} }

然后在 Mapper 接口中调用:

@SelectProvider(type = UserSqlProvider.class, method = "getUserListSql")List getUserList(int status, int pageNum, int pageSize);class UserSqlProvider { public String getUserListSql(int status, int pageNum, int pageSize) { String sql = "SELECT id, username, email FROM users WHERE status = #{status}"; return PageHelper.appendPageSql(sql, pageNum, pageSize); } }

这样,任何需要分页的查询都可以复用 PageHelper ,只需要传入页码和每页大小即可。这种方式在 Java 层实现了 SQL 的动态拼接,既灵活又可控。

如果项目中不完全依赖 MyBatis,或者有些 SQL 是直接通过 JDBC 执行的,我会用 Java 的常量类来管理公共 SQL 片段。比如:

public class SqlConstants { public static final String USER_BASE_COLUMNS = "id, username, email, created_at, updated_at"; public static final String USER_TABLE = "users"; public static final String SELECT_USER_BY_ID = "SELECT " +}

然后在 DAO 层使用:

public User getUserById(Long id) { String sql = SqlConstants.SELECT_USER_BY_ID; return jdbcTemplate.queryForObject(sql, new Object{id}, new UserRowMapper);}

这种方式的好处是简单直观,适合小型项目或者需要快速开发的场景。不过缺点是缺乏动态性,如果 SQL 逻辑复杂,维护起来会稍显麻烦。

“在 Java 后端开发中,复用公共 SQL 是一个很实用的习惯。我会根据项目规模和需求选择合适的方式,小项目可能用常量类就够了,大项目则更倾向于 MyBatis 的 标签或者动态 SQL 结合工具类。关键是要让代码既高效又易于维护。”

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

来源:墨码行者

相关推荐