在实习单位借Spring框架学做增删改查第四天

        周五!放假!
        干劲涌上来了!

        昨天的代码再重新贴一下:

        FyTestService.java:

package 不.要.在.意.fyTest.service;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


import 不.要.在.意.Page;
import 不.要.在.意.CrudService;
import 不.要.在.意.fyTest.dao.FyTestDao;
import 不.要.在.意.fyTest.entity.FyTestUser;
import 不.要.在.意.FunctionReturn;

@Service										//对于 service层的类,在类上用 @Service注解声明
@Transactional(readOnly =false)							//表示该类需要读写事务支持
//老规矩,不管crudService,写上只是防止以后会有其他相配合的功能要使用它
public class FyTestService extends CrudService<FyTestDao,FyTestUser> {

	//获取page(查)
	public Page<FyTestUser> getFyTestPage(Page<FyTestUser> page,FyTestUser fyTestUser){    
		fyTestUser.setPage(page);
		page.setList(dao.getFyTestUserList(fyTestUser));
		return page;
	}
	
	//fytest表单页面(增)
	public FunctionReturn saveFyTestUser(FyTestUser fyTestUser){
		FunctionReturn functionReturn = new FunctionReturn();
		
		//保存fytest表单信息
		dao.insertFyTestUser(fyTestUser);
		functionReturn.setReturnCode(0);
		functionReturn.setReturnMsg(fyTestUser.getName()+"["+fyTestUser.getTuid()+"]数据添加成功");
		
		return functionReturn;
	}
	
	
	//导出表单数据(查)
	public List<FyTestUser> getChannelMaintainUserExportList(FyTestUser fyTestUser){
		return dao.getFyTestUserList(fyTestUser);
	}
	
	
	//移除表单数据 (删)
	public FunctionReturn deleteFyTestUser(FyTestUser fyTestUser){
		FunctionReturn functionReturn = new FunctionReturn();
		dao.deleteFyTestUser(fyTestUser);
		functionReturn.setReturnCode(0);
		functionReturn.setReturnMsg("移除成功");
		return functionReturn;
	}
		
}

        我去除了昨天"(存在问题)"的那两个注释
        摆了,不纠结他们了,我现在就直接理解下这一整个类是干什么的就好了.
        现在我已经能在里面看到查,增,删的功能了,现在我要自己写一个改的功能
        接上文:

//改状态(改)
	public FunctionReturn updateFyTestUserForStatus(FyTestUser fyTestUser){
		FunctionReturn functionReturn=new FunctionReturn();
		dao.updateFyTestUserForStatus(fyTestUser);
		functionReturn.setReturnCode(0);
		functionReturn.setReturnMsg("状态更改成功");
		return functionReturn;
	}
	
	//改状态(改)
	public FunctionReturn updateFyTestUserForAll(FyTestUser fyTestUser){
		FunctionReturn functionReturn=new FunctionReturn();
		dao.updateFyTestUserForAll(fyTestUser);
		functionReturn.setReturnCode(0);
		functionReturn.setReturnMsg("整体更改成功");
		return functionReturn;
	}
}

        这两段写的相当快速,因为我没去细究各个地方的功能,对比一下就能发现,每块的写法大差不差,只需要改变一下"dao."那行对应的功能就好.

        在我研究web层时,我用大佬昨天教我的理解代码的方式,debug运行一个他们写好的例子,给想看的地方打上断点,然后在程序中挨个功能都试一下,哪个操作触发了断点,那么断点所在的这段代码就对应这段操作.
        用这个办法我很顺畅的理解了例子中的代码,并转化为我所用.
        在web层的编写时我意识到我需要写一个验证工号是否有重复的功能,因为在设置数据表时我将工号设置为了主键.所以我又回去给dao层,service层都补上了这个功能
        PS:这种之前我已经发过整篇代码的文件,要再进行新增时,我只发出新增的代码,在任务完成后我会再重新发一下所有的代码.

        加入FyTestDao.java:

List<FyTestUser> getFyTestUserListForCheckTuid(FyTestUser fyTestUser);	//在新增数据的前一刻使用,检查新建的数据的工号是否跟旧数据有重复

        加入FyTestDao.xml:

<!-- 在新增数据的前一刻使用,检查新建的数据的工号是否跟旧数据有重复 -->
	<select id="getFyTestUserListForCheckTuid" resultType="FyTestUser">
		select
			t.tuid					as"tuid"	
			,t.name					as"name"
			,t.sex					as"sex"
			,t.dep					as"departments"
			,t.status				as"status"
			,t.tel					as"telephone"
			,t.create_time			as"createTime"
			,t.amend_time			as"amendTime"
		from fy_test t
		where upper(t.tuid) = upper('#{tuid}')		<!-- upper 所有小写字母转换为大写字母的大小写转换函数 -->
		order by t.amend_time desc
	</select>

        更新FyTestService.java:

//fytest表单页面(增)
	public FunctionReturn saveFyTestUser(FyTestUser fyTestUser){
		FunctionReturn functionReturn = new FunctionReturn();		
		//1.设置数据表时将工号设计为了主键(不允许有重复数据),所以要将这种情况设置为"储存失败"
		List<FyTestUser> checkList=dao.getFyTestUserListForCheckTuid(fyTestUser);
		if(checkList.size()>0){							//checkList.size返回的数据是数据条数,当数据大于0时代表Dao层在数据库里查到了相同工号的数据	
			functionReturn.setReturnCode(1);			//工号重复是不允许的,返回值"1",代表着错误
			functionReturn.setReturnMsg("添加失败:表单中已存在该工号,请确认");
			return functionReturn;						//因为if成真,工号确实有重复,所以不进行保存操作,直接在此处return,2操作也就不会进行了
		}
		//2.保存fytest表单信息
		dao.insertFyTestUser(fyTestUser);
		functionReturn.setReturnCode(0);
		functionReturn.setReturnMsg(fyTestUser.getName()+"["+fyTestUser.getTuid()+"]数据添加成功");
		
		return functionReturn;
	}

        回到FyTestController.java:

package 不.要.在.意.fyTest.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;		//HttpServletRequest接收来自客户端的请求
import javax.servlet.http.HttpServletResponse;		//HttpServletResponse发出对客户端的响应

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;				//它允许控制器向视图传递数据
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;


import 不.要.在.意.Page;
import 不.要.在.意.DateUtils;
import 不.要.在.意.Exceptions;
import 不.要.在.意.ExportExcel;
import 不.要.在.意.BaseController;
import 不.要.在.意.fyTest.entity.FyTestUser;
import 不.要.在.意.fyTest.service.FyTestService;
import 不.要.在.意.FunctionReturn;


/**
 * FyTest
 * 
 */
@Controller
@RequestMapping(value="${adminPath}/fyTest")
public class FyTestController extends BaseController {

	@Autowired
	FyTestService fyTestService;
	
