赞
踩
一、高校教材管理系统简述:
系统采用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 )
(3)Thymeleaf前端模板使用要在html开头写明:
html lang="zh" xmlns:th="http://www.thymeleaf.org"
xmlns="http://www.w3.org/1999/xhtml">
Idea会对于静态文件的标签报错的,但不影响运行结果
(4)请求发分页参数的获取
使用Boostrap的分页,后端接收参数方法:
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
int pageNum= attributes.getRequest().getParameter("pageNum");
int pageSize= attributes.getRequest().getParameter("pageSize");
(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>
(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";
}
(7)js动态为input赋值
$('#urole').val('0');
(8)前端传递的json格式参数
var datas=JSON.stringify({
"id":id
}
(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; }
(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);
}
});
(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>
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);
}
(15)boostraptable获取勾选选项值的方法:
var rows = $("#bootstrap-table").bootstrapTable('getSelections')
//获取table中所有的值
var allTableData = $('#bootstrap-table1').bootstrapTable('getData');
(16)th:href携带多个参数的方法
带一个参数:
<a th:href="@{/sign/details(signId=${t.signId})}" ></a>
带两个参数:
<a th:href="@{/mobileSign/signDetails(id=${id},name=${name})}"></a>
(17)使用ajax请求之后是跳转不了的(注意)
(18)mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串’'进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了.
<if test="otime!=null">
otime = #{otime,jdbcType=DATE},
</if>
七、开发感悟
(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
声明:如有侵权,请联系博主删除,谢谢!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。