写作目的
今天是我在公司上班的第11天,在这里我确实感觉到了自己的成长,进公司的第一天开始我就开始了解公司做的项目,从一个jsp页面看起,了解整个项目的整体架构,一天工作结束之后,第二天开始完成公司项目中的一个简单的增删改查功能模块,熟悉公司开发项目的架构,熟悉系统的业务逻辑。
其实我一直都有写博客的计划,想要在这上边记录自己的学习日记,可能是因为前段时间个人原因迟迟没有动手开始做,现在在公司也陆续的接到不同的任务,今天写这篇文章的目的就是记录在公司的工作和这段时间的学习。
实现的第一个小系统----专业管理系统
- 需求:实现对某大学学院专业的信息管理,包括增加专业、删除专业、修改专业、查询专业的功能
- 技术需求:Java语言、熟悉springMVC的工作流程、前端jqury、ajax会用、Mabitis单表查询的sql书写,因为框架都是公司经理来搭好的所以自己需要做的就是比葫芦画瓢搬砖把功能给实现了
- 对系统的理解:实现这些功能无非就是两条线路
- ①从前端获取到信息向后台发送jsp-Controller-Facade-service-mapper.xml②后台向前端返回数据mapper.xml中的sql语句查询数据-service-Facade-Controller-jsp接收后台传回来的数据

