您可以使用org.springframework.jdbc.core.JdbcTemplate 来执行普通的sql。
只需创建一个简单的 bean:
@Bean
public JdbcTemplate healthJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
您可以自动装配 jdbcTemplate 并执行普通的 sql 查询
@Autowired
private JdbcTemplate jdbcTemplate;
之后,您可以使用queryForList 方法获取所需的数据。
例如,如果您有一个包含以下数据的 people 表:
id first_name last_name, add_info, company_id
1 fn1 ln1 info1 1
2 fn2 ln2 info2 1
3 fn3 ln3 info3 1
4 fn4 ln4 info4 1
还有一张公司表:
id company_name
1 test_company1
您使用以下代码检索数据:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class Controller {
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping("/api/test")
List<Map<String, Object>> getData() {
return jdbcTemplate.queryForList("Select * FROM public.persons p JOIN public.companies c" +
" ON p.company_id = c.id");
}
}
结果将是
[{"id":1,"f_name":"fn1","l_name":"ln1","add_info":"info1","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn2","l_name":"ln2","add_info":"info2","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn3","l_name":"ln3","add_info":"info3","company_id":1,"company_name":"test_company1"},{"id":1,"f_name":"fn4","l_name":"ln4","add_info":"info4","company_id":1,"company_name":"test_company1"}]
根据 cmets 中的问题进行更新:
javax.sql.DataSource 是一个由 spring 自动配置的 bean(除非您覆盖配置或禁用它)。 JdbcTemplate 需要此 bean,因为它包含有关 JdbcTemplate 将在其上执行查询的数据库的信息。
默认情况下,它使用 application.properties(或在下面的情况下为 application.yml)文件中的以下属性。例如:
spring:
datasource:
username: someusername
password: somepassword
url: jdbc:postgresql://localhost:5432/dbname
driver-class-name: org.postgresql.Driver