基于Java+Springboot+vue在线版权登记管理系统设计实现_著作权预约登记平台设计与实现

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1.2 研究内容:

现今,互联网在我们的日常生活占据着日益重要的地位,我们也越来越离不开对移动设备、电脑等上网设备的使用。传统的在线版权登记系统模式主要依靠管理人员纯手工记录的相关信息,比较繁琐,不方便查找,也非常容易出现错误。如今,如果再通过手工记录版权,将大大不利于在线版权登记系统行业管理相关的在线版权登记系统信息,严重影响在线版权登记系统行业的发展。因此,本人结合传统的在线版权登记系统业务模式和先进的电子信息管理模式,使用Java语言编程设计功能模块,AJAX实现前台和后台之间的交互,MySQL数据库创建和存储数据表格,对在线版权登记系统进行设计和开发。本系统的设计有利于相关行业实现最大化的资源管理与共享,促进相关行业的信息交流、分工合作,提高相关工作人员的工作效率,最终实现整个在线版权登记系统行业服务的信息化管理。

二、主要技术:

2.1  Spring Boot****框架

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

2.2 MYSQL数据库:

在动态网站的兴起之初,作为高级编程语言的Java自然不会放弃这个领域的蛋糕。Sun公司推出了Servlet作为输出动态网站的一种技术标准,虽然不怎么受当时程序员的喜爱,但是当初也没有太多的选择,随后几个月java语言问世,不考虑性能和效率如何,起码在书写网页所需要的动态代码块和静态代码块方面进行了区分,让书写效率和可读效率大大的提升,所以很多Java程序员以及刚入行的初级程序员都选择了java语言作为自己职业的发展方向,Sun公司为了维护Java语言在高级编程语言上的江湖地位,防止java继续抢走市场份额占有率,Sun公司联合Apache基金会研发了一个关于Java动态网页的一个新型的技术标准,这就是vue技术。

2.3 IDEA开发工具

软件开发使用的编程语言有许多种,而每种编程语言需要通过与其相对应的开发平台进行编译和运行。IDEA平台都是目前比较常用的开发环境。IDEA平台是开源的,具有功能强大、可扩展性强等特点,可以应用于C/S模式软件的开发,但是它所占据的内存容量比较大,运行较慢,并且其并未提供Tomcat服务器,运行过程中需要将代码发布到Tomcat服务器中,测试使用的时间较长,故而不太适用于B/S模式软件的开发。

IDEA平台是建立在IDEA平台的基础之上,增加了许多的应用插件,比如Tomcat插件、mail组件等。IDEA平台增加了Tomcat插件,代码编写完成或者更新完成时,程序员无需将代码发布到Tomcat服务器中,可以直接通过调试实现程序的运行。IDEA平台增加了Mail组件,该组件可以为本程序提供标准的邮件方法,便于开发人员完成与邮件功能相关的编译工作。IDEA平台占据的内存空间较小,同时其也具有较高的可扩展性,编程人员可以根据需要添加和使用相关的插件。可以支持主流的开源产品和相关的开发框架,被广泛运用到相关的移动系统、web应用系统等开发中。相比于IDEA平台,本系统比较适合使用IDEA平台进行编程和开发

三、系统设计:

3.1 系统功能设计:

在线版权登记****系统主要功能设计:

用户登录、注册、修改密码、首页信息展示、系统轮播图  、模糊搜索、收藏、版权热度点击数量统计、版权文件下载、评论、收藏、富文本图文上传、文件上传、下载、视频上传下载、版权资料、视频资料、公告信息、加上一些基本业务功能的添加修改删除操作等

3.2 登录流程设计:​​

3.3 登录时序图设计:

​​​​

四、功能截图:

4.1 系统前台

4.1.1 用户个人中心:

4.1.2 上传版权信息:

4.1.3 版权信息查看:

4.1.4 版权信息查看:

4.1.5 版权信息详情:

4.1.6 系统公告信息:

4.1.7 论坛信息模块:

4.2 系统后台:

4.2.1 用户管理:

4.2.2 基础数据管理:

4.2.3 版权信息管理:

4.2.4 系统信息管理

五、部分数据设计:

在数据库设计过程中,概念设计阶段是逻辑设计阶段得以实现的基础,也是根据用户参与情况确定对数据的处理要求,从而使得数据库设计成功的关键。概念设计的主要任务是将现实世界的所收集到的使用需求转化为抽象的信息世界结构的过程,能够真实的反映现实生活中实体与实体之间的联系,数据库的相关语法和代码比较容易理解和修改,方便相关人员将相关的数据信息存储到数据库中,并对其进行修改和使用[18]。

通过将现实世界中的实体、属性、联系等内容进行概念设计,建立比较抽象的概念数据模型,即E-R图。通过E-R图可将现实世界抽象到的概念设计转变成数据库的实体设计,并且能够明显的看见各个实体之间,数据的流动情况,具体较强的表达能力,更加方便于开发人员寻找与发现用户具体的需求[19]。因此,E-R的建立,在整个数据库的设计过程中,起着至关重要的作用。本系统主要的实体有管理员、用户、留言等。在E-R图中,矩形表示实体集,椭圆形表示属性,菱形表示联系。其中,联系的类型包括1:1(一对一)、1:n(一对多)、n:m(多对多)关系。

下图是版权实体和其具备的属性:

 下图是版权收藏实体和其具备的属性:

下图是资料实体和其具备的属性

六、代码参考


/**
 * 版权
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/banquan")
public class BanquanController {
    private static final Logger logger = LoggerFactory.getLogger(BanquanController.class);

    private static final String TABLE_NAME = "banquan";

    @Autowired
    private BanquanService banquanService;

    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表非注册的service
    //注册表service
    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        CommonUtil.checkMap(params);
        PageUtils page = banquanService.queryPage(params);

        //字典表数据转换
        List<BanquanView> list =(List<BanquanView>)page.getList();
        for(BanquanView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        BanquanEntity banquan = banquanService.selectById(id);
        if(banquan !=null){
            //entity转view
            BanquanView view = new BanquanView();
            BeanUtils.copyProperties( banquan , view );//把实体数据重构到view中
            //级联表 用户
            //级联表
            YonghuEntity yonghu = yonghuService.selectById(banquan.getYonghuId());
            if(yonghu != null){
            BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
            view.setYonghuId(yonghu.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody BanquanEntity banquan, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,banquan:{}",this.getClass().getName(),banquan.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("用户".equals(role))
            banquan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<BanquanEntity> queryWrapper = new EntityWrapper<BanquanEntity>()
            .eq("yonghu_id", banquan.getYonghuId())
            .eq("banquan_name", banquan.getBanquanName())
            .eq("banquan_types", banquan.getBanquanTypes())
            .eq("banquan_clicknum", banquan.getBanquanClicknum())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        BanquanEntity banquanEntity = banquanService.selectOne(queryWrapper);
        if(banquanEntity==null){
            banquan.setBanquanClicknum(1);
            banquan.setInsertTime(new Date());
            banquan.setBanquanYesnoTypes(1);
            banquan.setCreateTime(new Date());
            banquanService.insert(banquan);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody BanquanEntity banquan, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,banquan:{}",this.getClass().getName(),banquan.toString());
        BanquanEntity oldBanquanEntity = banquanService.selectById(banquan.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            banquan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<BanquanEntity> queryWrapper = new EntityWrapper<BanquanEntity>()
            .notIn("id",banquan.getId())
            .andNew()
            .eq("yonghu_id", banquan.getYonghuId())
            .eq("banquan_name", banquan.getBanquanName())
            .eq("banquan_types", banquan.getBanquanTypes())
            .eq("banquan_clicknum", banquan.getBanquanClicknum())
            .eq("insert_time", banquan.getInsertTime())
            .eq("banquan_shenhe_time", banquan.getBanquanShenheTime())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        BanquanEntity banquanEntity = banquanService.selectOne(queryWrapper);
        if("".equals(banquan.getBanquanPhoto()) || "null".equals(banquan.getBanquanPhoto())){
                banquan.setBanquanPhoto(null);
        }
        if("".equals(banquan.getBanquanFile()) || "null".equals(banquan.getBanquanFile())){
                banquan.setBanquanFile(null);
        }
        if(banquanEntity==null){
            banquanService.updateById(banquan);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
    * 审核
    */
    @RequestMapping("/shenhe")
    public R shenhe(@RequestBody BanquanEntity banquanEntity, HttpServletRequest request){
        logger.debug("shenhe方法:,,Controller:{},,banquanEntity:{}",this.getClass().getName(),banquanEntity.toString());

        BanquanEntity oldBanquan = banquanService.selectById(banquanEntity.getId());//查询原先数据

//        if(banquanEntity.getBanquanYesnoTypes() == 2){//通过
//            banquanEntity.setBanquanTypes();
//        }else if(banquanEntity.getBanquanYesnoTypes() == 3){//拒绝
//            banquanEntity.setBanquanTypes();
//        }
        banquanEntity.setBanquanShenheTime(new Date());//审核时间
        banquanService.updateById(banquanEntity);//审核

        return R.ok();
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        List<BanquanEntity> oldBanquanList =banquanService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        banquanService.deleteBatchIds(Arrays.asList(ids));

        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")


# 最后

学习视频:

![](https://img-blog.csdnimg.cn/img_convert/03752147ae728fcd1434d7fdc5caa06a.webp?x-oss-process=image/format,png)

大厂面试真题:

![](https://img-blog.csdnimg.cn/img_convert/9e6ed111d0ca72484f6740c49e0764d1.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")


# 最后

学习视频:

[外链图片转存中...(img-2YwGlEs0-1715516579518)]

大厂面试真题:

[外链图片转存中...(img-puuinrsd-1715516579518)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值