当前位置:   article > 正文

基于javaweb高校教材管理系统的设计与实现_学校教材系统的环境搭建

学校教材系统的环境搭建

一、高校教材管理系统简述:
系统采用java语言设计,本系统主要以web的三层架构模式来划分,系统的项目环境包括Maven依赖包管理环境,JDK开发环境,存储数据的mysql数据库环境,项目运行的Tomcat服务器运行环境等。下载相应软件,在电脑上安装并配置相应变量。其中在设计系统过程中,所采用的集成开发编程软件是Intelij IDEA,该软件具有强大的集成功能,如支持maven、spring等,而且还具有提示功能,快速便捷等优点,能够很大程度上提高系统开发效率。另外,为了简化数据库信息的管理和查看,安装Navicat对数据库进行可视化管理。整个系统开发环境的准备基本完成。系统开发环境准备完成后,开始搭建项目开发环境,本系统采用的技术是SpringBoot+Mybatis的框架技术,并且使用Maven来管理依赖的jar包。Maven的安装可以通过去官网下载,也可以通过Intelij IDEA提供的Maven插件。创建Maven项目,根据项目开发需要的依赖jar包,在Maven的配置文件pom.xml添加对应的依赖java语句,利用Maven可以动态的来管理项目的依赖jar包。其次,创建配置文件application.properties和yml文件,可以在配置文件中配置连接数据库和打印日志的语句,mapper映射文件路径等。之后,根据系统开发的设计思想Spring MVC的三层架构,在src/main/java目录下分别创建三层架构对应的的package,包括Service服务层包,Pojo实体类包,Dao数据库接口层包,Controller控制层包等。综上,系统开发环境,项目环境搭建以及框架整合基本完成。项目的结构如图
系统功能结构图
二.、功能划分:
根据用户角色分为四种分别是教务处(管理者),教师,学生,商家。
(1)教务处:用户信息管理,教材信息管理,教材发布,审批,订购,教材库存管理,领取管理,选择教材管理,教材开放管理,通知管理。
(2)教师:教材发布,选择教材,领取教材,教材缴费,发布通知
(3)学生:选择教材,教材缴费,领取教材,查看通知
(4)商家:确认订单,教材订单发货
(5)公共功能模块:登陆,个人信息管理

三、采用的技术:
后端使用SpringBoot+Mybatis技术,前端使用Thymleaf的模板渲染,数据交互使用boostrap+Jquer技术。

四、数据库表设计
(1)用户表(4张)分别存储教务处,教师,学生,商家
(2)教材信息表(1张)
(3)教材库存信息表(1张)
(4)教材订购信息表(2张)分别存储订购人信息,订购的教材信息
(5)选择教材信息(2张)分别存储选择人信息,选择的教材信息
(6)领取教材信息(2张)分别存储领取人信息,领取的教材信息
(7)通知信息表(3张)分别存储通知信息,发送人,接收人

五、功能界面(部分):
(1)系统主界面图:
在这里插入图片描述
(2)用户信息管理页面
用户信息管理页面
(3)教材信息管理页面教材信息管理页面
六、开发过程中遇到的问题以及注意事项:
(1)数据库字段类型为Datetime对应的实体类型为Date,是坑。
(2)前端这种跳转页面携带参数的方法:window.location.href=’/adm/main?user_id=’+user_id+"&urole="+urole+"&udept="+udept+"&uname="+uname;
(3)SpringBoot传递参数给Thymeleaf模板,使用ModelMap,在ModelMap对象必须为该方法的参数,这是个坑

Model,ModelMap,MoelAndView的使用
public String main( String user_id,String urole,String dept,String uname,ModelMap model )
  • 1
  • 2

(3)Thymeleaf前端模板使用要在html开头写明:

html  lang="zh" xmlns:th="http://www.thymeleaf.org"
       xmlns="http://www.w3.org/1999/xhtml">
  • 1
  • 2

Idea会对于静态文件的标签报错的,但不影响运行结果
(4)请求发分页参数的获取
使用Boostrap的分页,后端接收参数方法:

  ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        int pageNum=  attributes.getRequest().getParameter("pageNum");
        int pageSize= attributes.getRequest().getParameter("pageSize");
  • 1
  • 2
  • 3

(5)Mapper.xml中的参数设置问题,id为整形,utelep为String,可用实体类作参数

 <select id="selectEditCheckUtelepUnique" parameterType="com.yang.wang.pojo.YuserPojo" resultType="int">
    SELECT
    COUNT(*)
    FROM yuser
    WHERE id=#{id} and utelep=#{utelep,jdbcType=VARCHAR}
  </select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(6)获取URl中的参数使用@PathVariable注解

