品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
刚学Spring Boot的时候很多新手不知道怎么连接数据库,我们做Web开发几乎所有业务系统都避不开要跟数据库打交道,经常要对数据库做增删改查。此外,现在系统之间很少是孤立的,调用第三方接口、内部服务间互相请求是开发常态,Spring Boot怎么调用接口呢?下面就给大家介绍一下Spring Boot怎么调用数据库,Spring Boot怎么调用接口的相关内容。
一、Spring Boot怎么调用数据库
Spring Boot要调数据库我们可以借助JDBC,在pom.xml中引入spring-boot-starter-jdbc,配好数据源信息,用JdbcTemplate就能直接写SQL执行查询,JDBC简单直接,SQL怎么写就怎么执行,也没什么中间层,但是,麻烦的是查出来的结果集要自己用RowMapper一行行映射成对象,字段多了写起来挺啰嗦,现在纯用JDBC的项目已经不太多了。

现在广受欢迎的还是MyBatis,MyBatis-Plus在国内更常见,基本思路就是把SQL和Java代码分开写,要么写在XML映射文件里,要么用注解直接标在Mapper接口方法上,SQL怎么写、返回什么类型都是自己控制。MyBatis-Plus在这基础上做了增强,单表的增删改查基本不用手写SQL了,继承BaseMapper就有一堆现成方法,复杂的多表查询该写XML还是得写,它解决不了所有问题,只是把重复劳动省掉了。

也可以用JPA,它基于Hibernate,走的是ORM那一套,实体类和数据库表通过注解做映射,@Entity、@Id、@Column这些,继承JpaRepository之后连接口方法都不用实现,方法名按规则命名比如findByUsername,框架会自动解析成SQL。这种方式是省心,但是SQL是框架自动生成的,复杂查询场景下生成的SQL不一定是最优的,排查性能问题的时候不如手写SQL来得直观,所以互联网公司用MyBatis系的明显更多,JPA在偏Java传统企业开发或者对ORM依赖比较重的团队里会更常见一些。

二、Spring Boot怎么调用接口
早些年很多人都喜欢用RestTemplate,现在Spring官方已经把它标成维护模式了,不建议新项目再用,但老项目里还是随处可见,RestTemplate用起来很直接,注入进去之后调getForObject、postForObject这些方法,传URL、参数、返回类型就行,属于同步阻塞调用,需等待接口响应后执行后续逻辑,简单场景够用。但写多了我们会发现代码里到处是模板样式的调用,遇到要加统一的请求头、超时设置之类的需求时,得单独配置ClientHttpRequestFactory或者拦截器,不够灵活。

官方推荐用WebClient,不代表非得写响应式代码才能用它,在普通MVC项目里一样能引入,只是要额外加spring-boot-starter-webflux依赖,WebClient默认是异步非阻塞的,调用完返回的是Mono或者Flux,想同步拿结果就调block(),不过阻塞式用法多少有点浪费它本身的设计初衷。它的链式API写起来比RestTemplate舒服,加请求头、处理响应状态码、设置超时都能链式配置下去,做统一的日志、鉴权拦截也方便,业内现在写新接口调用基本都往这上面靠。

有一种更省事的,我们可以考虑采用OpenFeign,在微服务场景里几乎是标配,我们定义一个接口,上面加@FeignClient指定要调用的服务名或者URL,接口方法上写@GetMapping、@PostMapping这些注解,跟写Controller差不多,调用的时候直接像调本地方法一样调这个接口,底层帮你把请求组装、发送、结果反序列化全干了,代码看着特别干净,基本感觉不到在发HTTP请求,不过,封装得太深,有时候不太好排查问题,得看日志才能定位。

以上就是Spring Boot怎么调用数据库,Spring Boot怎么调用接口的全部内容了。Spring Boot调用数据库的选择方案不少,我们可以考虑用JDBC、MyBatis或者是JPA,如果要调用接口,可以考虑使用RestTemplate、WebClient还有OpenFeign,不要纠结选择哪个,能稳定跑、团队都看得懂,就是合适的选择。