首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SpringMVC 非 XML 方式實現數據庫交互:JdbcTemplate 與 MyBatis 註解開發

     編輯:程式設計綜合問答

問題背景

傳統 Spring + MyBatis 專案將 SQL 寫在 XML Mapper 中,現需求改為「SQL 寫死在 Java 代碼」且仍使用 Spring 框架。本文介紹兩種主流無 XML 方案:Spring JdbcTemplate 及 MyBatis 註解開發。

方案一:Spring JdbcTemplate(最原生、零依賴)

1. 配置 DataSource 與 JdbcTemplate

@Configuration
public class DataConfig {
    @Bean
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

2. Repository 層直接寫 SQL

@Repository
public class AdminRepository {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public Admin findAdminName(String adminName) {
        String sql = "SELECT * FROM admins WHERE admin_name = ?";
        return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Admin.class), adminName);
    }

    public int save(Admin admin) {
        String sql = "INSERT INTO admins VALUES (?, ?, ?, ?)";
        return jdbcTemplate.update(sql, admin.getAdminId(), admin.getAdminName(), admin.getAdminPassword(), admin.getAdminNickname());
    }

    public int update(Admin admin) {
        String sql = "UPDATE admins SET admin_name=?, admin_password=?, admin_nickname=? WHERE admin_id=?";
        return jdbcTemplate.update(sql, admin.getAdminName(), admin.getAdminPassword(), admin.getAdminNickname(), admin.getAdminId());
    }
}

方案二:MyBatis 註解開發(保留 MyBatis 特性)

1. Mapper 接口加註解

@Mapper
public interface AdminMapper {
    @Select("SELECT * FROM admins WHERE admin_name = #{adminName}")
    Admin findAdminName(@Param("adminName") String adminName);

    @Insert("INSERT INTO admins VALUES (#{adminId}, #{adminName}, #{adminPassword}, #{adminNickname})")
    int save(Admin admin);

    @Update("UPDATE admins SET admin_name=#{adminName}, admin_password=#{adminPassword}, admin_nickname=#{adminNickname} WHERE admin_id=#{adminId}")
    int update(Admin admin);
}

2. 啟用掃描

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application { ... }

方案對比與選型建議

維度JdbcTemplateMyBatis 註解
學習成本低中
SQL 維護性分散在代碼中集中在 Mapper 接口
動態 SQL手動拼接支持 <script> 註解
結果映射RowMapper自動/註解配置
事務管理@Transactional@Transactional

建議:簡單專案或團隊習慣原生 JDBC 用 JdbcTemplate;需動態 SQL、結果映射複雜則用 MyBatis 註解。兩者均可完全去除 XML。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved