Java四阶段 - 项目
CV键都碎了
真·前端小垃圾,努力混饭的智障
展开
-
根据ID获取问题
定义接口 /** * 根据问题的ID查询一个问题数据 */ Question getQuestionById(Integer id);实现接口 @Override public Question getQuestionById(Integer id) { //selectById mybatisplus自带方法,通过id查询数据。id不是主键时查不到数据 Question question = questionMapper.原创 2022-04-15 17:02:39 · 841 阅读 · 0 评论 -
显示讲师的问题列表
学生界面和讲师界面最大的区别是问题列表,学生显示的是自己发布的问题列表,而讲师界面显示的是讲师发布的问题和讲师需要解答的问题列表。讲师发布的问题的目的是为学生创建经典问题和答案。...原创 2022-04-15 10:33:28 · 636 阅读 · 0 评论 -
重构summernote上传问题中的图片
$(document).ready(function () { $('#summernote').summernote({ height: 300, tabsize: 2, lang: 'zh-CN', placeholder: '请输入问题的详细描述...', callbacks:{ onImageUpload:function (files) { //onIm.原创 2022-04-07 17:30:49 · 458 阅读 · 0 评论 -
上传资源到静态服务器
首先将资源地址写在配置文件中straw.resource.path=file:E:/uploadstraw.resource.host=http://localhost:8899Controller中注入资源public class SystemController { //读取自定义配置信息 @Value("${straw.resource.path}") private File resourcePath; @Value("${straw.resour.原创 2022-04-07 16:34:10 · 267 阅读 · 0 评论 -
静态资源服务器
如何上载问题正文中的图片搭建静态资源服务器application.propertiesserver.port=8899spring.web.resources.static-locations=file:E:/upload然后启动访问URL就可以了原创 2022-04-05 22:30:26 · 789 阅读 · 0 评论 -
同一异常处理
@RestControllerAdvice@Slf4j/** * 同一异常处理 */public class ExceptionControllerAdvice { /** * ServiceException 处理方法 * @param e */ @ExceptionHandler public R handleServiceException(ServiceException e){ log.debug("处理业务异常").原创 2022-04-02 15:16:53 · 110 阅读 · 0 评论 -
创建讲师列表缓存
表结构由于查询标签信息和教师信息需要反复多次对数据库进行查询,每次查询几十毫秒,加起来可能要好几秒,严重影响性能。我们可以增加缓存,这样软件的效率可以提升好多倍。教师的数据可能会有经常变化,我们可以设置一个过期策略,比如一个小时就清空教师散列表,重新加载。...原创 2022-03-21 00:03:57 · 310 阅读 · 0 评论 -
接收表单数据
为了接收表单数据在Vo中创建信息的值对象。//自动生成getset@Data//链式写法,不用写构造器@Accessors(chain = true)public class QuestionVo implements Serializable { @NotBlank(message = "问题不能为空") @Pattern(regexp = "^.{3,50}$", message = "标题3到50个字符") private String title; .原创 2022-03-18 10:53:41 · 230 阅读 · 0 评论 -
动态获取教师列表
和获取标签列表基本一致.首先实现获取教师的接口IUserService中加入抽象方法/** * 获取全部解答问题的老师 * @return 老师列表 */ List<User> getMaster();实现方法 /* User表中,所有type为1的是解答问题老师 */ @Override public List<User> getMaster() { QueryWrapper&l原创 2022-03-15 14:05:25 · 781 阅读 · 0 评论 -
动态获取标签
动态获取标签Vue.component('v-select',VueSelect.VueSelect);let createQuestionApp = new Vue({ el: '#createQuestionApp', data:{ title:'', tags:[], selectedTags: [], }, methods:{ loadTags: function () { .原创 2022-03-14 15:51:37 · 1460 阅读 · 0 评论 -
显示学员发布问题界面
HomeController中写入指向文件 @GetMapping("/question/create") public ModelAndView create(){ return new ModelAndView("question/create.html"); }运行后访问路径即可进入提问界面。原创 2022-03-09 15:36:08 · 156 阅读 · 0 评论 -
PageSize分页导航条
分页算法实现了,还需要分页导航链接。PageHelper属性//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//由于startRow和endRow不常用,这里说个具体的用法//可以在页面中"显示startRow到endRow 共size条数据"//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号原创 2022-03-06 23:52:37 · 286 阅读 · 0 评论 -
Vue显示分页数据
@RestController@RequestMapping("/v1/question")@Slf4jpublic class QuestionController { @Autowired IQuestionService questionService; @GetMapping("/my") public R<PageInfo<Question>> my(Integer pageNumber){ if (pageNumb原创 2022-03-06 23:12:41 · 1099 阅读 · 0 评论 -
PageHelper分页技术
翻页原理数据库中数据往往非常多,实际关心的往往是最新的。通常的做法就是分页显示,将数据按一定排序,最关心的先显示出来,如果需要后序数据,用户发起下一页请求即可。sql翻页语句select id,title from question where user_id=11 limit 0,8;从第0条开始,一页8条数据PageHelper翻页组件第三方组件PageHelper提供了上述页号换算Limit参数算法第一步导入组件父工程pom.xml<properties>.原创 2022-03-06 21:38:44 · 722 阅读 · 0 评论 -
根据标签显示图片
增加界面友好性,为每个问题提供了相关“题图”,但是在数据库中每个问题信息并没有储存图片信息。可以根据tags信息,动态为问题增加一个标签图片属性tagImage,然后利用VUE显示。data:{ myQuestions:[] },methods:{ loadQuestions: function () { $.ajax({ url: '/v1/question/my', method: "G原创 2022-03-06 17:45:37 · 510 阅读 · 0 评论 -
显示标签列表
重构question方法首先得到冗余属性的tags,把tagnames传入方法,先从逗号把字符串切开,定义tags集合,然后对拿到的names进行遍历,通过name2TagMap得到标签名,把标签加入到tags中,然后返回tags。for (Question q : questions){ List<Tag> tags = tagNamesToTags(q.getTagNames()); q.setTags(tags); }原创 2022-02-28 16:07:22 · 110 阅读 · 0 评论 -
获得问题标签列表
考虑到一个问题相关到标签一旦选定就很少更改,所以在Question设计一个冗余类tag_names,储存当前问题相关名称,这样查询标签的时候就不用进行复杂关联查询了。但是客服端如何做到完整的Tag信息呢,可以在服务器端利用缓存的tag信息组装一个信息。...原创 2022-02-28 14:32:16 · 314 阅读 · 0 评论 -
计算时间算法
在method中定义新方法loadQuestions: function () { $.ajax({ url: '/v1/question/my', method: "GET", success: function (r) { console.log("成功加载数据"); console.log(r);原创 2022-02-24 10:29:03 · 115 阅读 · 0 评论 -
前端渲染我的问题数据
/*显示当前用户问题 */let questionsApp = new Vue({ el:'#questionsApp', data:{ myQuestions:[] }, methods: { loadQuestions:function () { $.ajax({ url: '/v1/question/my', method:"GET",原创 2022-02-24 09:54:00 · 359 阅读 · 0 评论 -
查询我的问题
文件结构首先,定义抽象方法。返回值为Listpublic interface IQuestionService extends IService<Question> { List<Question> getMyQuestions();}实现方法@Service@Slf4jpublic class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements原创 2022-02-23 15:13:38 · 313 阅读 · 0 评论 -
获得当前登录用户的用户名
我的问题界面控制器转交给业务层,QuestionMapper中存的是所有问题,所以需要带条件进行查询,查询当前用户的问题。SpringSecurity提供了相关API代码文件结构 <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-test --> <dependency> <groupId>org原创 2022-02-23 09:46:28 · 1255 阅读 · 0 评论 -
利用业务层抓取数据后渲染
上一张已经利用业务层,把数据抓取过来。然后我们利用ajax把数据渲染到网页上。@RestController@RequestMapping("/v1/tags")public class TagController { @Autowired ITagService tagService; @GetMapping("") //用R封装list,然后用list封装tag public R<List<Tag>> tag(){原创 2022-02-21 14:58:47 · 222 阅读 · 0 评论 -
获取标签列表
实现业务层代码定义抽象方法public interface ITagService extends IService<Tag> { List<Tag> getTags();}实现方法@Service@Slf4jpublic class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagService { /** * CopyOnWri..原创 2022-02-18 16:31:04 · 125 阅读 · 0 评论 -
静态首页改成动态
把首页访问templates文件夹内新增homecontrolller@RestController@Slf4jpublic class HomeController { /** * 显示首页 */ @GetMapping("/index.html") public ModelAndView index(){ return new ModelAndView("index"); }}去掉security中的首页不用登录配.原创 2022-02-18 15:25:18 · 63 阅读 · 0 评论 -
热部署功能(不重启编译)
开发每次修改程序都需要重启SpringBoot服务,这种启动方式叫做冷启动,冷启动速度很慢显然非常麻烦,SpringBoot提供了热部署功能,利用这个功能,可以不启动SpringBoot服务就可以使改变生效,大大提升效率。添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId&原创 2022-02-18 15:03:02 · 554 阅读 · 0 评论 -
spring验证框架
添加坐标 <!-- 验证框架 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>在registerVo中添加注解.原创 2022-02-17 17:08:48 · 403 阅读 · 0 评论 -
用Vue完善注册功能
代码文件结构定义util.js类/*通用Js库*//** * AJAx返回状态 * 与服务器R对象中的定义相同 *//**200 OK - [GET]:服务器成功返回用户请求的数据*/ let oK = 200;/** 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。*/ let CREATED = 201;/** 202 Accepted - [*灯:表示一个请求已经进入后台排队(异步任务)*/let ACCEPTED = 202;..原创 2022-02-17 14:36:51 · 497 阅读 · 0 评论 -
引入Vue
在IDEA中安装vue插件<!DOCTYPE html><html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml"><head> <meta charset="UTF-8"> <title>VUE DEMO</title> <!-- 从文件引入 --> <script src="browser_components/vue/原创 2022-02-16 16:33:57 · 224 阅读 · 0 评论 -
初步完成注册功能
重构Json返回值JavaBean类型R,增加失败处理方法,方便处理异常情况的返回值: public static R failed(ServiceException e){ return new R().setCode(e.getCode()).setMessage(e.getMessage()); }ServiceException public int getCode(){ return code; }重构控制器SystemControlle原创 2022-02-16 15:29:45 · 396 阅读 · 0 评论 -
注册业务层实现
文件结构定义异常类ServiceException.javapublic class ServiceException extends RuntimeException { //错误500号码 private int code = R.INTERNAL_SERVER_ERROR; public ServiceException() { } public ServiceException(String message) { super(mes原创 2022-02-16 12:18:58 · 534 阅读 · 0 评论 -
控制器接受表单注册参数
1.流程表单界面 <form action="/register" method="post"> <div class="form-group has-icon"> <input type="text" name="inviteCode" class="form-control" placeholder="请输入邀请码原创 2022-02-11 16:09:16 · 80 阅读 · 0 评论 -
设置注册界面
代码把resgister拖放入register.html中SystemController.java@GetMapping("/register.html") public ModelAndView register(){ return new ModelAndView("register"); }一旦访问register.html就返回ModelAndView .antMatchers( "/index.html", ..原创 2022-02-11 14:15:52 · 155 阅读 · 0 评论 -
URL授权_自定义登录界面
什么是控制授权访问范围是指如何保护控制网站资源可访问范围,使一些资源无需登录也可访问,而一部分需要登录认证才能访问。默认情况下网站的全部资源都被Spring-Security保护起来,但也提供了方法实现控制网站资源访问范围。...原创 2022-02-10 16:03:25 · 487 阅读 · 0 评论 -
利用数据库登录
文件结构首先,我们定义一个接口public interface IUserService extends IService<User> { /** * 根据用户名获取用户详细信息 * 用于Spring-Security 的登录操作, * 登录时候Spring-Security会将登录用户名传递到getUserDetails * 此方法就会取数据库中查找用戶信息 * 由Spring決定是否可以登录 * @param use原创 2022-02-09 17:01:49 · 1232 阅读 · 0 评论 -
UserDetailService连接数据库登录
数据库关系查询流程代码在mapper层定义两个方法,用来查询用户ID和用户对应的权限UserMapper.java @Repository public interface UserMapper extends BaseMapper<User> { //查询用户信息方法 @Select("select * from user where username=#{username}") public Use..原创 2022-02-09 14:59:37 · 246 阅读 · 0 评论 -
系统设计思路及数据库创建
软件分析和设计思路首先分析软件功能,搞清楚业务流转过程然后找出软件中的业务实体,根据实体设计类和数据表,找到数据结构根据业务流程设计软件功能,编写软件代码,编写计算方法。总之:软件=数据结构+算法。先搞清楚数据结构,在实现设计方法。问答系统概要分析用户管理模块,核心功能:登录,注册,权限管理用户问答模块,核心功能:提问,回复问题,讨论,收藏后台:用户管理,系统维护(暂不开发)数据结构设计红色用户管理相关蓝色问答相关创建数据库进入mysqlcrea..原创 2022-02-07 16:01:58 · 468 阅读 · 0 评论 -
问答系统搭建
前后端分离的问答项目。第一次完成项目,逐步添加笔记原创 2022-02-07 15:27:35 · 357 阅读 · 0 评论