最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Data JPA實現(xiàn)排序與分頁查詢超詳細(xì)流程講解

 更新時間:2022年10月28日 10:01:32   作者:showswoller  
在介紹Spring Data JPA的時候,我們首先認(rèn)識下Hibernate。Hibernate是數(shù)據(jù)訪問解決技術(shù)的絕對霸主,使用O/R映射技術(shù)實現(xiàn)數(shù)據(jù)訪問,O/R映射即將領(lǐng)域模型類和數(shù)據(jù)庫的表進(jìn)行映射,通過程序操作對象而實現(xiàn)表數(shù)據(jù)操作的能力,讓數(shù)據(jù)訪問操作無須關(guān)注數(shù)據(jù)庫相關(guān)的技術(shù)

前言

在實際開發(fā)場景中,排序與分頁查詢是必須的,幸運的是Spring Data JPA充分考慮了排序與分頁查詢的場景,為我們提供Sort類 Page接口 Pageable接口 下面通過一個實戰(zhàn)來闡明

1、創(chuàng)建持久化實體類

創(chuàng)建名為com.ch.ch6_4.entity的包 并在該包中創(chuàng)建名為Article和Author的持久化實體類

代碼如下

Article

package com.ch.ch6_2.entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "article_table")
@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
public class Article  implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	//標(biāo)題
	@NotEmpty(message = "標(biāo)題不能為空")
    @Size(min = 2, max = 50)
    @Column(nullable = false, length = 50) 
    private String title;
	//文章內(nèi)容
    @Lob  //大對象,映射 為MySQL的Long文本類型
    @Basic(fetch = FetchType.LAZY) 
    @NotEmpty(message = "內(nèi)容不能為空")
    @Size(min = 2)
    @Column(nullable = false) 
    private String content;
    //所屬作者,文章與作者是多對一的關(guān)系
    @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
    //可選屬性optional=false,表示author不能為空。刪除文章,不影響用戶
    @JoinColumn(name="id_author_id")//設(shè)置在article表中的關(guān)聯(lián)字段(外鍵)
    @JsonIgnore
    private Author author;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Author getAuthor() {
		return author;
	}
	public void setAuthor(Author author) {
		this.author = author;
	}
}

Author

package com.ch.ch6_2.entity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "author_table")
@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
public class Author implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	//作者名
	private String aname;
	//文章列表,作者與文章是一對多的關(guān)系
    @OneToMany(
    		mappedBy = "author",
    		cascade=CascadeType.ALL,
    		targetEntity = Article.class, 
    		fetch=FetchType.LAZY
    		)
    private List<Article> articleList;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getAname() {
		return aname;
	}
	public void setAname(String aname) {
		this.aname = aname;
	}
	public List<Article> getArticleList() {
		return articleList;
	}
	public void setArticleList(List<Article> articleList) {
		this.articleList = articleList;
	}
}

2、創(chuàng)建數(shù)據(jù)訪問層

創(chuàng)建名為com.ch.ch6_4repository的包 并在該包中創(chuàng)建名為AuthorRepository的接口

package com.ch.ch6_2.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.ch.ch6_2.entity.Author;
public interface AuthorRepository extends JpaRepository<Author, Integer>{
	/**
	 * 根據(jù)文章標(biāo)題包含的內(nèi)容,查詢作者(關(guān)聯(lián)查詢)
	 * 相當(dāng)于JPQL語句:select a from Author a  inner join  a.articleList t where t.title like %?1%
	 */
	public Author findByArticleList_titleContaining(String title);
	/**
	 * 根據(jù)文章標(biāo)題包含的內(nèi)容,查詢作者(關(guān)聯(lián)查詢)
	 */
	@Query("select a from Author a  inner join  a.articleList t where t.title like %?1%" )
	public Author findAuthorByArticleListtitleContaining(String title);
}

3、創(chuàng)建業(yè)務(wù)層

創(chuàng)建名為com.ch.ch6_4.service的包 并在該包中創(chuàng)建名為ArticleAndAuthorService的接口和接口實現(xiàn)類ArticleAndAuthorServiceImpl

接口

