网站首页 > 基础教程 正文
嵌入式SQL和动态SQL是两种在应用程序中使用SQL的方式
嵌入式SQL是在编程语言中在编译的时候就被解析的SQL语句,并且在编译的时候就已经被转换成了可以调用的代码,通常用在一些与数据库进行频繁交互的场景中。
而动态SQL是则是指在程序运行过程中才被动态构建并且执行的SQL语句。这种方法允许在程序运行时根据具体情况生成SQL语句,具有更高的灵活性。
在Spring Boot中,通过使用不同的技术和框架来实现嵌入式SQL和动态SQL。下面我们就来详细看看二者的实现。
嵌入式SQL
在SpringBoot应用中,我们可以通过JPA技术或者是通过Spring Boot JPA技术来实现嵌入式的SQL操作,这种方式在编译的时候就定义好的执行的语句,并且通过注解或者是命名的方式进行操作,如下所示。
使用JPA和Spring Data JPA的示例
实体类代码,如下所示。
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
private Long id;
private String name;
// Getters and setters
}
Repository接口实现,如下所示
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface EmployeeRepository extends JpaRepository {
// 使用JPA命名查询方法
Employee findById(Long id);
// 使用@Query注解进行嵌入式SQL查询
@Query("SELECT e FROM Employee e WHERE e.id = :id")
Employee findEmployeeById(@Param("id") Long id);
}
使用测试代码,如下所示
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public Employee getEmployeeById(Long id) {
return employeeRepository.findById(id).orElse(null);
}
}
上面这种方式,SQL的查询操作在编译的时候就已经被确定了,由Spring Data JPA来控制进行操作。
动态SQL
在SpringBoot中,通过Spring JDBC Template或者是通过MyBatis技术来实现动态SQL的操作,动态SQL允许在运行时根据条件生成SQL语句,所以具有更高的灵活性,如下所示。
使用Spring JDBC Template的示例
配置数据库
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=password
在Service类中使用JDBC Template完成数据操作,如下所示。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private JdbcTemplate jdbcTemplate;
public String getEmployeeNameById(Long id) {
String sql = "SELECT name FROM employees WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, String.class);
}
}
使用MyBatis的示例
在代码中配置Mapper接口类并且通过注解的方式来实现动态SQL的编写,如下所示。
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface EmployeeMapper {
@Select("SELECT name FROM employees WHERE id = #{id}")
String findEmployeeNameById(Long id);
}
Service类中使用Mapper来完成条件查询操作如下所示。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public String getEmployeeNameById(Long id) {
return employeeMapper.findEmployeeNameById(id);
}
}
总结
根据上面的介绍我们知道,对于嵌入式SQL操作在SpringBoot中使用JPA技术来实现,通常适合比较固定的查询场景,而动态的SQL则是通过JDBCTemplate技术和MyBatis框架来实现,通常情况下适合一些比较灵活的数据查询场景。
猜你喜欢
- 2025-04-08 MyBatis3源码解析-执行SQL流程(mybatis源码解读)
- 2025-04-08 C# 数据操作系列 - 15 SqlSugar 增删改查详解(超长篇)
- 2025-04-08 SQLYog使用教程(sqlyog使用技巧)
- 2025-04-08 SQL With As 用法(sql函数的使用方法)
- 2025-04-08 sql注入(sql注入写文件的根本条件)
- 2025-04-08 程序员总结的常用sql语句大全(程序员数据库)
- 2025-04-08 SQL Server优化50法(sqlserver数据优化)
- 2025-04-08 28个SQL常用的DeepSeek提示词指令,码住直接套用
- 2025-04-08 SQL语言分类有哪几种?分别都对应着哪些关键字?都整理在这里了
- 2025-04-08 手把手教你如何上传代码到gitee服务器
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)