@RequestMapping("/adm/system/user/edit/{id}")
    public String AdmEditView(@PathVariable("id") Integer id, ModelMap modelMap){

        System.out.println("跳转到修改用户页面—————————————");
        YuserPojo yuserPojo=userService.selectByUserId(id);
        modelMap.put("user",yuserPojo);
        return "system/user/edit";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(7)js动态为input赋值

$('#urole').val('0');
  • 1

(8)前端传递的json格式参数

var datas=JSON.stringify({
    "id":id
    }
  • 1
  • 2
  • 3

(9)比较日期大小(2020-3-12这种格式的)
有个坑2020-3-12和2020-03-12比较起来是不一样的

var trtime = new Date(Date.parse($("input[name='trtime']").val()));
var tctime = new Date(Date.parse($("input[name='tctime']").val()));

var date=new Date();
var year=date.getFullYear();
var month=date.getMonth()+1;
if(month<10){
   month="0"+month
}
var day=date.getDate();
var nowdate =year+"-"+month+"-"+day
var systemdate=new Date(Date.parse(nowdate));

console.log(trtime,tctime,systemdate)
if(systemdate>=trtime&&systemdate>=tctime){
   return true;
}else{
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(10)Boostrap-table中自定义的ajax请求

$.ajax({
    cache : true,
    type : "POST",
    contentType : " application/json;charset=UTF-8",//必须
    url :"system/ylbook/remove",
    data : datas,
    async : false,
    error : function(request) {
        $.modal.alertError("系统错误");
    },
    success : function(data) {
        $.operate.successCallback(data);
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(11)删除语句Mybati的血坑啊
在这里插入图片描述
(12)判断list类型是否为空用list.isEmpty()方法
(13)input值改变时触发函数,和自动计算金额值
在这里插入图片描述
(14)删除时传递的参数为String的bno,String[]的bmno,Mybatis的写法
Mapper文件传递的参数可以为List,Map,Array等类型
foreach循环

<delete id="deleteByBmnoAndBno" parameterType="java.util.List">
    delete FROM ylbookdetails WHERE bno= #{list[0]} and bmno in
    <foreach collection="list" item="bmno" open="(" separator="," close=")" >
        #{bmno}
    </foreach>
</delete>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Service层写法:

public int removeYlbookdetails(String bno,String bmno) {
    String[] aaa = bmno.split(",");
    List<String> a=new ArrayList<>();
    a.add(bno);
    for(int i=0;i<aaa.length;i++){
        a.add(aaa[i]);
    }
    System.out.println(a.get(0));
  // return ylbookDao.deleteByBmnoAndBno(bno,aaa);
    return ylbookDao.deleteByBmnoAndBno(a);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(15)boostraptable获取勾选选项值的方法:

  var rows = $("#bootstrap-table").bootstrapTable('getSelections')
   //获取table中所有的值
   var allTableData = $('#bootstrap-table1').bootstrapTable('getData');
  • 1
  • 2
  • 3

(16)th:href携带多个参数的方法

带一个参数:
<a th:href="@{/sign/details(signId=${t.signId})}" ></a>

带两个参数:
<a th:href="@{/mobileSign/signDetails(id=${id},name=${name})}"></a>
  • 1
  • 2
  • 3
  • 4
  • 5

(17)使用ajax请求之后是跳转不了的(注意)
(18)mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串’'进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了.

<if test="otime!=null">
  otime = #{otime,jdbcType=DATE},
</if>
  • 1
  • 2
  • 3

七、开发感悟
(1)心细,容易由于一个小小的错误而花费比较长时间,代码打得不够多,经验少(比如mapper文件参数漏了个逗号,#{}分开了多个逗号.)
(2)易混乱,容易搞乱代码直接的逻辑关系什么的
(3)遇到问题,先思考,能找到原因的并解决,不能找到原因的百度并解决,解决完后该如何总结记录
(4)学会有Bug如何调试

八、参考学习:

Jqurey的检验:

https://www.cnblogs.com/ada-zheng/p/3875773.html

BooStrap-table:

https://www.cnblogs.com/laowangc/p/8875526.html

声明:如有侵权,请联系博主删除,谢谢!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/634657
推荐阅读
相关标签
  

闽ICP备14008679号