【仿牛客网笔记】初识Spring Boot,开发社区首页-开发社区首页

在这里插入图片描述
请添加图片描述
get/set
请添加图片描述
请添加图片描述
SelectDiscussPosts方法实现的是分页的方法,分页通过两个参数,一个是这一页的起始行的行号offset,另一个是这一页最多显示多少数据limit。拼接是将着两个拼接到一起就可以。分页的时候需要知道一共有多少页。通过一共有多少条数据,每一页显示多少条数据,经过相除就可以得出。

请添加图片描述
查询表里一共有多少条数据。查询帖子的行数。我们可以在参数前面加一个@Param的注解,这个注解是为给参数起一个别名。这里别名和参数名一致。
参数名比较长的时候可以去一个别名。
如果我们在SQL里需要用到动态的条件,需要用到参数,且只有一个的时候需要用到别名。
@param注解用于给参数取别名
如果只有一个参数,并且在里使用,则必须加别名

实现首页的查询方法需要一个配置文件。
请添加图片描述
声明类名空间
请添加图片描述
请添加图片描述
resultType说明返回类型。
<include…>引用复用的sql
status!=2 是因为拉黑的帖子不显示,当status为2是拉黑的帖子。
当判断的时候可以使用if标签,还有一个test的属性,属性里面的条件userId!=0的时候user_id为数据库的userId
然后我们需要对帖子进行排序,order by 是排序,
order by type desc,type是帖子的类型,0是普通帖子,1是置顶帖子。倒序的话就是(大的在上)置顶的排在上面。
score desc,
create_time desc 。 类型一样的前提下,创建时间倒序,就是新的帖子在前面。目前暂时这样,但是到后面会按着帖子的热度进行。

实现分页是通过limit,后面加上offset和limit请添加图片描述

请添加图片描述
上图是为下图方法的实现。因为DIscussPost是自定义的实体类,所以需要通过泛型,说明List中的类型。
请添加图片描述
select count(id) 查询id的数量
where中不能为拉黑的帖子,并且通过if拼接userId。
因为不显示错误,我们可以在对Mapper进行测试。
请添加图片描述
当前的业务没有什么参数,所做的事情和Mapper是一样的。查到数据后没有什么额外的处理,所以这个方法看起来很简单,似乎Controller不调用Service,直接掉用Mapper,不建议这样做。因为即便当前这个业务的方法很简单,但是将来这个业务的方法,需要在业务层面做一些处理的时候,需要这个层面在加代码,就很麻烦。跨层次的话,在后面的安全性等方面也有困扰。总之,Service再简单也需要调用。
)
在这里插入图片描述

声明一个方法,查询某一页的数据,返回的是一个集合,集合里面封装的是DiscussPost,方法名为findDiscussPosts,参数有userId,起始行offset,每页显示的最多的数量limit.
第二个方法是声明查询行数的方法。参数为UserId.
我们还有一个需要处理的地方,在DiscussPost查询的结果中有一个外键userId,我们在页面上显示的时候不会显示userId,肯定显示的是用户的名称,有两种办法,一种是写SQL的时候关联查询用户处理,还有一种单独的针对每一个DiscussPost单独查一下userId,然后组合到一起。我们采用后者,将来的话使用Redis缓存数据的时候我们会方便。
请添加图片描述
针对第二种方式我们需要在提供一个业务方法,更够根据UserId查询到user,这个方法写在DiscussPostService中不合适,对User的操作我们可以新创建一个Service,UserService中,加上@Service注解,我们查询的是用户,我们需要注入用户的Mapper,编写一个根据userId查询User的方法,参数为id.
到这里我把业务层需要的方法准备好了。

请添加图片描述

