spring-data-jpa 使用

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

只是記錄下使用方法 :

1. ?RPC接口 service實現類調用,PageRequest對象會實現分頁、排序。

 @Overridepublic Object getAAAByPage(Pageable pageable, String startTime, String endTime, String XXX, String XXX,String XXX, String XXX, String position, String jobTypeId,String projectId, String busId, String jobContent, String status) {Page<Workxxx> page = workxxxRepository.findAll(new Specification<Workxxx>() {@Overridepublic Predicate toPredicate(Root<Workxxx> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> list = new ArrayList<>();if(null != employeeNo && !"".equals("employeeNo")){list.add(cb.equal(root.<String>get("employeeNo"), employeeNo));}if(null != subDepartmentId && !"".equals("subDepartmentId")){list.add(cb.equal(root.<String>get("subDepartmentId"), subDepartmentId));}if(null != status && !"".equals("status")){list.add(cb.like(root.<String>get("status"), status));}if (null != startTime && !"".equals("startTime")) {list.add(cb.greaterThanOrEqualTo(root.<Date>get("startTime"), DateUtil.stringToDate(startTime)));}if (null != endTime && !"".equals("endTime")) {list.add(cb.lessThanOrEqualTo(root.<Date>get("endTime"), DateUtil.stringToDate(endTime)));}if (list.size() != 0) {Predicate[] p = new Predicate[list.size()];return cb.and(list.toArray(p));} else {return null;}}}, new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort()));return page;}