	//调出页面1,查询整个数据表,分页,每页30行数据,展示
	@RequiresPermissions("fyTest:fyTestUser:view")  //注解,验证当前登录用户是否有 "fyTest:fyTestUser:view"对应的权限 
	@RequestMapping(value={"/fyTestUsers/list"})	//一个用来处理请求地址映射的注解,运行这个功能时的url路径就会是".../fyTestUsers/list"(还未验证)
	public String fyTestUserList(FyTestUser fyTestUser,HttpServletRequest request,HttpServletResponse response,Model model){
		Page<FyTestUser> page = fyTestService.getFyTestPage(new Page<FyTestUser>(request,response),fyTestUser);//获取了表的数据
		model.addAttribute("page",page);			//将数据存储在 Model对象中,然后在视图层中使用该数据
		return"modules/fyTest/fyTest";				//疑问:返回了个字符串?干啥用的?
	}

	
	//调出页面2,填写"新增信息"的页面
	@RequiresPermissions("fyTest:fyTestUser:edit")
	@RequestMapping(value={"/fyTestUsers/form"})
	public String fyTestUsersForm(FyTestUser fyTestUser, HttpServletRequest request, HttpServletResponse response, Model model){
		return "modules/fyTest/fyTestForm";
	}
	
	
	//功能,新增信息
	@RequiresPermissions("fyTest:fyTestUser:edit")
	@RequestMapping(value={"/fyTestUsers/save"})
	public String fyTestUsersSave(FyTestUser fyTestUser, Model model,RedirectAttributes redirectAttributes){		
		try{
			FunctionReturn fr = fyTestService.saveFyTestUser(fyTestUser);		//1查重2插入新数据
			addMessage(redirectAttributes,fr.getReturnMsg());					//打印在Service层获取到的消息
		}catch(Exception ex){
			addMessage(redirectAttributes, fyTestUser.getName()+"["+fyTestUser.getTuid()+"]添加新数据失败");
			logger.debug(Exceptions.getStackTraceAsString(ex));
			ex.printStackTrace();
		}
		return"redirect:"+adminPath+"fyTest/fyTestUsers/list";
	}
	
	
	//导出表单数据
	@RequiresPermissions("fyTest:fyTestUser:view")
	@RequestMapping(value = "/fyTestUsers/export",method=RequestMethod.POST)
	public String exportfile(FyTestUser fyTestUser,HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes){
		try{
			String fileName="FyTest"+DateUtils.getDate("yyyyMMDDHHmmss")+".xlsx";
			List<FyTestUser>exportList= fyTestService.getFyTestUserExportList(fyTestUser);
			new ExportExcel("fyTest", FyTestUser.class).setDataList(exportList).write(response, fileName).dispose();			return null;
		}catch (Exception e){
			addMessage(redirectAttributes,"导出信息失败!失败信息:"+e.getMessage());
		}
		return "redirect:"+adminPath+"/fyTest/fyTestUsers/list";
	}
	
	
	//删除数据
	@RequiresPermissions("fyTest:fyTestUser:edit")
	@RequestMapping(value = "/fyTestUsers/updateStatus")
	public String fyTestUserUpdateStatus(FyTestUser fyTestUser, HttpServletRequest request, Model model, RedirectAttributes redirectAttributes){
		try{
			FunctionReturn fr = fyTestService.updateFyTestUserForStatus(fyTestUser);
			addMessage(redirectAttributes,fr.getReturnMsg());
		}catch(Exception ex){
			addMessage(redirectAttributes,"状态更新失败");
			logger.debug(Exceptions.getStackTraceAsString(ex));
			ex.printStackTrace();
		}
		return "redirect:"+adminPath+"/fyTest/fyTestUsers/list";
		
	}

	
	//删除数据
	@RequiresPermissions("fyTest:fyTestUser:edit")
	@RequestMapping(value = "/fyTestUsers/updateAll")
	public String fyTestUserUpdateAll(FyTestUser fyTestUser, HttpServletRequest request, Model model, RedirectAttributes redirectAttributes){
		try{
			FunctionReturn fr = fyTestService.updateFyTestUserForStatus(fyTestUser);
			addMessage(redirectAttributes,fr.getReturnMsg());
		}catch(Exception ex){
			addMessage(redirectAttributes,"更新失败");
			logger.debug(Exceptions.getStackTraceAsString(ex));
			ex.printStackTrace();
		}
		return "redirect:"+adminPath+"/fyTest/fyTestUsers/list";
		
	}
	
	
	//删除数据
		@RequiresPermissions("fyTest:fyTestUser:edit")
		@RequestMapping(value = "/fyTestUsers/delete")
		public String fyTestUserRemove(FyTestUser fyTestUser, HttpServletRequest request, Model model, RedirectAttributes redirectAttributes){
			try{
				FunctionReturn fr = fyTestService.deleteFyTestUser(fyTestUser);
				addMessage(redirectAttributes,fr.getReturnMsg());
			}catch(Exception ex){
				addMessage(redirectAttributes,"删除失败");
				logger.debug(Exceptions.getStackTraceAsString(ex));
				ex.printStackTrace();
			}
			return "redirect:"+adminPath+"/fyTest/fyTestUsers/list";
			
		}
}

        1.try catch用法:
        版权声明:本文为CSDN博主「呀吖呀吖呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
        原文链接:https://blog.csdn.net/yayayalaila/article/details/122723894
        理论上,我们这里的try catch是捕获不到异常的,但是考虑到实际在程序运行中可能会发生意想不到的异常情况,所以我们都用上了.

        但是真正的重点(以"功能"为例),重点就在
"FunctionReturn fr= fyTestService.saveFyTestUser(fyTestUser);"这一句上,而这一句包含的内容,就是我们从Dao,Service层一点点完善下来的.

        至此,我们已经写完所有后端的内容啦(大概),接下来就是写前端的jsp页面文件,前端应该不会很麻烦,这个推进速度还是很不错的,周末就不用担心了.
        下班.

        整理与思考:

        在FyTestController.java那里有一个“疑问”,我感觉是跟前端有关的,所以我打算先搁置,等下周写前端时看看能不能联系起来。

——20230317

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值