SpringBoot 中两种数据库操作方式:注解法 vs XML 配置,哪种更适合课设?
在使用 SpringBoot + MyBatis 进行数据库开发时,很多初学者会面临一个选择题:
到底是使用 @注解写 SQL,还是写 mapper.xml 文件?
本文将全面对比这两种方式的优劣,并提供实战操作指引,帮你在课设开发中选对方法,少踩坑。
🧩 一、两种方式简介:注解法 vs XML 配置
特性 | 注解方式(Annotation) | XML 配置方式 |
---|---|---|
位置 | Mapper 接口类中 | 单独的 mapper.xml 文件 |
编写方式 | 使用 @Select , @Insert 等注解直接写 SQL | 将 SQL 写入 XML 并绑定接口 |
可读性 | 简洁,适合简单 SQL | 结构清晰,适合复杂 SQL |
可维护性 | 难以组织大型语句 | 易于统一管理 SQL 文件 |
适用场景 | 快速开发、小型项目 | 正规项目、复杂逻辑 |
🧪 二、注解方式:快速实现 CURD(适合小型课设)
✅ 使用步骤
- 引入依赖(略,默认已有)
- 定义实体类(例如 User):
@Data
public class User {
private Long id;
private String username;
private String password;
}
- 创建 Mapper 接口,使用注解写 SQL:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(Long id);
@Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
int insert(User user);
@Update("UPDATE user SET password = #{password} WHERE id = #{id}")
int updatePassword(Long id, String password);
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteById(Long id);
}
- 在 Service/Controller 层调用即可
👍 优点
- 开发快速,无需单独 XML 文件
- 所有 SQL 一目了然,方便调试
- 非常适合“增删改查”型课设项目
👎 缺点
- SQL 直接嵌在 Java 中,复杂查询难维护
- 不支持
<if>
、<where>
等 MyBatis 动态语法 - 不利于多人协作,接口变更容易遗漏 SQL 修改
🧪 三、XML 方式:分离 SQL 与逻辑(更适合专业开发)
✅ 使用步骤
- 定义实体类(同上)
- 定义 Mapper 接口:
public interface UserMapper {
User findById(Long id);
int insert(User user);
int updatePassword(User user);
int deleteById(Long id);
}
- 创建 XML 文件(如:UserMapper.xml):
<mapper namespace="com.example.mapper.UserMapper">
<select id="findById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
<update id="updatePassword" parameterType="com.example.entity.User">
UPDATE user SET password = #{password} WHERE id = #{id}
</update>
<delete id="deleteById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
- 配置 mapper 文件扫描路径(如有需要)
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.entity
👍 优点
- SQL 独立易维护,复杂语句清晰可读
- 支持动态 SQL(
<if>
,<choose>
,<foreach>
等) - 接口清爽、代码整洁,符合主流项目架构
👎 缺点
- 配置略繁琐,新手容易忘记绑定 namespace
- 多文件管理增加复杂度(对课设稍重)
🎯 四、两者适用建议对比(附表总结)
场景 | 推荐方式 | 理由 |
---|---|---|
课设项目、简单 CURD | 注解方式 | 快速开发、结构简单 |
毕设/企业模拟项目 | XML 配置 | 结构清晰、利于团队开发 |
查询语句复杂(如分页、模糊搜索) | XML 配置 | 支持动态 SQL,易维护 |
开发初学者快速体验 | 注解方式 | 少配置,容易上手 |
📌 五、可以混用吗?项目实践建议
可以混用,但建议如下:
- 简单操作可用注解(如基础查询)
- 复杂操作使用 XML,维护成本更低
- 统一风格优先,不建议频繁混搭
👉 示例:
// 用注解快速写个 count 查询
@Select("SELECT COUNT(*) FROM user")
int countUsers();
<!-- 对分页或动态查询仍用 XML -->
<select id="queryByCondition" parameterType="Map" resultType="User">
SELECT * FROM user
<where>
<if test="username != null">
AND username LIKE CONCAT('%', #{username}, '%')
</if>
</where>
</select>
✅ 六、结语:选对方法,事半功倍
对于课设而言,你不需要追求企业级的极致架构,但应追求“结构合理、清晰可扩展”。
注解方式适合快速实现功能,XML 配置适合稳重扩展。
📌 写在最后:
别让所有 SQL 混在 Controller 里,更别把业务逻辑和数据操作写一起 ——
结构,是项目的第一步美观。