湖科大校园美食项目笔记

湖科大校园美食项目笔记

HTML标签

z-index:可以设置元素堆叠顺序,用来解决两元素不重叠问题,z-index值越大堆叠,就会叠在上面

position:absolute:设置绝对位置

获取html文本框中的值(dom)

1.var inputDom = document.getElementById(“text”);//找到元素,假如给input元素加了id属性 且 值为:text

2.var text = inputDom.value; //获取元素值

Controller写法

image-20221129222238555

OSS对象上传照片到服务器

image-20221130122430774

form表单enctype属性

enctype:规定了form表单在发送到服务器时候编码方式,有如下的三个值。

  • application/x-www-form-urlencoded:默认的编码方式。但在用文本的传输和MP3等大型文件的时候,使用这种编码就显得效率低下。
  • multipart/form-data:指定传输数据为二进制类型,比如图片,mp3,文件
  • text/plain:纯文本的传输。空格转换为”+”号,但不对特殊字符编码。
1
2
3
4
5
<form action="form_action.asp" enctype="text/plain">
<p>Firstname:<input type="text" name="fname" / ></p>
<p>Lastname:<input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>

定义判断用户名是否存在的方法

count(判断条件)返回满足该条件的数量

文中判断count返回的数值是否大于0,判断是否存在用户

image-20221130150404907

密码加密

image-20221130151145660

PasswordEncoder的bean对象在spring容器中可以在方法中直接注入使用

image-20221130151245946

实现分页功能

1.由于分页功能就是aop操作所以我们首先需要设置拦截器

image-20221201225850586

2.利用ipage对象进行分页查询

加入querywrapper可以条件查询,最后把结果封装在了page对象中

image-20221201225925090

项目报错反思

1.如果代码没错依旧报错可以试着在maven上面找错,可以试着install

三更灯火五更鸡,正是男儿读书时.

给pojo添加数据库不存在的属性

1
@TableField(exist =false)

使pojo类型set方法返回pojo对象

1
@Accessors(chain =true)

程序预处理

创建CommandLineRunner实现类,重写run(String… args)方法,在项目启动时执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Component
public class ViewCountRunner implements CommandLineRunner {
@Autowired
private ArticleDao articleDao;

@Autowired
private RedisCache redisCache;
@Override
public void run(String... args) throws Exception {

List<Article> articles = articleDao.selectList(null);
Map<String, Integer> viewCountMap = articles.stream().collect(Collectors.toMap(article -> article.getId().toString(), article -> {
return article.getViewCount().intValue();
}));
redisCache.setCacheMap("article:viewCount",viewCountMap);
System.out.println("Redis加载成功,viewCount已存入redis");
}
}

定时任务

1.@EnableScheduling第一步配置定时任务,定义在application启动类上

1
2
3
4
5
6
@EnableScheduling
public class HnustApplication {
public static void main(String[] args) {
SpringApplication.run(HnustApplication.class,args);
}
}

2.@Scheduledcron参数指定定时任务的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Scheduled(cron = "0 0/5 * * * ?")
public void updateViewCount(){
System.out.println("定时任务执行了");
//获取redis中的浏览量,map方法可以将对应entry类型的转化为article类型,这里转化为entrySet是为了方便转化
Map<String, Integer> viewCountMap = redisCache.getCacheMap("article:viewCount");

List<Article> articles = viewCountMap.entrySet()
.stream()
.map(entry -> new Article(Long.valueOf(entry.getKey()), entry.getValue().longValue()))
.collect(Collectors.toList());//将流转化为list
//更新到数据库中
articleService.updateBatchById(articles);

}

前端知识加油站

1.src/api路径封装前端访问后端接口的方法(可以在这里设置是否需要token)

1
2
3
4
5
6
7
8
9
10
export function articleList(query) {
return request({
url: '/article/articleList',
method: 'get',
headers: {
isToken: false
},
params: query
})
}

2.调用各组件的方法