package com.ch.ch6_2.service;
import java.util.List;
import com.ch.ch6_2.entity.Article;
import com.ch.ch6_2.entity.Author;
public interface AuthorAndArticleService {
	public void saveAll();
	public List<Article> findByAuthor_id(Integer id);
	public List<Article> findByAuthor_aname(String aname);
	public Author findByArticleList_titleContaining(String title);
	public Author findAuthorByArticleListtitleContaining(String title);
}

接口實現(xiàn)類

package com.ch.ch6_2.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ch.ch6_2.entity.Article;
import com.ch.ch6_2.entity.Author;
import com.ch.ch6_2.repository.ArticleRepository;
import com.ch.ch6_2.repository.AuthorRepository;
@Service
public class AuthorAndArticleServiceImpl implements AuthorAndArticleService{
	@Autowired
	private AuthorRepository authorRepository;
	@Autowired
	private ArticleRepository articleRepository;
	@Override
	public void saveAll() {
		//保存作者(先保存一的一端)
		Author a1 = new Author();
		a1.setAname("陳恒1");
		Author a2 = new Author();
		a2.setAname("陳恒2");
		ArrayList<Author> allAuthor = new ArrayList<Author>();
		allAuthor.add(a1);
		allAuthor.add(a2);
		authorRepository.saveAll(allAuthor);
		//保存文章
		Article at1 = new Article();
		at1.setTitle("JPA的一對多111");
		at1.setContent("其實一對多映射關(guān)系很常見111。");
		//設(shè)置關(guān)系
		at1.setAuthor(a1);
		Article at2 = new Article();
		at2.setTitle("JPA的一對多222");
		at2.setContent("其實一對多映射關(guān)系很常見222。");
		//設(shè)置關(guān)系
		at2.setAuthor(a1);//文章2與文章1作者相同
		Article at3 = new Article();
		at3.setTitle("JPA的一對多333");
		at3.setContent("其實一對多映射關(guān)系很常見333。");
		//設(shè)置關(guān)系
		at3.setAuthor(a2);
		Article at4 = new Article();
		at4.setTitle("JPA的一對多444");
		at4.setContent("其實一對多映射關(guān)系很常見444。");
		//設(shè)置關(guān)系
		at4.setAuthor(a2);//文章3與文章4作者相同
		ArrayList<Article> allAt = new ArrayList<Article>();
		allAt.add(at1);
		allAt.add(at2);
		allAt.add(at3);
		allAt.add(at4);
	public Author findByArticleList_titleContaining(String title) {
		return authorRepository.findByArticleList_titleContaining(title);
	}
	@Override
	public Author findAuthorByArticleListtitleContaining(String title) {
		return authorRepository.findAuthorByArticleListtitleContaining(title);
	}
}

4、創(chuàng)建控制器類

創(chuàng)建名為com.ch,ch6_4.controller的包 并在該包中創(chuàng)建名為TestSortAndPage的控制器類

package com.ch.ch6_4.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ch.ch6_4.entity.Author;
import com.ch.ch6_4.service.ArticleAndAuthorService;
@Controller
public class TestSortAndPage {
	@Autowired 
	private ArticleAndAuthorService articleAndAuthorService;
	@RequestMapping("/findByAnameContaining")
	@ResponseBody
	public List<Author> findByAnameContaining(String aname, String sortColum){
		return articleAndAuthorService.findByAnameContaining(aname, sortColum);
	}
	@RequestMapping("/findAllAuthorByPage")
	/**
	 * @param page第幾頁
	 */
	public String findAllAuthorByPage(Integer page, Model model){
		return articleAndAuthorService.findAllAuthorByPage(page, model);
	}
}

5、創(chuàng)建View視圖頁面

創(chuàng)建index.html頁面 部分代碼如下

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>顯示分頁查詢結(jié)果</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" rel="external nofollow"  />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" rel="external nofollow"  />
</head>
<body>
	<div class="panel panel-primary">
		<div class="panel-heading">
			<h3 class="panel-title">Spring Data JPA分頁查詢</h3>
		</div>
							</tr>
							<tr>
							<td colspan="2" align="right">
								<ul class="pagination">
									<li><a>第<span th:text="${page}"></span>頁</a></li>
									<li><a>共<span th:text="${totalPage}"></span>頁</a></li>
									<li><a>共<span th:text="${totalCount}"></span>條</a></li>
									<li>
									<a th:href="@{findAllAuthorByPage(page=${page-1})}" rel="external nofollow"  th:if="${page != 1}">上一頁</a>
									</li>
									<li><a th:href="@{findAllAuthorByPage(page=${page+1})}" rel="external nofollow"  th:if="${page != totalPage}">下一頁</a>
									</li>
								</ul>
							</td>
						</tr>
						</tbody>
					</table>
				</div>
			</div>
		</div>
	</div>
</body>
</html>

6、運行主類 效果如下

到此這篇關(guān)于Spring Data JPA實現(xiàn)排序與分頁查詢超詳細(xì)流程講解的文章就介紹到這了,更多相關(guān)Spring Data JPA排序與分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)統(tǒng)計字符串中字符及子字符串個數(shù)的方法示例

    java實現(xiàn)統(tǒng)計字符串中字符及子字符串個數(shù)的方法示例

    這篇文章主要介紹了java實現(xiàn)統(tǒng)計字符串中字符及子字符串個數(shù)的方法,涉及java針對字符串的遍歷、判斷及運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Java中join線程操作實例分析

    Java中join線程操作實例分析

    這篇文章主要介紹了Java中join線程操作,結(jié)合實例形式分析了java使用join方法操作線程的相關(guān)原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-09-09
  • SpringBoot的啟動過程源碼詳細(xì)分析

    SpringBoot的啟動過程源碼詳細(xì)分析

    這篇文章主要介紹了SpringBoot的啟動過程源碼詳細(xì)分析,SpringBoot啟動的時候,會構(gòu)造一個SpringApplication的實例,構(gòu)造SpringApplication的時候會進(jìn)行初始化的工作,需要的朋友可以參考下
    2023-11-11
  • java Hibernate多對多映射詳解及實例代碼

    java Hibernate多對多映射詳解及實例代碼

    這篇文章主要介紹了java Hibernate多對多映射詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Springboot3利用redis生成唯一訂單號的實現(xiàn)示例

    Springboot3利用redis生成唯一訂單號的實現(xiàn)示例

    本文主要介紹了Springboot3利用redis生成唯一訂單號的實現(xiàn)示例,包括UUID、雪花算法和數(shù)據(jù)庫約束,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • springboot+thymeleaf+layui的實現(xiàn)示例

    springboot+thymeleaf+layui的實現(xiàn)示例

    本文主要介紹了springboot+thymeleaf+layui的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 舉例講解Java的JSON類庫GSON的基本用法

    舉例講解Java的JSON類庫GSON的基本用法

    GSON是谷歌在GitHub上開源的Java的JSON格式轉(zhuǎn)換類庫,能夠?qū)崿F(xiàn)Java對象向JSON的序列和反序列,這里我們就來舉例講解Java的JSON類庫GSON的基本用法:
    2016-06-06
  • spring帶bean和config如何通過main啟動測試

    spring帶bean和config如何通過main啟動測試

    這篇文章主要介紹了spring帶bean和config,通過main啟動測試,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Spring中的事務(wù)管理及實現(xiàn)方式解析

    Spring中的事務(wù)管理及實現(xiàn)方式解析

    這篇文章主要介紹了Spring中的事務(wù)管理及實現(xiàn)方式解析,Spring事務(wù)管理基于底層數(shù)據(jù)庫本身的事務(wù)處理機(jī)制,數(shù)據(jù)庫事務(wù)的基礎(chǔ),是掌握Spring事務(wù)管理的基礎(chǔ),這篇總結(jié)下Spring事務(wù),需要的朋友可以參考下
    2024-01-01
  • Spring異常實現(xiàn)統(tǒng)一處理的方法

    Spring異常實現(xiàn)統(tǒng)一處理的方法

    這篇文章主要介紹了Spring異常實現(xiàn)統(tǒng)一處理的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12

最新評論

古田县| 涡阳县| 荣成市| 泾川县| 张掖市| 北碚区| 阳信县| 讷河市| 当雄县| 五原县| 平南县| 南汇区| 游戏| 华坪县| 萍乡市| 平昌县| 芮城县| 潼关县| 齐齐哈尔市| 大庆市| 古蔺县| 瑞丽市| 延长县| 南涧| 阿拉善左旗| 班戈县| 盈江县| 西平县| 泸溪县| 康定县| 喜德县| 慈利县| 凤山县| 德钦县| 新化县| 县级市| 民权县| 清新县| 建阳市| 靖宇县| 正镶白旗|