富德生命人寿保险公司官方网站保单服务,做淘宝一样的网站有哪些,珠海专业制作网站,做网站要几个人一、前言
之前项目在xml中写sql#xff0c;感觉标签有很多#xff0c;比较灵活#xff1b;
最近在写新项目#xff0c;使用了jpa#xff0c;只能在java中写sql了#xff0c;感觉不太灵活#xff0c;但是也得凑付用。
以下总结下常用入参出参写法。
二、Repository代…一、前言
之前项目在xml中写sql感觉标签有很多比较灵活
最近在写新项目使用了jpa只能在java中写sql了感觉不太灵活但是也得凑付用。
以下总结下常用入参出参写法。
二、Repository代码样例
SuppressWarnings(unused)
Repository
public interface HourRepository extends JpaRepositoryDlhour, Long, JpaSpecificationExecutorDlhour {Query(value SELECT * FROM dlhour d,bsc_user_t A WHERE A.user_name d.ename AND A.user_identity 0 and IF(?1 ! and ?1 is not null , A.user_name ?1 ,11 ) and IF(?2 ! and ?2 is not null,A.NAME LIKE concat(%, ?2, %) ,11 ) and IF(?3 ! and ?3 is not null , d.fact_startdate ?3 ,11 ) and if(COALESCE(?4,NULL) IS NOT NULL, A.company in (?4) ,11 ) GROUP BY user_id , countQuery SELECT count(*) FROM dlhour d,bsc_user_t A WHERE A.user_name d.ename AND A.user_identity 0 and IF(?1 ! and ?1 is not null , A.user_name ?1 ,11 ) and IF(?2 ! and ?2 is not null,A.NAME LIKE concat(%, ?2, %) ,11 ) and IF(?3 ! and ?3 is not null , d.fact_startdate ?3 ,11 ) and if(COALESCE(?4,NULL) IS NOT NULL, A.company in (?4) ,11 ) GROUP BY user_id , nativeQuery true)PageMapString, Object findClassHour(String user_name, String name, String fact_startdate, ListString companys, Pageable pageable);}说明 1.这是一个根据条件查询结果列表的接口有分页有入参pageable不用自己手写分页了 2.Dlhour是javabean与数据库中的一张表对应字段一一对应注意必须有id列。 3.user_name是第一个入参放入sql中就是等于的条件 4.name是第二个入参放入sql中可以模糊查询 5.fact_startdate是第三个入参可以用来查询时间范围string类型就可以例如2023-11-06 6.companys是第四个入参是ListString类型放入sql用来查询in条件
三、其余部分代码样例
1.Service层
Service
public class ClassHourService {private final Logger log LoggerFactory.getLogger(ClassHourService.class);Autowiredprivate HourRepository hourRepository;public PageMapString, Object findClassHour(JSONObject reqJson, Pageable pageable) {ListString companys null;String company reqJson.getString(company);if(company!null !.equals(company)){companys Arrays.asList(company.split(,));}return hourRepository.findClassHour(reqJson.getString(user_name), reqJson.getString(name), reqJson.getString(fact_startdate), companys, pageable);}
}说明 (1)前端传来的参数company是逗号分隔的转为ListString类型的companys当入参 (2)直接从前端传来的json报文中拿到user_name, name, fact_startdate参数 (3)pageable参数是前端传来的好像在header里直接传下去
2.Controller层
RestController
RequestMapping(/first)
public class ClassHourResource {private final Logger log LoggerFactory.getLogger(ClassHourResource.class);Autowiredprivate ClassHourService classHourService;GetMapping(/second/findClassHour)public ResponseEntityListMapString,Object findClassHour(RequestBody JSONObject reqJson, Pageable pageable) {log.debug(REST request to findClassHour: {}, reqJson.toJSONString());PageMapString,Object page classHourService.findClassHour(reqJson, pageable);HttpHeaders headers PaginationUtil.generatePaginationHttpHeaders(page, /first/second/findClassHour);return ResponseEntity.ok().headers(headers).body(page.getContent());}}说明 (1)入参是json请求体reqJsonpageable这个应该在header里前端框架自带了 (2)然后把参数扔到service层获取返回值 (3)使用PaginationUtil获取了一个响应头headers里面包含总页数、当前页数等前端框架需要的信息这些信息在响应header里 (4)最后把查询到的数据放入响应体格式可以认为是JsonArray返回给前端
3.PaginationUtil样例 import org.springframework.data.domain.Page;
import org.springframework.http.HttpHeaders;
import org.springframework.web.util.UriComponentsBuilder;public final class PaginationUtil {private PaginationUtil() {}public static T HttpHeaders generatePaginationHttpHeaders(PageT page, String baseUrl) {HttpHeaders headers new HttpHeaders();headers.add(X-Total-Count, Long.toString(page.getTotalElements()));String link ;if ((page.getNumber() 1) page.getTotalPages()) {link generateUri(baseUrl, page.getNumber() 1, page.getSize()) ; rel\next\,;}// prev linkif ((page.getNumber()) 0) {link generateUri(baseUrl, page.getNumber() - 1, page.getSize()) ; rel\prev\,;}// last and first linkint lastPage 0;if (page.getTotalPages() 0) {lastPage page.getTotalPages() - 1;}link generateUri(baseUrl, lastPage, page.getSize()) ; rel\last\,;link generateUri(baseUrl, 0, page.getSize()) ; rel\first\;headers.add(HttpHeaders.LINK, link);return headers;}private static String generateUri(String baseUrl, int page, int size) {return UriComponentsBuilder.fromUriString(baseUrl).queryParam(page, page).queryParam(size, size).toUriString();}
}
说明 (1)这个方法大概就是把总页数、当前页等信息放入响应头供前端框架使用 (2)前端框架是react antd框架 (3)对应的这个方法也是后端框架自己封装的与前端antd对应