赞
踩
注意该项目适合java初学者中级进度学习、此工程主要为maven入门学习,涉及springboot+springMVC+mybatils
github 源代码路径 https://github.com/zhangweiweiweiweiwei/superMarket.git
(1)前端html页面,访问controller,根据 @RequestMapping多次路径拼接定位到某方法。
(2)获取前端传入的信息存入Maps集合,并根据封装Json数据转为对应的实体类类型数据,controller层将使用service层对象调用serviceImpl实现类的方法,对将返回的数据也存入model,最后返回前端页面,前端调用。
(3)service层将使用Mapper层对象调用接口类的方法,显示数据则返回信息,否则返回为空。
(4)Mapper层接口将@Select访问数据库,访问该层方法将获取该方法的定义的对象(可为实体对象类型、也可为封装实体类型的List集合)
(1)登录功能(登录前首页)
*login.html(核心代码 17-28行)
功能描述:【前端用户输入用户名和密码,传入后端路径为@{/login}。】
*framecontroller(核心代码 70-92行)
功能描述:【framecontroller获取前端输入的用户名和密码,转为String类型,访问后端userService的findByMobileAndPwd(userName, userPassword)方法;对返回的user对象数据进行判断,若user对象为空,说明数据库不存在改用户,登录失败,再次返回login.html页面再次登录。】
// 登录 @RequestMapping("/login") public String login(HttpServletRequest request, HttpSession session, Model model) throws IOException { //获取前端用户账号和密码 String userName = request.getParameter("userName"); String userPassword = request.getParameter("userPassword"); //访问后端userService的findByMobileAndPwd方法 User user = userService.findByMobileAndPwd(userName, userPassword); if (user == null) { //登录失败 //model.addAttribute("error", "登录失败"); //out.print("<script language=\"javascript\">alert('登录失败!');</script>"); return "login"; } else { session.setAttribute("user", user.getId()); session.setAttribute("userName", user.getUserName()); session.setAttribute("userCode", user.getUserCode()); return "frame"; } }
*userservice (核心代码 26-30行)
功能描述:【从FrameController的登录方法访问,获取参数后访问userMapper的findByMobileAndPwd(userName, userPassword)方法,返回userservice User 类型的数据】
@Override
public User findByMobileAndPwd(String userName, String userPassword) {
return userMapper.findByMobileAndPwd(userName,userPassword);
}
*usermapper(核心代码 20-22行)
功能描述:【根据用户名密码查找用户,返回userservice User 类型的数据】
// 根据用户名密码查找用户(登录 UserService访问)
@Select("select * from smbms_user where userName =#{userName} and userPassword =#{userPassword}")
public User findByMobileAndPwd(String userName, String userPassword);
(2)首页显示功能(登录后首页)
*frame.html(核心代码 13-29行)
功能描述:【页面嵌套出top.html left.html main.html】
*framecontroller(核心代码 21-32行 )
功能描述:【frame页面将嵌套显示出top.html left.html main.html】
@GetMapping("/top")
public String top() {
return "top";
}
@GetMapping("/left")
public String left() {
return "left";
}
@GetMapping("/main")
public String mian() {
return "main";
}
*left.html(核心代码 14-37行)
功能描述:【对五个模块照片显示,并且以超链接形式,传入后端路径分别为@{/toBillList}、@{/toProviderList}、@{/toUserlist}、@{/toUpdatePwd} 而退出系统直接在顶层开启新网页login登录页面】
<body class="frame-bd"> <ul class="left-menu"> <li><a th:href="@{/toBillList}" target="mainFrame"><img th:src="@{/images/btn_bill.gif}" /> </a> </li> <li><a th:href="@{/toProviderList}" target="mainFrame"><img th:src="@{/images/btn_suppliers.gif}" /> </a> </li> <li><a th:href="@{/toUserlist}" target="mainFrame"><img th:src="@{/images/btn_users.gif}" /> </a> </li> <li><a th:href="@{/toUpdatePwd}" target="mainFrame"><img th:src="@{/images/btn_password.gif}" /> </a> </li> <li><a href="" onClick="logout();"><img th:src="@{/images/btn_exit.gif}" /> </a> </li> </ul> </body>
*framecontroller(核心代码 41-67行)
功能描述:【此处功能与后续模块一致,将在模块内实现】
//跳转到ProviderController里的list方法 @RequestMapping("/toProviderList") public String toProviderList() { return "redirect:/provider/list"; } //跳转到BillController里的list方法 @RequestMapping("/toBillList") public String toBillList() { return "redirect:/bill/list"; } //跳转到UserController里的list方法 @RequestMapping("/toUserlist") public String toUserlist() { return "redirect:/user/list"; } @RequestMapping("/toUpdatePwd") public String toUpdatePwd(HttpSession session, Model model) { Long userid = (Long) session.getAttribute("user"); Integer id = userid.intValue(); User user = userService.findById(id); model.addAttribute("user", user); return "updatePwd"; }
(1)页面显示功能
*left.html (核心代码 17-18行)
功能描述:【以超链接形式,传入后端路径分别为@{/toBillList}】
*framecontroller(核心代码 47-49行)
功能描述:【路径重定位/provider/list】
//跳转到BillController里的list方法
@RequestMapping("/toBillList")
public String toBillList() {
return "redirect:/bill/list";
}
*billcontroller(核心代码 34-42行)
功能描述:【 账单管理页面(显示账单信息) 从session中获取userCode编码,访问billService的findall方法 对返回的Result类型的List集合bills存入model】
// 账单管理页面(显示账单信息) 从session中获取userCode编码,访问billService的findall
@RequestMapping("/list")
public String billPage(Model model,HttpSession session){
String userCode = (String) session.getAttribute("userCode");
List<Result> bills = billService.findall(userCode);
model.addAttribute("bills",bills);
return "billList";
}
*billservice(核心代码 29-31行)
功能描述:【账单显示 访问billMapper的findall,对返回的Result类型的List集合返回到controller层】
//账单显示 访问billMapper的findall
@Override
public List<Result> findall(String userCode) {
return billMapper.findall(userCode);
}
*billmapper(核心代码 20-22行)
功能描述:【查询所有账单,匹配billcode和usercode(查询bill表以及provider表的proName 组合为实体类Result对象,返回到service层】
// 查询所有账单,匹配billcode和usercode(查询bill表以及provider表的proName 组合为实体类Result)
@Select("SELECT b.*,p.proName from smbms_bill b, smbms_provider p WHERE b.providerId = p.id and b.billCode =#{userCode}")
List<Result> findall(String userCode);
(2)模糊查询功能
*billList.html(核心代码 10-28行)
功能描述:【将从前端获取模糊查询传入的参数商品名称、供应商名称、是否支付传到controller层,路径为@{/bill/findLike}】
*billcontroller(核心代码 126-135行)
功能描述:【获取前端的参数商品名称、供应商名称、是否支付,定义为String类型,调用billService的findLike(productName,proName,isPayment)方法,对返回的 Result类型的List集合存入model 】
*billservice(核心代码 73-77行)
功能描述:【根据传入的三个参数进行模糊查询,返回为Result类型的List集合到controller层】
// 模糊查询组合
@Override
public List<Result> findLike(String condition1, String condition2, String condition3) {
return billMapper.findLike(condition1,condition2,condition3);
}
*billmapper(核心代码 44-46行)
功能描述:【组合模糊查询,用于同时查询,返回为Result类型的List集合,返回到service层】
// 组合模糊查询,用于同时查询
@Select("SELECT b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and productName like concat('%',#{condition1},'%') and proName like concat('%',#{condition2},'%') and isPayment like concat('%',#{condition3},'%')")
List<Result> findLike(String condition1,String condition2,String condition3);
(3)添加账单功能
跳转到billAdd页面部分
*billList.html(核心代码 33行)(主键bill/add.js)
功能描述:【路径为οnclick="window.location=’/bill/toBillAdd’ 】
*billcontroller(核心代码 67-74行)
功能描述:【显示增加账单页面 主要为该页面的下拉框供应商属性获取数据,获取返回的Result类型的List集合bills 存入model 返回billAdd页面】
// 显示增加账单页面 主要为该页面的下拉框供应商属性获取数据
@RequestMapping("/toBillAdd")
public String toBillPage(Model model){
List<Result> bills = billService.findallPro();
model.addAttribute("bills",bills);
//System.out.println("进入跳转");
return "billAdd";
}
*billservice(核心代码 50-52行)
功能描述:【获取所有供应商信息,添加账单的下拉框使用,返回为Result类型的List集合,返回到controller层】
// 获取所有供应商信息,添加账单的下拉框使用
@Override
public List<Result> findallPro() {
return billMapper.findallPro();
}
*billmapper(核心代码 32-34行 )
功能描述:【查询所有供应商,返回为Result类型的List集合,返回到service层】
// 查询所有供应商
@Select("SELECT distinct p.proName,b.providerId from smbms_bill b,smbms_provider p WHERE b.providerId = p.id")
List<Result> findallPro();
账单添加部分
*billAdd.html(核心代码 39行)
功能描述:【 返回的model信息调用,循环遍历作为新增页面下供应商下拉框的选项。
对新增账单的保存获取用户填写数据,访问controller层,路径为@{/bill/add}】
*billcontroller(核心代码 46行-64行)
功能描述:【获取从前端用户填写的数据信息,将获取的信息封装到result集合中,访问service层的addBill(result)方法】
// 增加账单 @RequestMapping("/add") public String addBill(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session){ //Result result = map2Result(request); Result result = JSON.parseObject(JSON.toJSONString(maps), Result.class); //设置两个日期 Date date = new Date(); result.setCreationDate(date); result.setModifyDate(date); // 获取session,设置人名 Long user = (Long) session.getAttribute("user"); String userCode = (String) session.getAttribute("userCode"); result.setCreatedBy(user); result.setModifyBy(user); //设置编号 result.setBillCode(userCode); billService.addBill(result); return "redirect:list"; }
*billservice(核心代码 35-37行)
功能描述:【获取controller参数result对象,访问mapper层add(result)方法,无返回】
//添加账单 访问billMapper的add
@Override
public void addBill(Result result) {
billMapper.add(result);
}
*billmapper(核心代码 49-51行)
功能描述:【将result对象存入bill表中,无返回】
// 保存账单
@Insert("insert into smbms_bill values(#{id},#{billCode},#{productName},#{productDesc},#{productUnit},#{productCount},#{totalPrice},#{isPayment},#{providerId},#{creationDate},#{createdBy},#{modifyDate},#{modifyBy})")
void add(Result result);
(4)账单详情显示功能
*billList.html(核心代码 58行)
功能描述:【账单显示页获取的bills集合信息调用,对供应商名称超链接】
*billcontroller(核心代码 109-116行 )
功能描述:【根据前端传入的id,查询数据库bill表,访问billService的findById(id)方法,对返回的Result类型的bill数据存入model ,返回到billView页面】
// 显示账单详情页面
@RequestMapping("/toBillView/{id}")
public String toBillView(@PathVariable("id") Integer id ,Model model){
System.out.println(id);
Result bill = billService.findById(id);
model.addAttribute("bill",bill);
return "billView";
}
*billservice(核心代码 41-43行)
功能描述:【从controller层调用该方法,并调用mapper层的findById(id),返回的Result类型的对象数据到controller】
//显示账单详情
@Override
public Result findById(Integer id) {
return billMapper.findById(id);
}
*billmapper(核心代码 53-55行)
功能描述:【根据id查bill表 provider表,获取bill表所有属性和provider表的proName(供应商名称)组成Result类型的对象数据。返回到service层】
// 根据id查询账单
@Select("select b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and b.id = #{id}")
Result findById(Integer id);
*billView.html(核心代码 17-49行)
功能描述:【对获取的bill对象进行数据调用,显示账单编号、商品名称、商品单位、商品数量、总额、供应商、是否支付等信息】
(5)修改账单功能
跳转到billUpdate页面部分
*billView.html的bill/View.js(核心代码 1-6行 )
功能描述:【对billView页面的修改发出请求,路径为/bill/toBillUpdate/",参数为+billId】
//跳转修改页面
$("#update").bind("click",function(){
//获取billId值
var billId=$("#billId").val();
window.location="/bill/toBillUpdate/"+billId;
});
*billcontroller(核心代码 77-87行)
功能描述:【获取前端传入的billId,根据id查询billService的findById(id)方法,用来显示用户账单原信息,以及billService的findallPro()方法,用来billUpdate页面的供应商下拉框(所有供应商),对返回的数据存入model,其中bill为Result类型单行对象数据,bills为Result类型的List集合对象数据,返回到billUpdate页面。】
// 去账单修改页面
@RequestMapping("/toBillUpdate/{id}")
public String toProviderUpdate(@PathVariable("id") Integer id, Model model,Model model2) {
Result bill = billService.findById(id);
//展示ID对应账单的信息
model.addAttribute("bill", bill);
List<Result> bills = billService.findallPro();
//展示bills的下拉列表
model2.addAttribute("bills",bills);
return "billUpdate";
}
*billservice(核心代码 41-43行 50-52行)
功能描述:【findById查询出当前用户选中的某账单的详情显示,根据id查询返回的数据返回controller
findallPro()查询所有供应商,无条件查询所有provider供应商,返回result类型的List集合数据】
//显示账单详情
@Override
public Result findById(Integer id) {
return billMapper.findById(id);
}
// 获取所有供应商信息,添加账单的下拉框使用
@Override
public List<Result> findallPro() {
return billMapper.findallPro();
}
*billmapper(核心代码 53-55行 32-34行)
功能描述:【findById(Integer id)根据id查询bill,provider表,属性组合为Result类型的数据对象返回service层
findallPro()查询bill,provider表,属性组合为Result类型的List集合数据对象,返回service层】
// 根据id查询账单
@Select("select b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and b.id = #{id}")
Result findById(Integer id);
// 查询所有供应商
@Select("SELECT distinct p.proName,b.providerId from smbms_bill b,smbms_provider p WHERE b.providerId = p.id")
List<Result> findallPro();
账单修改部分
*bill/Update.html(核心代码 13行 )(注意bill.update.js 正则判断输入)
功能描述:【获取用户最后的修改信息,对保存功能提交,路径为@{/bill/updateBill}】
*billcontroller(核心代码 90-106行)
功能描述:【获取的修改信息存入maps(map集合),再转为Result类型(JSON.toJSONString(maps))。在设置时间、session获取用户名等信息存入result对象,访问billService的update(result)方法。 对于返回再次调用/bill/toBillView/" + id(还在billController中109-116行),再次显示账单详情信息。】
// 修改账单,并返回到账单详情页面 @RequestMapping("/updateBill") public String updateProvider(@RequestParam Map<String, String> maps,HttpServletRequest request, HttpSession session) { //Result result = map2Result(request); Result result = JSON.parseObject(JSON.toJSONString(maps), Result.class); Long id = result.getId(); System.out.println(id); //设置修改日期 Date date = new Date(); result.setModifyDate(date); // 获取session,设置人名 Long user = (Long) session.getAttribute("user"); result.setModifyBy(user); //设置编号 billService.update(result); return "redirect:/bill/toBillView/" + id; }
*billservice(核心代码 58-60行)
功能描述:【访问billMapper的update(result)方法,无返回】
// 修改账单详情
@Override
public void update(Result result) {
billMapper.update(result);
}
*billmapper(核心代码 57-59行)
功能描述:【将获取的result对象数据更新,无返回】
// 修改账单
@Update("update smbms_bill set productName=#{productName},productUnit=#{productUnit},productCount=#{productCount},totalPrice=#{totalPrice},isPayment=#{isPayment},modifyBy=#{modifyBy},modifyDate=#{modifyDate} where id = #{id}")
void update(Result result);
(6)删除账单功能
*billView.html的js(核心代码 9-15行)
功能描述:【对billView的删除发请求,路径为/bill/billDelete/,参数为billId】
//删除
$("#del").bind("click",function(){
var billId=$("#billId").val();
if(confirm("确认删除?")){
window.location="/bill/billDelete/"+billId;
}
});
*billcontroller(核心代码 118-123行 )
功能描述:【根据获取的id查询到bill表对该账单详情删除,返回/bill/list路径方法(还在controller层(34-42行)) 再次访问数据库查询账单细腻,返回billList页面】
// 删除账单,并返回到list页面
@RequestMapping("/billDelete/{id}")
public String providerDelete(@PathVariable("id") Integer id) {
billService.delete(id);
return "redirect:/bill/list";
}
*billservice(核心代码 65-67行)
功能描述:【根据id对bill表对该账单详情删除,无返回】
// 删除账单
@Override
public void delete(Integer id) {
billMapper.delete(id);
}
*billmapper(核心代码 62-64行)
功能描述:【根据id对bill表数据删除,,无返回】
// 删除账单
@Delete("delete from smbms_bill where id=#{id} ")
void delete(Integer id);
(1)页面显示功能
*left.html (核心代码 21-22行)
功能描述:【供应商管理超链接发送请求,请求路径为@{/toProviderList}】
*framecontroller(核心代码 41-43行)
功能描述:【路径重定位/provider/list】
*providercontroller(核心代码 38-44行)
功能描述:【providerService的findAll(),获取provider表Provider类型的List集合数据,之后存入model,返回到providerList页面】
// 供应商管理页面
@RequestMapping("/list")
public String providerPage(Model model) {
List<Provider> providers = providerService.findAll();
model.addAttribute("providers", providers);
return "providerList";
}
*providerservice(核心代码 23-25行)
功能描述:【被controller层调用,访问mapper层findAll()方法,获取provider表Provider类型的List集合数据 返回controller层Provider类型的List集合】
// 查询所有供应商
@Override
public List<Provider> findAll() {
return providerMapper.findAll();
}
*providermapper(核心代码 18-20行 )
功能描述:【查询provider表所有属性信息,返回service层Provider类型的List集合】
// 查询所有供应商
@Select("select * from smbms_provider")
List<Provider> findAll();
*providerList.html (核心代码 55-62行)
功能描述:【对provider表属性信息遍历显示供应商信息】
(2)模糊查询功能
*providerList.html(核心代码 14-17行)
功能描述:【查询发送请求,请求路径为@{/provider/findLike}】
*providercontroller(核心代码 131-138行 )
功能描述:【获取前端的供应商名称,根据供应商名称模糊查询,访问providerService的findLike(proName)方法,将返回的Provider类型的List集合存入modl,返回到providerList页面】
//供应商模糊查询
@RequestMapping("/findLike")
public String findLike(HttpServletRequest request,Model model){
String proName = request.getParameter("proName");
List<Provider> providers = providerService.findLike(proName);
model.addAttribute("providers",providers);
return "providerList";
}
*providerservice(核心代码 65-67行)
功能描述:【被controller层调用,访问providerMapper的findLike(condition)方法,返回Provider类型的List集合】
// 根据条件模糊查询
@Override
public List findLike(String condition) {
return providerMapper.findLike(condition);
}
*providermapper(核心代码 33-35行 )
功能描述:【根据供应商名称(传入参数),对provider表模糊查询。返回Provider类型的List集合(返回供应商名称一致的(同名供应商))】
// 根据条件模糊查询
@Select("select * from smbms_provider where proName like concat('%',#{condition},'%')")
List<Provider> findLike(String condition);
*provideList.html(核心代码 55-61行 )
功能描述:【model里存入的providers命名为provider,遍历调用provider的List集合】
(3)添加供应商功能
跳转到providerAdd页面部分
*providerList.html(核心代码 27行)
功能描述:【添加供应商发出请求,路径为/provider/toProviderAdd】
*providercontroller(核心代码 47-49行 )
功能描述:【页面跳转到providerAdd】
// 去增加供应商页面
@RequestMapping("/toProviderAdd")
public String toAddPage() {
return "providerAdd";
}
判断供应商存在部分
*providerAdd.html的js(核心代码 )
功能描述:【对用户输入的供应商进行判断若存在不可添加,对用户添加供应商的内容正则判断,】
*providercontroller(核心代码 54-64行)
功能描述:【根据输入的供应商名称访问数据库provider表进行判断是否有该供应商,若为true即已有当前供应商,不可添加 前端显示已存在(provider/add.js)】
// 判断供应商是否存在 若存在不可增加
@RequestMapping("/provider.do")
@ResponseBody
public boolean isisExist(String proName) {
Provider provider = providerService.findByProName(proName);
if (provider != null) {
return true;
} else {
return false;
}
}
*providerservice(核心代码 30-32行)
功能描述:【访问providerMapper的findByProName(proName),对返回的provider对象返回controller】
// 根据proName查询供应商是否存在
@Override
public Provider findByProName(String proName) {
return providerMapper.findByProName(proName);
}
*providermapper(核心代码 23-25行)
功能描述:【根据proName访问数据库判断供应商 存入provider对象,返回到service】
// 根据proName查询供应商
@Select("select * from smbms_provider where proName =#{proName}")
Provider findByProName(String proName);
添加供应商部分
*providerAdd.html的js(核心代码 )
功能描述:【对用户保存新增供应商信息操作,发送请求,请求(providerAdd.html)路径为@{/provider/add}】
*providercontroller(核心代码 67-85行)
功能描述:【获取的修改信息存入maps(map集合),再转为Result类型(JSON.toJSONString(maps))。在设置时间、session获取用户名等信息存入provider对象,访问providerService的saveProvider(provider)方法。 对于返回再次调用list(还在providerController中38-44行),再次显示账单详情信息。】
// 增加供应商 @RequestMapping("/add") public String addProvider(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session) { //Provider provider = map2Provider(request); Provider provider = JSON.parseObject(JSON.toJSONString(maps), Provider.class); //设置两个日期 Date date = new Date(); provider.setCreationdate(date); provider.setModifyDate(date); // 获取session,设置人名 Long user = (Long) session.getAttribute("user"); provider.setCreatedBy(user); provider.setModifyBy(user); //设置编号 String proCode = request.hashCode() + ""; provider.setProCode(proCode); providerService.saveProvider(provider); return "redirect:list"; }
*providerservice(核心代码 37-39行 )
功能描述:【访问providerMapper的save(provider)方法 无返回】
// 保存供应商
@Override
public void saveProvider(Provider provider) {
providerMapper.save(provider);
}
*providermapper(核心代码 38-40行 )
功能描述:【获取前面出入的provider对象参数,将对象属性值插入数据库,无返回】
// 保存供应商
@Insert("insert into smbms_provider values(#{id},#{proCode},#{proName},#{proDesc},#{proContact},#{proPhone},#{proAddress},#{proFax},#{createdBy},#{creationdate},#{modifyBy},#{modifyDate})")
void save(Provider provider);
(4)供应商详情显示功能
*providerList.html(核心代码 57行)
功能描述:【超链接发送请求,路径为@{/provider/toProviderView/},参数为${provider.id}】
*providercontroller(核心代码 88-94行 )
功能描述:【根据id查询provider表,获取该id供应商的详情信息,存入model,返回到前端显示(供应商详情显示)】
// 去供应商详情页面
@RequestMapping("/toProviderView/{id}")
public String toProviderView(@PathVariable("id") Integer id, Model model) {
Provider provider = providerService.findById(id);
model.addAttribute("provider", provider);
return "providerView";
}
*providerservice(核心代码 44-46行)
*providermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,根据供应商id对供应商信息查询,存为provider类型对象返回到service、controller。
*providerView.html(核心代码 15-46行 )
功能描述:【获取的provider对象信息的调用,显示到前端 成为供应商详情展示页面信息。】
(5)修改供应商功能
跳转到修改供应商页面
*providerView.html的js(核心代码 1-5行)
功能描述:【将跳转到修改,访问后端的路径为/provider/toProviderUpdate/" 参数为proId】
*providercontroller(核心代码 97-103行)
功能描述:【根据proid查询provider表,返回前端到providerUpdate页面显示为当前供应商信息,可进行修改。】
// 去供应商修改页面
@RequestMapping("/toProviderUpdate/{id}")
public String toProviderUpdate(@PathVariable("id") Integer id, Model model) {
Provider provider = providerService.findById(id);
model.addAttribute("provider", provider);
return "providerUpdate";
}
*providerservice(核心代码 44-46行)
*providermapper(核心代码 38-40行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,根据供应商id对供应商信息查询,存为provider类型对象返回到service、controller。
修改数据的保存部分
*providerUpdate.html的js(核心代码 1-33行)
功能描述:【对用户修改供应商信息时正则判断合法性】
*providerUpdate.html(核心代码 14-64行 )
功能描述:【保存请求路径为@{/provider/updateProvider}】
*providercontroller(核心代码 106-121行)
功能描述:【获取修改信息,以及获取id,设置更新者、更新时间等信息访问数据库,存入如数据库中,返回到重定位路径为"redirect:/provider/toProviderView/" + id,再次显示供应商列表信息。】
// 修改供应商,并返回到供应商详情页面 @RequestMapping("/updateProvider") public String updateProvider(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session) { //Provider provider = map2Provider(request); Provider provider = JSON.parseObject(JSON.toJSONString(maps), Provider.class); //提供供应商详情ID Long id = provider.getId(); //设置更新者 Long user = (Long) session.getAttribute("user"); provider.setModifyBy(user); //设置更新时间 provider.setModifyDate(new Date()); System.out.println(provider); providerService.updateProvider(provider); return "redirect:/provider/toProviderView/" + id; }
*providerservice(核心代码 44-46行 )
*providermapper(核心代码 43-45行 )
此处代码功能实现也是controller到service到mapper调用updateProvider(provider)功能,根据供应商provider对象对供应商信息更新。
(6)删除供应商功能
*providerView.html的js(核心代码 8-14行)
功能描述:【发送删除请求以及确认,路径为/provider/providerDelete/" 参数为proId】
*providercontroller(核心代码 124-129行)
功能描述:【删除供应商,并返回到list页面,访问providerService的delProvider(id)方法】
/ 删除供应商,并返回到list页面
@RequestMapping("/providerDelete/{id}")
public String providerDelete(@PathVariable("id") Integer id) {
providerService.delProvider(id);
return "redirect:/provider/list";
}
*providerservice(核心代码 58-60行)
*providermapper(核心代码 48-50行)
此处代码功能实现也是controller到service到mapper调用delProvider(id)功能,根据供应商id对供应商信息删除操作,返回路径到重定位/provider/list(还在controller(39-44行),重新调用显示供应商列表页面)。
(1)页面显示功能
*left.html (核心代码 25-26行)
功能描述:【供应商管理超链接发送请求,请求路径为@{/toUserlist}】
*framecontroller(核心代码 53-55行)
功能描述:【路径重定位/user/list】
*usercontroller(核心代码 46-52行)
功能描述:【查询数据库user表所有信息】
// 用户控制界面(显示用户信息)
@RequestMapping("/list")
public String userPage(Model model){
List<User> users = userService.findAll();
model.addAttribute("users",users);
return "userList";
}
*userservice(核心代码 19-21行)
*usermapper(核心代码 24-26行)
此处代码功能实现也是controller到service到mapper调用findAll()功能,根据用户表查询操作,返回User类型的List集合返回到service、controller(users集合),存入model。 返回userList页面userss调用显示)。
(2)模糊查询功能
*userList.html(核心代码 11-13行)
功能描述:【发送请求,请求路径为@{/user/findLike}】
*usercontroller(核心代码 142-149行 )
功能描述:【获取前端传入的userName参数,调用service层的findLike(userName)方法。返回User类型的List集合users,存入model,返回到userList页面(可能同名)】
// 根据条件模糊查询
@RequestMapping("/findLike")
public String findlike(HttpServletRequest request,Model model){
String userName = request.getParameter("userName");
List<User> users = userService.findLike(userName);
model.addAttribute("users",users);
return "userList";
}
*userservice(核心代码 62-64行)
*usermapper(核心代码 58-60行)
此处代码功能实现也是controller到service到mapper调用findLike(userName)功能,根据用户表查询操作,返回User类型的List集合返回到service、controller(users集合),存入model。 返回userList页面userss调用显示)。
(3)添加用户功能
*userList.html(核心代码 22行)
功能描述:【发送请求,请求路径为/user/toUserAdd’】
*usercontroller(核心代码 54-56行)
功能描述:【到用户增加页面userAdd.html】
// 去增加用户页面
@RequestMapping("/toUserAdd")
public String toAddPage(){
return "userAdd";
}
*userAdd.html的js(核心代码 1-12行)
功能描述:【对用户名进行判断是否已存在,若存在提示请更换账号】
用户添加判断部分
*userAdd.html的js(核心代码 16-69行)
功能描述:【对用户输入的用户信息时进行正则判断。】
*usercontroller(核心代码 69-75行)
功能描述:【判断用户是否存在 若存在不可添加,访问数据库findByUserName(userName)方法】
// 判断用户是否存在 若存在不可添加
@RequestMapping("/exist/{userName}")
public User exist(@PathVariable("userName") String userName){
System.out.println(userName);
User user = userService.findByUserName(userName);
return user;
}
*userservice(核心代码 38-40行)
*usermapper(核心代码 33-35行)
此处代码功能实现也是controller到service到mapper调用findByUserName(userName)功能,根据用户表查询操作,返回User类型对象返回到service、controller(user)。 返回user对象(注意此处为get请求))。
用户添加保存部分
*userAdd.html(核心代码 13-62行)
功能描述:【 对保存发送请求,请求路径为@{/user/add}】
*usercontroller(核心代码 79-97行)
功能描述:【获取用户新增用户时输入的用户名、用户密码、确认密码、性别、出生日期、用户电话、用户地址、用户权限等信息存入map集合maps中,再转为User类型的集合user((JSON.toJSONString(maps), User.class)),获取其它信息人名、编号、日期等信息,访问数据库存入user】
// 增加用户 @RequestMapping("/add") public String addUser(@RequestParam Map<String, String> maps, HttpSession session, HttpServletRequest request){ //User user = map2User(request); User user = JSON.parseObject(JSON.toJSONString(maps), User.class); //设置两个日期 Date date = new Date(); user.setCreationDate(date); user.setModifyDate(date); // 获取session,设置人名 Long user2 = (Long) session.getAttribute("user"); user.setCreatedBy(user2); user.setModifyBy(user2); //设置编号 String UserCode = request.hashCode() + ""; user.setUserCode(UserCode); userService.save(user); return "redirect:list"; }
*userservice(核心代码 44-46行)
*usermapper(核心代码 38-40行 )
此处代码功能实现也是controller到service到mapper调用save(user)功能,对用户表插入操作)。
(4)用户详情显示功能
*userList.html(核心代码 48行 )
功能描述:【超链接发送请求,地址为@{/user/toUserView/} 参数为${userss.id}】
*usercontroller(核心代码 59-66行)
功能描述:【根据id,查询user表,返回User类型的user对象,存入model 返回到userView前端页面(用户详情页面)】
// 去用户详情页面
@RequestMapping("/toUserView/{id}")
public String toBillView(@PathVariable("id") Integer id , Model model){
System.out.println(id);
User user = userService.findById(id);
model.addAttribute("user",user);
return "userView";
}
*userservice(核心代码 32-33行)
*usermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,对用户表查询操作,返回User类型的user对象)。
*userview.html(核心代码 7-63)
功能描述:【user对象属性调用,显示用户详情。】
(5)修改用户功能
跳转userUpdate页面部分
*userView.html的js(核心代码 1-5行)
功能描述:【对修改发送请求,请求路径为"/user/toUserUpdate/" 参数为userId】
*usercontroller(核心代码 108-118行)
功能描述:【根据id查询用户信息,返回到userUpdate页面】
// 去修改页面
@RequestMapping("/toUserUpdate/{id}")
public String toProviderUpdate(@PathVariable("id") Integer id, Model model) {
User user = userService.findById(id);
//展示ID对应账单的信息
model.addAttribute("user", user);
return "userUpdate";
}
*userservice(核心代码 32-33行)
*usermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,对用户表查询操作,返回User类型的user对象)。
*userUpdate.html(核心代码 8-60行)
功能描述:【用户详情的信息显示】
修改功能部分
*userUpdate.html(核心代码 13行)
功能描述:【请求路径为@{/user/updateUser}】
*usercontroller(核心代码 121-137行 )
功能描述:【获取信息封装到map集合maps中,转为User集合user(JSON.toJSONString(maps)),获取其它信息访问数据库User表更新操作。之后返回的重定位/user/toUserView/" + id,重新显示用户详情】
// 修改用户,并返回到用户详情页面 @RequestMapping("/updateUser") public String updateProvider(@RequestParam Map<String, String> maps,HttpSession session){ //User user = map2User(request); User user = JSON.parseObject(JSON.toJSONString(maps), User.class); Long id = user.getId(); System.out.println(id); //设置修改日期 Date date = new Date(); user.setModifyDate(date); // 获取session,设置人名 Long user2 = (Long) session.getAttribute("user"); user.setModifyBy(user2); //设置编号 userService.update(user); return "redirect:/user/toUserView/" + id; }
*userservice(核心代码 57-58行)
*usermapper(核心代码 48-50行 )
此处代码功能实现也是controller到service到mapper调用update(user)功能,对用户表更新操作)。
(6)删除用户功能
*userView.html的js(核心代码 7-13行)
功能描述:【对删除的请求路径为/user/userDelete/" 参数为userId】
*usercontroller(核心代码 100-105行)
功能描述:【获取参数,访问数据库delete(id)方法,根据id删除用户,无返回】
// 删除用户
@RequestMapping("/userDelete/{id}")
public String providerDelete(@PathVariable("id") Integer id) {
userService.delete(id);
return "redirect:/user/list";
}
*userservice(核心代码 50-52行)
*usermapper(核心代码 43-45行)
此处代码功能实现也是controller到service到mapper调用delete(id)功能,根据id对用户表删除操作)。
(1)修改密码功能
*left.html(核心代码 29-32行 )
功能描述:【超链接请求路径为@{/toUpdatePwd}】
<li><a th:href="@{/toUpdatePwd}" target="mainFrame"><img
th:src="@{/images/btn_password.gif}" />
</a>
</li>
*framecontroller(核心代码 60-67行)
功能描述:【从session中获取用户id,根据id查询user表,存为User类型对象,返回到updatePwd页面】
@RequestMapping("/toUpdatePwd")
public String toUpdatePwd(HttpSession session, Model model) {
Long userid = (Long) session.getAttribute("user");
Integer id = userid.intValue();
User user = userService.findById(id);
model.addAttribute("user", user);
return "updatePwd";
}
此处的userService.findById(id)方法不再赘述,同上述已实现,访问service,mapper.返回User类型的对象数据。
*updatePwd的js(核心代码 1-19行)
功能描述:【对修改按钮添加事件,使用ajax请求,请求路径为/user/toPwdUpdate/" 参数为newPwd】
*usercontroller(核心代码 152-162行)
功能描述:【获取用户输入的newPwd新密码,从session中获取用户名,用户id,根据id来修改用户密码 访问userService的updatePwd(newPwd,id)方法,返回设置登录成功,前端则判断成功后到登录页面,让用户重新登录。】
// 修改密码
@RequestMapping("/toPwdUpdate/{newPwd}")
@ResponseBody
public String toProviderUpdate(@PathVariable("newPwd") String newPwd,HttpSession session) {
Long userid = (Long) session.getAttribute("user");
Integer id = userid.intValue();
userService.updatePwd(newPwd,id);
String flag = "登录成功";
//修改完密码重新登录
return flag;
}
*userService(核心代码 68-70行)
功能描述:【呗controller层调用,访问mapper层updatePwd(userPassword,id)】
//更新密码
@Override
public void updatePwd(String userPassword, Integer id) {
userMapper.updatePwd(userPassword,id);
}
*usermapper(核心代码 53-55行 )
功能描述:【根据id,来修改密码】
// 更新密码
@Update("update smbms_user set userPassword=#{userPassword} where id = #{id}")
void updatePwd(String userPassword,Integer id);
(1)退出系统功能
*left.html(核心代码 33-34行 9-12行)
功能描述:【开启新页面到login路径】
<li><a href="" onClick="logout();"><img
th:src="@{/images/btn_exit.gif}" />
</a>
</li>
function logout() {
// 在顶层开启新网页
top.location = "/login";
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。