Spring boot项目后端+vue前端分页查询

spirng boot项目结构分为

分页效果如下:

在这里插入图片描述
Gif图片压缩的又有点不清晰,大家凑活着看

实体层:entity

实体层为一些数据库列表的定义的字段,根据自己项目需求写就可以了

DAO层:DAO

@Query(value="SELECT * FROM news n inner join user on n.u_id=user.id join category on n.c_id=category.cid )",nativeQuery=true)
   //认真的读者可以发现,我们定义的方法,返回的类型为<List<Map>>,这是为什么?
   //因为本博客是查询是三个表的数据分页查询,也就是需要三个实体类.
   //所以我们就需要三个表返回的数据放到Map里面.
  //如果单个表直接就可以使用List<A>,2个及多个就需要使用Map
	Page<List<Map>> findAllMap(Pageable page);
	**本项目查询的为三个表进行连接,根据你们需求自己写sql语句**

Service层:Service

在这里插入图片描述

//分页
public	Page<List<Map>> findAll(Pageable page){
		return newsDAO.findAllMap(page);
	}

Controller层:Controller

在这里插入图片描述

//实现分页查询
		@RequestMapping(value="paging")
		@ResponseBody
		public Page<List<Map>> paging(HttpServletRequest request){
			//实例化Sort方法,通过表中的nid查询	
			Sort sort=new Sort(Sort.Direction.ASC,"nid");
			Integer NowPage=Integer.parseInt(request.getParameter("NowPage"));
			//把数据分为几页,从前端代码接受所需要你每页分多少数据
			Integer pagingSize=Integer.parseInt(request.getParameter("pagingSize"));
			Pageable page=PageRequest.of(NowPage-1, pagingSize,sort);
			Page<List<Map>> data=newsService.findAll(page);
			return data;
		}

前端代码,需要导入Jquery Jar包和vue Jar包

Html代码:

<!--分页-->
				<div class="page-bar" id="box">
					<ul>
						<li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一页</a></li>
						<li v-if="cur==1"><a class="banclick">上一页</a></li>
						<li v-for="index in indexs" v-bind:class="{ 'active': cur == index}">
						<a v-on:click="btnClick(index)">{{ index }}</a>
						</li>
						<li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一页</a></li>
						<li v-if="cur == all"><a class="banclick">下一页</a></li>
						<li><a><i>{{all}}</i></a></li>
					</ul>
				</div>

Css代码:

<style type="text/css">
			     	/*分页*/
			#box{margin:0 auto;width:500px}
			.page-bar{
			margin:40px auto;
			margin-top: 150px;
			
			}
			ul,li{
			margin: 0px;
			padding: 0px;
			}
			li{
			list-style: none
			}
			.page-bar li:first-child>a {
			margin-left: 0px
			}
			.page-bar a{
			border: 1px solid #ddd;
			text-decoration: none;
			position: relative;
			float: left;
			padding: 6px 12px;
			margin-left: -1px;
			line-height: 1.42857143;
			color: #5D6062;
			cursor: pointer;
			margin-right: 20px;
			}
			.page-bar a:hover{
			background-color: #eee;
			}
			.page-bar a.banclick{
			cursor:not-allowed;
			}
			.page-bar .active a{
			color: #fff;
			cursor: default;
			background-color: #E96463;
			border-color: #E96463;
			}
			.page-bar i{
			font-style:normal;
			color: #d44950;
			margin: 0px 4px;
			font-size: 12px;
			}
     </style>

Vue代码:

<script type="text/javascript">
	var vue=new Vue({
		el:'#app',
		data:{
			newss:[],
			all: 10,	//总页数, 并不是真正的页数,达到一个占位的作用
     			cur: 1,		//当前页数
     			totalPage: 0,	//当前条数
		},
		methods:{
			//分页函数
     			dataListFn:function(index){
     				var page=index;
     				$.post("/news/paging",{NowPage:page,pagingSize:2},function(data){
     				//查询
     				vue.newss=[];
     					var len=data.content.length;
     					var dataList=data.content;	//获取数据列表
     					for(var i=0;i<len;i++){
     						vue.newss.push(dataList[i]);
     					}
     					for (var i=0;i<len;i++){
			            var dataee=new Date(vue.newss[i].addtime).toJSON();
			            vue.newss[i].addtime = new Date(+new Date(dataee)+8*3600*1000).toISOString().replace(/T/g,' ').replace(/\.[\d]{3}Z/,'');
            			//alert(vue.newss[i].addtime);
          			 }
      					vue.all=data.totalPages;	//总页数
     					vue.cur=data.number+1;	//当前页面
     					vue.totalPage=data.numberOfElements;	//当前条数
     				})
     			},
     			
				//分页
					btnClick: function(data){//页码点击事件
					if(data != this.cur){
					this.cur = data 
					}
					//根据点击页数请求数据
					this.dataListFn(this.cur.toString());
					},
					pageClick: function(){
					//根据点击页数请求数据
					this.dataListFn(this.cur.toString());
					}
					},
					computed: {
					//分页
					indexs: function(){
					var left = 1;
					var right = this.all;
					var ar = [];
					if(this.all>= 5){
					if(this.cur > 3 && this.cur < this.all-2){
					left = this.cur - 2
					right = this.cur + 2
					}else{
					if(this.cur<=3){
					left = 1
					right = 5
					}else{
					right = this.all
					left = this.all -4
					}
					}
					}
					while (left <= right){
					ar.push(left)
					left ++
					}
					return ar
					}
		},
		mounted(){
			//this.check();
			this.dataListFn(1);	//自动调用这个函数,达到代开界面就实现分页效果
		},
		
	})
</script>
发布了23 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45736927/article/details/102886250