当前位置: 首页 > 后端技术 > Java

初识MVC

时间:2023-04-01 16:44:14 Java

MVC,即Model、View、Controller。MVC可以理解为一种代码组织方式,可以为代码编写减少一些成本。下面通过一个项目的代码来体验一下MVC:项目介绍:数据库中有一个account表,里面存放了用户的账号、密码、用户名、余额。本项目是实现账户表的增删改查。account表的定义:createtableaccount(idintprimarykeyauto_increment,account_namevarchar(30),account_pwdvarchar(30),account_novarchar(30),account_balanceint);entity层账户类定义:/****@TableNameaccount*/@DatapublicclassAccountimplementsSerializable{//privateIntegerid;私人字符串帐户名;//私有字符串accountPwd;//私有字符串帐户号;//私有整数账户余额;privatestaticfinallongserialVersionUID=1L;@Overridepublicbooleanequals(Objectthat){if(this==that){返回真;}if(that==null){返回false;}if(getClass()!=that.getClass()){返回false;}帐户其他=(帐户)那;return(this.getId()==null?other.getId()==null:this.getId().equals(other.getId()))&&(this.getAccountName()==null?other.getAccountName()==null:this.getAccountName().equals(other.getAccountName()))&&(this.getAccountPwd()==null?other.getAccountPwd()==null:this.getAccountPwd().equals(other.getAccountPwd()))&&(this.getAccountNo()==null?other.getAccountNo()==null:this.getAccountNo().equals(other.getAccountNo()))&&(this.getAccountBalance()==null?other.getAccountBalance()==null:this.getAccountBalance().equals(other.getAccountBalance()));}@OverridepublicinthashCode(){finalintprime=31;整数结果=1;结果=素数*结果+((getId()==null)?0:getId().hashCode());结果=素数*结果+((getAccountName()==null)?0:getAccountName().hashCode());结果=素数*结果+((getAccountPwd()==null)?0:getAccountPwd().hashCode());结果=素数*结果+((getAccountNo()==null)?0:getAccountNo().hashCode());结果=素数*结果+((getAccountBalance()==null)?0:getAccountBalance().hashCode());返回结果;}@OverridepublicStringtoString(){StringBuildersb=newStringBuilder();sb.append(getClass().getSimpleName());sb.append("[");sb.append("Hash=").append(hashCode());sb.append(",id=").append(id);sb.append(",accountName=").append(accountName);sb.append(",accountPwd=").append(accountPwd);sb.append(",accountNo=").append(accountNo);sb.append(",accountBalance=").append(accountBalance);sb.append(",serialVersionUID=").append(serialVersionUID);sb.append("]");返回sb.toString();}}mapper层的AccountMapper接口定义:/***@authorAdministrator*@description针对表【account】的数据库操作Mapper*@createDate2022-08-1216:19:39*@Entitycom.wn.ssm080812.entity.Account*/publicinterfaceAccountMapper{intdeleteByPrimaryKey(Longid);intinsert(账户记录);intinsertSelective(账户记录);账户selectByPrimaryKey(Longid);账户登录(StringaccountName,StringaccountPwd);列表<账户>queryAll();intupdateByPrimaryKeySelective(账户记录);intupdateByPrimaryKey(Accountrecord);}service层的AccountService接口定义:publicinterfaceAccountService{intdeleteByPrimaryKey(Longid);intinsert(账户记录);intinsertSelective(账户记录);账户selectByPrimaryKey(Longid);账户登录(StringaccountName,StringaccountPwd);列表<账户>queryAll();intupdateByPrimaryKeySelective(账户记录);intupdateByPrimaryKey(Accountrecord);}service层的AccountServiceImpl类定义:@ServicepublicclassAccountServiceImplimplementsAccountService{@AutowiredprivateAccountMapperaccountMapper;@Override酒吧licintdeleteByPrimaryKey(Longid){返回accountMapper.deleteByPrimaryKey(id);}@Overridepublicintinsert(Accountrecord){returnaccountMapper.insert(record);}@OverridepublicintinsertSelective(账户记录){返回0;}@OverridepublicAccountselectByPrimaryKey(Longid){returnaccountMapper.selectByPrimaryKey(id);}@OverridepublicAccountlogin(StringaccountName,StringaccountPwd){returnaccountMapper.login(accountName,accountPwd);}@OverridepublicListqueryAll(){returnaccountMapper.queryAll();}@OverridepublicintupdateByPrimaryKeySelective(账户记录){返回0;}@OverridepublicintupdateByPrimaryKey(Accountrecord){returnaccountMapper.updateByPrimaryKey(record);}}Controller层的AccountController定义:@RestController@RequestMapping("account")publicclassAccountController{@AutowiredprivateAccountServiceaccountService;@GetMapping(value="loginDo")@ResponseBodypublicResultlogin(StringaccountName,StringaccountPwd,HttpSessionsession){Accountaccount=accountService.login(accountName,accountPwd);}if(account!=null){session.setAttribute("account",account);返回结果.ok();}else{returnResult.error("用户名或密码错误");}}@GetMapping(value="queryAll")@ResponseBodypublicResultqueryAll(){Listlist=accountService.queryAll();returnResult.ok().data("列表",列表);}@GetMapping(value="queryById")@ResponseBodypublicResultqueryById(Longid){账户账户=accountService.selectByPrimaryKey(id);returnResult.ok().data("账户",账户);}@PostMapping(值="/addDo")@ResponseBodypublicObjectadd(Accountaccount){intresult=accountService.insert(account);HashMapmap=newHashMap<>();map.put("code",result>0?200:500);返回地图;}@GetMapping(value="delete")@ResponseBodypublicObjectdelete(Longid){intresult=accountService.deleteByPrimaryKey(id);HashMapmap=newHashMap<>();map.put("code",result>0?200:500);returnmap;}@PostMapping(value="update")@ResponseBodypublicvoidupdate(Accountaccount){intresult=accountService}.updateByPrimaryKey(account);HashMapmap=newHashMap<>();map.put("code",result>0?200:500);}}Controller层的IndexController定义:@ControllerpublicclassIndexController{@RequestMapping("账户")publicStringtoAccount(){返回“账户/账户”;}@RequestMapping("login")publicStringtoLogin(){return"/WEB-INF/static/login.html";}@RequestMapping("admin")publicStringtoAdmin(){return"/WEB-INF/static/admin.html";}}MVC中的M对应项目的service层和mapper层,V对应项目的webapp.WEB-INF。templates(存储页面),C对应项目的controllerlayer1。该页面用于显示数据。2、controller层用于接收不同的HTTP请求,并将数据返回给网页。3、service层用于接收controller层的调用,实现具体的服务,并向controller层返回数据。4、mapper层用于接收service层的调用,对数据库中的account表进行增删改查,并将数据返回给service层。MVC采用面向接口的编程风格,使得每一层的实现类的更换都比较简单,几乎不需要改变实现类的上层类,尤其是在使用IOC(InversionOfControl)容器时.因为分层管理代码,在开发过程中,如果应用程序报错,可以将问题锁定在某一层。