1
2
3
4
5
6
7
8
9
10
11
<sg-navbar></sg-navbar>//组件1
<div class="container">
<el-row :gutter="30">
<el-col :sm="24" :md="16" style="transition:all .5s ease-out;margin-bottom:30px;">
<sg-articlelist></sg-articlelist>//组件2
</el-col>
<el-col :sm="24" :md="8" >
<sg-rightlist></sg-rightlist>//组件3
</el-col>
</el-row>
</div>
1
2
3
4
5
6
7
8
9
import header from '../components/header.vue'
import articlelist from '../components/articlelist.vue'
import rightlist from '../components/rightlist.vue'

components: { //定义组件
'sg-navbar':header,
'sg-articlelist':articlelist,
'sg-rightlist':rightlist,
},

3.设置div边框为圆角

1
border-radius: 10px;

springsecurity登录流程

RBAC模型

RBAC(Role-Based Access Control)

设置用户表,权限表,角色表

角色表多权限的集成,可以用来降低冗余

用户可以对应多角色

image-20230222230004790

常用注解

@Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor : 注在类上,提供类的全参构造
@NoArgsConstructor : 注在类上,提供类的无参构造
@Setter : 注在属性上,提供 set 方法
@Getter : 注在属性上,提供 get 方法
@EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j : 注在类上,提供对应的 Logger 对象,变量名为 log

wrapper.in(对应属性,对应值,对应值)实现多参数查询

单取数组中一个属性用流处理方法简洁

image-20230224165043509

使用sql定义mapper方法

多表联查时Mybatis-Plus已经满足不了需要就需要自定义xml文件定义sql方法

1
menuDao.selectPermsByUserId(id)

可以用如两段代码定义

1
2
3
4
public interface MenuDao extends BaseMapper<Menu> {

List<String> selectPermsByUserId(Long userId);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sangeng.mapper.MenuMapper">

<select id="selectPermsByUserId" resultType="java.lang.String">
SELECT
DISTINCT m.perms //distinct去重,因为一个user可能对应多个角色,多个角色可能对应多个相同的权限
FROM
`sys_user_role` ur
LEFT JOIN `sys_role_menu` rm ON ur.`role_id` = rm.`role_id`
LEFT JOIN `sys_menu` m ON m.`id` = rm.`menu_id`
WHERE
ur.`user_id` = #{userId} AND // #{userId}占位符代替方法参数
m.`menu_type` IN ('C','F') AND
m.`status` = 0 AND
m.`del_flag` = 0
</select>
</mapper>

为什么要用xml文件写方法

因为Mybatisplus提供的查询方法只能返回对应表的pojo对象,而关联表是没有用Mybatis生成的,所以需要自己写xml方法映射

如何使用分页查询

1.建立queryWapper对象

2.new一个page对象

3.page.setSize,page.setCurrent

4.page(page,queryWapper)

5.PageVo pageVo = new PageVo(page.getRecords(),page.getTotal());

@Override
public ResponseResult<PageVo> pageTagList(Integer pageNum, Integer pageSize, TagListDto tagListDto) {
    //分页查询
    LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
    //设置查询条件,前面的参数判断是否进行筛选
    queryWrapper.eq(StringUtils.hasText(tagListDto.getName()),Tag::getName,tagListDto.getName());
    queryWrapper.eq(StringUtils.hasText(tagListDto.getRemark()),Tag::getRemark,tagListDto.getRemark());
    
    Page<Tag> page = new Page<>();
    page.setCurrent(pageNum);//设置第几页
    page.setSize(pageSize);//设置一页多少个
    page(page, queryWrapper);
    //封装数据返回
    PageVo pageVo = new PageVo(page.getRecords(),page.getTotal());
    return ResponseResult.okResult(pageVo);
}

查看端口号并停止应用

image-20230312081336429

服务宗旨

顾客至上&质量保障&价格亲民&快速到货

宝塔打包

1.jar包上传到www/wwwroot/new包下

2.jar包需要在项目根目录下运行

1
mvn clean install

3.执行jar包

1
nohup java -jar xxx.jar  > ./demo.log 2>&1 &

外网面板地址: https://120.77.201.84:32006/332b0c3e
内网面板地址: https://172.30.184.102:32006/332b0c3e
username: qpaxfqpq
password: b1e9c9d6