接下来,我们把视图层基于service实现。视图层需要用到准备好的页面,我们要引入到项目中,静态资源粘贴到static下,网页粘贴到templates下请添加图片描述
index.html还是首页。
开发视图层首先新建一个Controller,Controller的访问路径是可以省略的,Controller查询需要调用service,j将需要的service注入。注入的时候还需要注入userService,因为DiscussPostService中是查询的值是userid,我们通过userServiced查询user的详细的信息。请添加图片描述请添加图片描述
增加一个处理请求的方法,@RequestMapping定义了一个访问路径,访问的首页所有路径名为index,查询的请求方式为GET请求,这个方法响应的是一个网页,所以不用ResponseBody,这个方法我们可以返回ModelAndVie或者返回String,返回的是视图的名字。参数为Model,我们需要Model携带数据,最终返回模板的路径。
请添加图片描述
下面处理这个请求的逻辑,查询,第一步查询到前十条数据,分页查询findDiscussPosts,返回多条数据list,查到的数据遍历一下。创建一个List封装Discuss和user对象,使用Map(类或者数组都可以),实例化。遍历list,首先判断list不为空,在这种情况下遍历,每次遍历的都需要将结果装入到Map中,实例化Map,最后通过put的方法装入Map,装入查询的userid和user完整的数据,即user对象,最后需要将遍历的结果装入到新的集合里。最后的最后我们需要将查询的结果装入到model里展示,通过model里面的addAttribute方法,第一个参数是自己起的名字,第二参数遍历的结果。

在这里插入图片描述
最后一步处理模板。
请添加图片描述
模板引擎

xmlns:th="http://www.thymeleaf.org"

我们页面上依赖了一些文件或图片,图片是绝对路径,非常详尽。相对路径也可以通过模板引擎处理。请添加图片描述
通过下图中的格式让thymeleaf去static找这个资源。
请添加图片描述
结尾处也引入了js也是这么处理。请添加图片描述
以li为模板遍历输出,使用th:each,进行foreach循环,然后循环内对指定数据,访问是集合或者数组,Controller中是discussPosts,每次遍历我们都会得到集合中的一个Map,需要一个变量指代Map,请添加图片描述
a标签里面是显示头像,头像显示需要动态的,显示的是帖子发布人的头像,将src加上th: map的user的headerUrl
请添加图片描述
帖子的标题也需要动态的,使用th:text=“ " 或者 t h : u t e x t = " { }" 或者 th:utext=" "或者th:utext="{}” 两者的区别是只是文本中有转移字符的时候,utext可以显示它原有的样子。

请添加图片描述
置顶,精华这需要判断,不是每个帖子需要置顶,精华。需要加判断显示 th:if=“{}”,需要根据帖子的类型 map.post.type1或者 map.post.status1
请添加图片描述
发布的作者
请添加图片描述
发布的时间为 th:text=“{map.post.createtime}” 这个显示的是西方的时间,通过因引用工具,进行格式化,首先引入#是引入这个工具#dates.format(map.post.createTime,‘yyyy-MM-dd HH:mm:ss’)
请添加图片描述

新建一个类用来封装分页的条件,属性有当前页码,显示上限,数据总数,查询路径。
请添加图片描述
需要对当前页码做一个判断请添加图片描述
对limit做一个判断,每页显示的数据范围在1-100条之间。
请添加图片描述
对rows做判断,当大于等于0的时候。
请添加图片描述
还需要一写方法,当数据库查询的时候和页面显示的时候需要用到。上面的条件是通过下面的方法计算而来。
通过页码算出其实行,获取当前页的起始行。
请添加图片描述
获取总的页数,为了显示页码做边界运算。有余数的时候都多加一页。
请添加图片描述
根据当前页获取其实页和当前页
请添加图片描述
请添加图片描述
我们需要设置总行数,通过用户id实现,当前的访问路径。
查询的时候可以从总的页码可以从page中 。
在这里插入图片描述

打开index.html实现分页。
如果当有数据的时候才显示数据,一个可以看discussPosts,另一个可以看Page,Page中有行数。Ppage.rows相当于getRows 请添加图片描述

访问路径后,还要有参数,首页就是当前页current
当参数有多个条件的是后 (current=1,limit=5)
请添加图片描述
上一页是实际的页减1,下一页是实际的页加1
请添加图片描述
numbers.sequence是一个连续的数组,但是连续的数据需要有起始和终止。叫i
通过表示显示i

请添加图片描述
disable 是不可点的,active时刻点
需要动态判断
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值