- 代码实现
- from表单使用的post请求当页面访问该链接的时候触发后台Controller中查询所有专业相关信息,返回到该jsp页面
<select name="deptName" id="deptName" onchange="deptChage()">
<option value="">请选择学院名</option>
<c:forEach items="${page.pd.pdDeptN}" var="var">
<option value="${var.DepartmentName }"
${page.pd.deptName==var.DepartmentName?'selected':''}>${var.DepartmentName }</option>
</c:forEach>
</select> <select name="deptMajor" id="deptMajor">
<option value="">全部</option>
<c:forEach items="${page.pd.pdMajorN}" var="var">
<option value="${var.majorName }"
${page.pd.deptMajor==var.majorName ?'selected':''}>${var.majorName }
</option>
</c:forEach>
</select>
<button style="width: 75px; height: 25px;" class="btn btn-df btn-success" type="submit">搜索</button>
<button style="width: 75px; height: 25px;"
class="btn btn-df btn-success" type="button"
onclick="insertMajor();">新增专业</button>
<br />
</div>
```java
//一个table表用来接收后台查询出来的数据
<div
style="position: absolute; top: 135px; width: 100%; height: 600px;">
<table style="width: 100%; font-weight: normal; line-height: 24px;"
class="table table-hover table-striped" id="tablelist">
<thead style="border-bottom: solid; padding-bottom: 2px;">
<tr>
<th class="col-md-1" style="text-align: center;">顺序号</th>
<th class="col-md-3" style="text-align: center;">学院名称</th>
<th class="col-md-1" style="text-align: center;">专业代码</th>
<th class="col-md-3" style="text-align: center;">专业名称</th>
<th class="col-md-4" style="text-align: center;">操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${page.pd.pdList}" var="var" varStatus="status">
<tr>
<td style="color: blue; font-size: 3px; text-align: center;">${(15*(page.currentPage-1))+status.count}</td>
<td style="text-align: center;">${var.DepartmentName }</td>
<td style="text-align: center;">${var.majorCode }</td>
<td style="text-align: center;">${var.majorName }</td>
<td style="text-align: center;">
<button type="button" style="width: 75px; height: 25px;"
class="btn btn-df btn-success " onclick="delMajor(this)">删除信息</button>
<button type="button" style="width: 75px; height: 25px;"
class="btn btn-df btn-success" onclick="updateMajor(this);">修改信息</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
//前端界面的几个js方法
/*增加专业信息开始*/
function insertMajor() {
//页面层
layer.open({
type : 2,
title : '添加专业信息',
shadeClose : true,
shade : false,
maxmin : true, //开启最大化最小化按钮
area : [ '800px', '650px' ],
content : root + 'majormanage/insertMajorInfo'
});
}
//修改专业信息
function updateMajor(id) {
var rows = id.parentNode.parentNode.rowIndex;
//得到所在行的第三列的内容
var majorCode = $("#tablelist tr:eq(" + rows + ") td:eq(2)").html();
alert(majorCode);
$.ajax({
url : root + "majormanage/getMajorBymajorCode",
type : 'post',
data : {
"majorCode" : majorCode
},
datatype : 'json',
success : function(data) {
alert("999999");
if (data!=null){
//页面层
layer.open({
type : 2,
title : '添加专业信息',
shadeClose : true,
shade : false,
maxmin : true, //开启最大化最小化按钮
area : [ '800px', '650px' ],
content : root + 'majormanage/updateMajorInfo'
});
}else {
layer.msg('查询该条记录信息失败')
}
},
error : function() {
console.log('ajax请求失败!');
}
});
}
/*删除信息开始*/
function delMajor(id) {
alert(123);
var rows = id.parentNode.parentNode.rowIndex;
//得到所在行的第三列的内容
var majorCode = $("#tablelist tr:eq(" + rows + ") td:eq(2)").html();
alert(majorCode);
layer.alert('您确定要删除操作吗?', {
skin : 'layui-layer-molv' //样式类名 自定义样式
,
closeBtn : 1 // 是否显示关闭按钮
,
anim : 1 //动画类型
,
btn : [ '确定', '取消' ] //按钮
,
icon : 6 // icon
,
yes : function() {
layer.msg('确定')
$.ajax({
type : "POST",
url : root + "majormanage/deleteMajorByMajorCode",
data : {
"majorCode" : majorCode
},
success : function(data) {
if (data != null) {
layer.msg('删除成功')
//重新加载主页面 刷新信息
location.reload();
} else {
layer.msg('删除失败')
}
},
error : function() {
alert("出现错误");
return false;
}
}) //ajax结束 */
},
btn2 : function() {
layer.msg('取消')
}
});
}
/*删除结束*/
//后端controller中的方法
@Autowired
private MajorManageFacade majorManageFacade;
/**
* 查询所有专业信息( ) 涉及到页面搜索框的数据传输 :如查询到所有学院、查询到所有专业、(Ajax异步刷新)根据学院查询学院所有的专业
*
* @return
*/
@RequestMapping(value = "/getAllList")
public ModelAndView findAllList(Page page) throws Exception {
ModelAndView mv = this.getModelAndView();
String deptName = null;
String deptMajor = null;
PageData pd = new PageData();
List<PageData> pdList = new ArrayList<PageData>();
List<PageData> pdDeptN = new ArrayList<PageData>();
List<PageData> pdMajorN = new ArrayList<PageData>();
if (this.request.getMethod() == "POST") {
deptName = this.request.getParameter("deptName");
deptMajor = this.request.getParameter("deptMajor");
page.getPd().put("deptName", deptName);
page.getPd().put("deptMajor", deptMajor);
// 将pd实例化把前端传过来的专业名和学院名放进这个map集合中,
// 进而返回到前端界面,设置select默认选中值
pd = this.getPageData();
pd.put("deptName", deptName);
pd.put("deptMajor", deptMajor);
pdList = majorManageFacade.getAllList(page);
pdDeptN = majorManageFacade.getAllDeptment(page);
pdMajorN = majorManageFacade.getDeptmentByDepN(pd);
pd.put("pdList", pdList);
pd.put("pdDeptN", pdDeptN);
pd.put("pdMajorN", pdMajorN);
page.setPd(pd);
} else {
try {
pd = this.getPageData();
System.out.println("触发查询功能前端传的参数:" + pd);
pdList = majorManageFacade.getAllList(page);
pdDeptN = majorManageFacade.getAllDeptment(page);
pdMajorN = majorManageFacade.getAllMajor(pd);
pd.put("pdList", pdList);
pd.put("pdDeptN", pdDeptN);
pd.put("pdMajorN", pdMajorN);
pd.put("deptName", "");
pd.put("deptMajor", "");
page.setPd(pd);
} catch (Exception e) {
logger.error(e.toString(), e);
}
}
mv.addObject("page", page);
mv.setViewName("system/majorManage");
return mv;
}
/**
* 主界面新增专业信息按钮 用来给layer弹出层返回学院信息的
*
* @return ModelAndView
*/
@RequestMapping(value = "/insertMajorInfo")
public ModelAndView insertMajorInfo(Page page) throws Exception {
ModelAndView mv = this.getModelAndView();
PageData pd = new PageData();
List<PageData> pdDeptN = new ArrayList<PageData>();
List<PageData> pdDeptC = new ArrayList<PageData>();
try {
pd = this.getPageData();
pdDeptN = majorManageFacade.getAllDeptment(page);
pdDeptC = majorManageFacade.getDeptCodeByName(pd);
pd.put("pdDeptN", pdDeptN);
pd.put("pdDeptC", pdDeptC);
page.setPd(pd);
} catch (Exception e) {
logger.error(e.toString(), e);
}
mv.addObject("page", page);
mv.setViewName("system/insertMajorInfo");
return mv;
}
/***
* 新增专业
* return:
*/
@RequestMapping(value = "/insertMajor")
@ResponseBody
public List<PageData> insertMajor(Page page) throws Exception {
PageData pd = new PageData();
List<PageData> pdList = new ArrayList<PageData>();
try {
pd = this.getPageData();
pdList = majorManageFacade.insertMajor(pd);
pd.put("pdList", pdList);
page.setPd(pd);
} catch (Exception e) {
logger.error(e.toString(), e);
}
System.out.println("最终数据为" + pdList);
return pdList;
}
/**
* 根据学院名查询
*/
@RequestMapping(value = "/getDeptmentByDepN")
@ResponseBody
public List<PageData> getDeptmentByDepN(Page page) throws Exception {
PageData pd = new PageData();
List<PageData> pdList = new ArrayList<PageData>();
try {
pd = this.getPageData();
System.out.println("111111111111");
System.out.println(pd);
pdList = majorManageFacade.getDeptmentByDepN(pd);
pd.put("pdList", pdList);
page.setPd(pd);
} catch (Exception e) {
logger.error(e.toString(), e);
}
System.out.println("最终数据为" + pdList);
return pdList;
}
/**
* 根据专业编码删除专业信息
*/
@RequestMapping(value = "/deleteMajorByMajorCode")
@ResponseBody
public List<PageData> deleteMajorByMajorCode(Page page) throws Exception {
PageData pd = new PageData();
List<PageData> pdList = new ArrayList<PageData>();
try {
pd = this.getPageData();
pdList = majorManageFacade.deleteMajorByMajorCode(pd);
pd.put("pdList", pdList);
page.setPd(pd);
} catch (Exception e) {
logger.error(e.toString(), e);
}
System.out.println("最终数据为" + pdList);
return pdList;
}
//facade层中对应controller的方法 以查询为例 其他类似不再累述
/**
* 查询所有专业信息
*
* @return
*/
public List<PageData> getAllList(Page page) {
List<PageData> majorPd = new ArrayList<PageData>();
try {
majorPd = majorManageService.queryAllMajor(page);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return majorPd;
}
//service层中的查询方法
@SuppressWarnings("unchecked")
public List<PageData> queryAllMajor(Page pd) throws Exception {
List<PageData> pdMajorList=(List<PageData>) dao.findForList("MajorManageMapper.queryAllMajorlistPage", pd);
//System.out.println("输出所有专业:"+ pdMajorList);
return pdMajorList;
}
//mapper文件中的查询语句
<mapper namespace="MajorManageMapper">
<select id="queryAllMajorlistPage" parameterType="page"
resultType="pd">
SELECT DepartmentName,majorCode ,majorName
FROM md_major LEFT JOIN md_collegedepartment
ON md_major.departmentCode = md_collegedepartment.DepartmentCode
WHERE 1=1
<if test="pd.deptName != null">
and DepartmentName LIKE CONCAT('%',#{pd.deptName},'%')
</if>
<if test="pd.deptMajor != null">
and majorName LIKE CONCAT('%',#{pd.deptMajor},'%')
</if>
</select>
<delete id="deleteMajorByMajorCode" parameterType="pd">
delete from md_major where
majorCode = #{majorCode}
</delete>
<insert id="insertMajor" parameterType="pd">
insert into md_major(majorName,majorCode,departmentCode,DescInfo) values(#{majorName},#{majorCode},#{deptCode},#{descInfo})
</insert>
<update id="updateMajor" parameterType="pd">
update md_major set majorName=#{majorName},majorCode=#{majorCode},DepartmentName=#{deptName},departmentCode=#{deptCode},DescInfo=#{descInfo} where majorCode=#{majorCode}
</update>
</mapper>
上传下载功能的实现总结
* 上传文件我是使用form表单的形式进行提交的,当点击上传的时候会进入controller中的方法进行处理,把文件上传到自己在代码中写的文件夹中,同样点击下载进入方法执行下载文件功能
<!-- 上传附件 enctype:处理编码格式问题 -->
<form id="uploadForm" action="<%=path%>/majormanage/fileUpload"
method="post" enctype="multipart/form-data">
<table>
<tr>
<td>请选择文件:</td>
<td><input type="file" name="file"></td>
<td><input id="upload" type="submit" value="上传"></td>
</tr>
</table>
</form>
<h3>文件下载</h3>
<a href="<%=path%>/majormanage/download?filename=sliver2020042918011898.txt">
sliver2020042918011898.txt
</a>
/**
* 文件上传
*/
@RequestMapping(value = "/fileUpload", produces = "text/html;charset=utf-8")
public @ResponseBody String fileUpload(MultipartFile file, HttpServletRequest request) {
System.out.println("进入上传文件的方法");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
String res = sdf.format(new Date());
if (file.isEmpty()) {
return "上传的文件是空的!请重新上传";
}
// uploads文件夹位置
String rootPath = request.getSession().getServletContext().getRealPath("resources/uploads/");
System.out.println("uploads文件夹位置:" + rootPath );
// 原始名称
String originalFileName = file.getOriginalFilename();
// 新文件名
String newFileName = "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf("."));
// 创建年月文件夹
Calendar date = Calendar.getInstance();
File dateDirs = new File(date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH) + 1));
// 新文件
File newFile = new File(rootPath + File.separator + dateDirs + File.separator + newFileName);
// 判断目标文件所在目录是否存在
if (!newFile.getParentFile().exists()) {
// 如果目标文件所在的目录不存在,则创建父目录
newFile.getParentFile().mkdirs();
}
System.out.println(newFile);
// 将内存中的数据写入磁盘
try {
file.transferTo(newFile);
System.out.println("数据写入磁盘成功 ");
// 完整的url
String fileUrl = date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/" + newFileName;
String show = "上传成功-文件存放位置:"+rootPath+":"+fileUrl;
return show;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "文件上传失败!";
}
}
/***
* 文件下载
*/
@RequestMapping(value="/download")
public ResponseEntity<byte[]> download(HttpServletRequest request,@RequestParam("filename") String filename)throws Exception{
//下载文件路径
//String path = request.getSession().getServletContext().getRealPath("resources/uploads/2020/4");
String path = "H://Giswork//SchoolProve//WebRoot//resources//uploads//2020//4";
System.out.println("+++++"+path);
File file = new File(path + File.separator + filename);
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,解决中文名称乱码问题
String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1");
//通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("attachment", downloadFielName);
//application/octet-stream : 二进制流数据(最常见的文件下载)。
return new ResponseEntity<byte[]>(org.apache.commons.io.FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
展示一下执行效果图





写在最后
* 今天这是第一次写这么长的博客,很多地方很多细节写的不是很好,在我以后的工作学习中我会继续学习,希望自己可以每天有所成长,有所收获!
版权声明:本文为qq_39120693原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。