rest 接口直接調用RPC接口實現,rest接口實現 :

  @Path("/我是路徑名")@GET@Overridepublic Payload getWorkxxxFillSituationByPage(@QueryParam("page") @DefaultValue("0") int page,@QueryParam("size") @DefaultValue("10") int size,@QueryParam("startTime") String startTime,@QueryParam("endTime") String endTime, ... ...           @QueryParam("status") String status) {List<Order> orders = new ArrayList<Order>();orders.add(new Order(Direction.DESC,"startTime")); // startTime 為 排序依據字段Pageable pageable = new PageRequest(page, size, new Sort(orders));try {return new Payload(workXXXService.getAAAByPage(pageable, startTime,endTime, XXX, departmentId, XXX, employeeName, position, XXX, XXX, busId, jobContent, status));} catch (Exception ex) {logger.debug("XXX查詢失敗:",ex.getMessage());return null;}}

用GET請求訪問接口:

http://localhost:8082/類上注解的路徑/我是路徑名?page=0&size=2

2. ?這個接口只用聲明就可以了,基本的增、刪、改、查。JPA已經實現,并且只要被調用會自動執行,會自動解析方法名并處理對應業務。

這個相當于dao的聲明,也就是mybatis中的mapper :

@Repository
public interface WorkxxxRepository extends JpaRepository<Workxxx, Integer>, JpaSpecificationExecutor<Workxxx> {}

要用自己寫的原生sql,也可以實現它,并寫上自己的sql,給上注解說明使用本地sql?

 @Query(value = "select u.id, u.username from XXX_user u inner join XXXX gpr on u.id =  gpr.USER_ID  where PROJECT_ID=?1 and USER_ID in (select USER_ID from " +"XXX where department_id = ?2)", nativeQuery=true)public List<Object[]> getXXXUserIds(String projectId, String departmentId);

3. ?實體給上對應注解,會自動關聯到實體對應數據庫表

@Entity(name = "workxxx")
@Table(name = "XXX_work_xxx")
@JsonIgnoreProperties(ignoreUnknown = true)
public class WorkWeight implements Serializable {private static final long serialVersionUID = 8245791221237374426L;@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(name = "employee_id", nullable = false)private String employeeId; ... ...

4. RPC接口 ?service 也可以不調用 repository ,直接寫sql 并運行:PageImpl 對象可以幫助封裝返回的數據

  @Overridepublic Page<WorkxxxDto> getXXXCollectByPage(Pageable pageable, String startTime, String endTime,String projectId, String XXX, String employeeName, boolean isLastDetail) {EntityManager em = emf.createEntityManager();String sql ="select ad.id, gww.start_time,ad.name,gww.XXX," +" COUNT(gww.id) human,FORMAT(SUM(gww.proportion*5),1) days," +" gww.employee_no,gww.XXX,gww.XXX,gww.job_content,gww.XXX,gww.end_time "+" FROM XXX gww ,XXX ad " +" WHERE gww.department_id = ad.id and gww.job_type_id != 3 ";if(null != startTime && !"".equals(startTime)){  // 時間周期條件查詢sql += " and gww.start_time >= '"+startTime+"'";}if(null != endTime && !"".equals(endTime)){  // 時間周期條件查詢sql += " and gww.end_time <= '"+endTime+"'";}if(null != projectId && !"".equals("projectId")){sql += " and gww.projectId="+employeeName;}if(isLastDetail){ // 詳情sql +=  " and ad.id = '"+organizationId+"' GROUP BY gww.id";}else{// 根據組織分組if(null != organizationId && !"".equals(organizationId)){sql +=  " and ad.parent_id = '"+organizationId+"' GROUP BY WEEKOFYEAR(gww.start_time),ad.id";}else{ // 按部門分組,參數組織id為空sql +=  " and ad.parent_id in(SELECT id FROM XXX WHERE parent_id ='') GROUP BY WEEKOFYEAR(gww.start_time),ad.id,gww.project_id";}}String countSql ="select count(*) from ("+sql+") a"; // 查詢總條數(別忘了給子查詢起個別名,比如:a )Query queryCount =  em.createNativeQuery(countSql);long totalElements = ((BigInteger)queryCount.getSingleResult()).longValue();//  查詢sqlsql += " ORDER BY gww.start_time DESC LIMIT "+pageable.getPageNumber()*pageable.getPageSize() +","+pageable.getPageSize();Query queryList =  em.createNativeQuery(sql);List<Object> objecArraytList = queryList.getResultList();List<WorxxxDto> dtoList = new ArrayList<WorkxxxDto>();for(int i=0;i<objecArraytList.size();i++) {Object[] obj = (Object[]) objecArraytList.get(i);WorkxxxDto wwdto = new WorkxxxDto();wwdto.setOrganizationId(String.valueOf(obj[0]));wwdto.setStartTime(String.valueOf(obj[1]));wwdto.setOrganizationName(String.valueOf(obj[2]));wwdto.setProjectName(String.valueOf(obj[3]));String inputHumanDays = String.valueOf(obj[4]);                   dtoList.add(wwdto);}em.close();return new PageImpl(dtoList,pageable,totalElements);}

rest 接口直接調用RPC接口實現,rest接口實現 :
? ?在sql中已經人工分頁排序

    @Path("/getBBB")@GET@Overridepublic Payload getWorkWeightApprovaEevolveByPage(@QueryParam("page") @DefaultValue("0") int page,@QueryParam("size") @DefaultValue("10") int size,@QueryParam("startTime") String startTime,@QueryParam("endTime") String endTime,@QueryParam("organizationId") String XXX,@QueryParam("isComplete") @DefaultValue("false") boolean isComplete) {Pageable pageable = new PageRequest(page, size);Map<String,Object> resultMap = null;try{return new Payload(workxxxCollectService.getWorkxxxApprovaEevolveByPage(pageable, startTime,endTime, organizationId, isComplete));}catch (Exception ex){logger.debug("XXX查詢失敗:",ex.getMessage());logger.debug(ex.getMessage());return null;}}

5. ?接口返回 json 數據樣例:

 {"payload": {"content": [{"id": 20,"xxxyeeId": "21","xxxeeNo": "2","exeName": "xx需",                   "xxxtName": "XXXxx部","sxxxxxtId": "005FD84B2xxx3C0D956D","xxxxntName": "XXX室",                   "xxxxn": 0.4,"sxxime": "2017-08-28","xxime": "2017-09-03","status": 2,                   "updateTime": "2017-12-21","createBy": "ABC46xxx7CD79D2","updateBy": "22","xag": "0","cxxxt": 0}],"last": true,"totalElements": 1,  // 總記錄條數"totalPages": 1,"number": 0,"size": 2,"first": true,"sort": [{"direction": "DESC",  // 倒序"property": "startTime",   // 排序依據字段,可以多字段"ignoreCase": false,"nullHandling": "NATIVE","ascending": false}],"numberOfElements": 1   // 當前頁記錄條數},"request_id": "2993e849-d4bf-442f-8690-6056b3f80377"}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450564.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker的安裝與安裝mysql(mac,centos為例)

一、mac安裝docker 1、去這個網站下載安裝https://www.docker.com/get-started 2、運行docker 運行開啟docker docker run -dp 80:80 docker/getting-started 二、centos8安裝docker 1、安裝docker 下載低版本的 yum install -y docker-ce --nobest 2、安裝擴展 wget http…

配置PPPOE

先配置服務端PPPOE-Server先為路由添加一個賬號為PPP所使用[PPPOE-Server]aaa [PPPOE-Server-aaa]local-user test password cipher 123 //添加一個本地賬號[PPPOE-Server-aaa]local-user test service-type ppp//設置test賬號類型為PPP賬號[PPPOE-Server]ip pool test//添加一…

eclipse棄坑記第一篇之在idea上配置Tomcat環境并創建Javaweb項目的詳細步驟原創

IntelliJ IDEA是一款功能強大的開發工具&#xff0c;在代碼自動提示、重構、J2EE支持、各類版本工具(如git、svn、github)、maven等方面都有很好的應用。 IntelliJ IDEA有免費的社區版和付費的旗艦版。免費版只支持Java等為數不多的語言和基本的IDE特性&#xff0c;旗艦版還支持…

laravel安裝prettier,git hook代碼格式化工具

1、安裝prettier的php擴展 npm install --global prettier prettier/plugin-php 2、安裝husky&#xff0c;lint-staged&#xff08;git鉤子&#xff09;使用 npm i prettier lint-staged husky -D 3、修改package.json文件 在scripts后面添加兩個函數 "husky": …

C語言指針數組和數組指針

一、指針數組和數組指針的內存布局 初學者總是分不出指針數組與數組指針的區別。其實很好理解&#xff1a;指針數組&#xff1a;首先它是一個數組&#xff0c;數組的元素都是指針&#xff0c;數組占多少個字節由數組本身決定。它是“儲存指針的數組”的簡稱。 數組指針&#xf…

求二叉樹的高度

1 int GetHeight(BinTree BT)2 {3 int HL, HR, MaxH;4 5 if(BT)6 {7 HL GetHeight(BT->Left); //求左子樹的高度8 HR GetHeight(BT->Right); //求右子樹的高度9 MaxH (HL > HR) ? HL : HR; //取左右子樹較大的高…

Json與List的相互轉換

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 問題由來&#xff1a; 最近由于做一個項目&#xff0c;項目的一個功能就是根據Listview的內容生成一個二維碼&#xff0c;然后掃描二維…

機器學習常用模型

&#xff08;原作&#xff1a;MSRA劉鐵巖著《分布式機器學習&#xff1a;算法、理論與實踐》。這一部分敘述很清晰&#xff0c;適合用于系統整理NN知識&#xff09; 線性模型 線性模型是最簡單的&#xff0c;也是最基本的機器學習模型。其數學形式如下&#xff1a;g(X;W)WTX。有…

(轉)告別程序員生涯,一點感慨,與諸君共勉

轉自&#xff1a;https://blog.csdn.net/phphot/article/details/2230411 再過幾天&#xff0c;我就正式告別程序員生涯了&#xff0c;這也是我最后一次以職業程序員身份在CSDN發表文章。小弟談談入行幾年來的感受&#xff0c;做一個人生階段的自我總結&#xff0c;同時希望能…

C語言指針與數組之間的恩恩怨怨

很多初學者弄不清指針和數組到底有什么樣的關系。我現在就告訴你&#xff1a;他們之間沒有任何關系&#xff01;只是他們經常穿著相似的衣服來逗你玩罷了。指針就是指針&#xff0c;指針變量在32 位系統下&#xff0c;永遠占4 個byte&#xff0c;其值為某一個內存的地址。指針可…

CentOS7查看開放端口命令

CentOS7查看開放端口命令CentOS7的開放關閉查看端口都是用防火墻來控制的&#xff0c;具體命令如下&#xff1a;查看已經開放的端口&#xff1a;Linux代碼 firewall-cmd --list-ports 開啟端口Linux代碼 firewall-cmd --zonepublic --add-port80/tcp --permanent 命令含義&…

referer參數和addslashes()函數的騷路子

TIPS: 此函數確實是過濾用戶輸入的&#xff0c;當gpc未開啟的時候使用addslashes()函數進行過濾&#xff0c;當開啟gpc的時候直接返回&#xff0c;那么問題就來了&#xff0c;當php開啟gpc的時候直接返回字符串&#xff0c;但是gpc是只針GET,POST,COOKIE三種超全局變量進行過濾…

MySQL 的各個json 函數說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如果英文的不方便閱讀&#xff0c;請參考個人收錄的另一篇中文解說&#xff1a;MySQL中json函數說明和舉例 只是為了方便 自己用的時候…

訂單編號,遞增且不連續(php版)

1、實現方式&#xff0c;使用while循環&#xff0c;比較low&#xff0c;200w條數據 2s public function getMany ($startNum, $count) {$num $startNum;$codes[] $startNum;for($i1;$i<$count;$i){$num1 random_int(1,9);while($num $num1) {$num1 random_int(1,9);}$…

一文搞懂:詞法作用域、動態作用域、回調函數、閉包

把以前一直只限于知道&#xff0c;卻不清晰理解的這幾個概念完完整整地梳理了一番。內容參考自wiki頁面&#xff0c;然后加上自己一些理解。 詞法作用域和動態作用域 不管什么語言&#xff0c;我們總要學習作用域(或生命周期)的概念&#xff0c;比如常見的稱呼&#xff1a;全局…

C語言函數指針

一、函數指針的定義 顧名思義&#xff0c;函數指針就是函數的指針。它是一個指針&#xff0c;指向一個函數。看例子&#xff1a;A)char * (*fun1)(char * p1,char * p2);B)char * *fun2(char * p1,char * p2);C)char * fun3(char * p1,char * p2);看看上面三個表達式分別是什么…

程序員進階之算法練習:LeetCode專場

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 本文由落影發表 前言 LeetCode上的題目是大公司面試常見的算法題&#xff0c;今天的目標是拿下5道算法題&#xff1a; 題目1是基于鏈表的大數加法&#xff0c;既考察基本數據結構的了解&#xff0c;又考察在…

vim 安裝vim-prettier

1、在.vimrc中添加 配置沒有安裝成功的話 git clone https://github.com/prettier/vim-prettier Plug prettier/vim-prettier, { do: yarn install, for: [javascript, typescript, css, less, scss, json, graphql, markdown, vue, yaml, html, php] } let g:prettier#aut…

詳解Mysql中的JSON系列操作函數

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、方法羅列&#xff1a; 分類 函數 描述創建jsonjson_array 創建json數組json_object 創建json對象 json_quote 將json轉成json字符串…

WEB/H5性能優化總結

我們今天來說說前端圖形渲染優化&#xff0c;因為我接下來的時間可能要開始研究webgl方面的東西&#xff0c;所以就在這里把之前做過的H5做一個總結&#xff0c;現同步發布于GERRY_BLOG&#xff0c;TiMiGerry-知乎&#xff0c;轉載請保留鏈接。靜態資源-圖片 一 、圖片格式JPEG…