




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章基于SMM框架的应用开发回顾使用SMM架构的优势是:简单、灵活、易于扩展。避免了复杂的缓存机制,在程序运行效率方面也得到了相应的提高。Spring3.0注解支持,从而提高程序的开发效率。MyBatisGenerator能够自动生成持久层映射。@Autowired注解用于自动装配对象,类似于在applicationContext.xml文件中注入对象。在注入Mapper时,其注入顺序是:dataSource→sqlSessionFactory→xxMapper。本章内容1MapperDAO2权限管理程序1实现“商品管理”程序的修改功能2实现“权限管理”程序的修改权限功能改进“商品信息管理”案例,
完成商品表信息修改功能实践练习MapperDAO方法详解完成客户信息列表完成客户信息组合查询技术讲解讲解时间:30分钟实践时间:60分钟6.1MapperDAO:内容预览6.1.1MapperDAO方法详解MapperDAO方法使用Generator自动工具生成时,系统产生了一个Mapper类,它封装了DML的常用方法。方法名说明countByExample通过任意查询条件,返回表中的数据行数deleteByExample通过任意条件删除表数据,返回受影响的行数deleteByPrimaryKey通过主键删除表数据,返回受影响的行数insert全字段添加数据,返回受影响的行数insertSelective任意字段添加数据,返回受影响的行数selectByExample通过任意条件查询数据,返回List结果集selectByPrimaryKey通过主键查询数据,返回实体对象updateByExampleSelective通过任意条件更新表数据,返回受影响的行数updateByExample更新全字段的数据,返回受影响的行数updateByPrimaryKeySelective通过主键更新表任意字段数据,返回受影响的行数updateByPrimaryKey通过主键更新表全字段数据,返回受影响的行数6.1.1MapperDAO方法详解Example参数在方法中使用了大量的Example作为参数,该如何使用?CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameEqualTo("穆勒");List<Customer>list=customerMapper.selectByExample(example);MyBatis代码selectcus_id,cus_name,cus_birthday,cus_gradefromcustomerWHERE(cus_name=?)SQL语句输出通过cus_name字段查询结果集6.1.1MapperDAO方法详解Customercustomer=newCustomer();customer.setCusGrade("NONE");CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameLike("穆%");intcount=customerMapper.updateByExampleSelective(customer,example);通过cus_name字段模糊匹配,更新cus_grade,返回结果集。updatecustomerSETcus_grade=?WHERE(cus_namelike?)SQL语句输出MyBatis代码6.1.1MapperDAO方法详解CustomerExampleexample=newCustomerExample();example.createCriteria().andCusNameEqualTo("jack");example.or(example.createCriteria().andCusGradeEqualTo("VIP"));example.setOrderByClause("cus_iddesc");List<Customer>list=customerMapper.selectByExample(example);通过cus_name和cus_grade字段查询,并通过cus_id倒序结果集。selectcus_id,cus_name,cus_birthday,cus_gradefromcustomerWHERE(cus_name=?)or(cus_grade=?)orderbycus_iddescSQL语句输出MyBatis代码6.1.2完成客户信息列表本案例要求实现客户信息列表功能。开启SpringMVC框架对JSTL标签库的支持;依次编写数据库访问层、业务逻辑层和控制层的代码;最后,在页面中使用JSTL,结合EL表达式渲染。显示客户信息列表功能6.1.2完成客户信息列表1.在viewSpace-servlet.xml文件中,添加视图层对JSTL标签库的支持。viewSpace-servlet.xml<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="viewClass" value="org.springframework.web.servlet.view.JstlView"></property></bean>6.1.2完成客户信息列表2.在CustomerService类中,编写获取用户列表的方法。3.在CustomerController类中,编写控制器方法,通过request保存输出结果集。4.在index.jsp页面中,添加跳转链接,请求控制器中的all()方法。CustomerService.xmlpublicList<Customer>findCustomers(){CustomerExampleexample=newCustomerExample();returncustomerMapper.selectByExample(example);}CustomerController.java@RequestMapping(value="/all")publicStringall(HttpServletRequestrequest){ request.setAttribute("cusList",customerService.findCustomers()); return"display.jsp";}index.jsp<ahref="all.form">查看客户信息列表</a>6.1.2完成客户信息列表5.在WebRoot目录中,创建display.jsp文件,接收并渲染结果集。display.jsp<%@tagliburi="/jsp/jstl/core"prefix="c"%><%@tagliburi="/jsp/jstl/fmt"prefix="fmt"%>……<tableborder="1"width="500"align="center">……<c:forEachvar="cus"items="${cusList}"varStatus="vs"> <tr> <td>${vs.count}</td> <td>${cus.cusName}</td> <td><fmt:formatDatevalue="${cus.cusBirthday}" pattern="yyyy年MM月dd日"/></td> <td>${cus.cusGrade}</td> </tr></c:forEach></table>日期类型格式化6.1.3完成客户信息组合查询本案例在客户列表基础上,增加信息的组合查询功能。对“用户名”和“客户级别”字段进行组合查询。如果直接点击“查找”按钮,则查询出所有客户信息;当输入一个条件时,则按单条件查询;如果输入两个条件,将使用AND多条件查询。实现客户信息组合查询功能6.1.3完成客户信息组合查询1.在CustomerService类中,编写findByProperty方法,接收查询参数,返回查询列表。CustomerService.javapublicList<Customer>findByProperty(Customercus){CustomerExampleexample=newCustomerExample();Criteriac=example.createCriteria();if(!"请选择".equals(cus.getCusGrade())) //等级条件匹配 c.andCusGradeEqualTo(cus.getCusGrade()); //and条件拼接if(!"".equals(cus.getCusName())) //姓名条件模糊匹配 c.andCusNameLike("%"+cus.getCusName()+"%");returncustomerMapper.selectByExample(example); }客户信息条件查询6.1.3完成客户信息组合查询2.在CustomerController类中,编写search方法,接收查询参数,返回查询结果集。CustomerController.java@RequestMapping(value="/search")publicStringsearch(@ModelAttribute("customer")Customercus,HttpServletRequestrequest){request.setAttribute("cusList",customerService.findByProperty(cus));return"display.jsp";}将查询结果保存到request对象中6.1.3完成客户信息组合查询3.在display.jsp页面中,添加表单。display.jsp<tableborder="1"width="500"align="center"><tr> <tdcolspan="4"> <formaction="search.form"method="post">
客户姓名:<inputname="cusName"/>|
客户等级: <selectname="cusGrade"> <optionvalue="请选择">-=请选择=-</option> <optionvalue="NONE">NONE</option> <optionvalue="VIP">VIP</option> </select>| <inputtype="submit"value="查找"> </form></table>6.1.3完成客户信息组合查询4.在浏览器index页面中。重新点击“查看客户信息列表”超链接,显示display.jsp页面。在使用AND多条件查询时,要使用同一个Criteria对象操作。例如:Criteriac=example.createCriteria();c.andCusGradeEqualTo();c.andCusGradeEqualTo(); 如果,每次都使用新的example.createCriteria()调用子方法,此时条件会被覆盖6.1.4学生实践练习实践时间:60分钟改进“商品信息管理”案例,完成商品表信息修改功能。在details.jsp页面中修改商品信息,点击“修改”按钮,数据库信息更新。修改后,回到本页面显示修改后的信息。6.1.4学生实践练习在GoodsService类中,编写修改商品信息的业务逻辑代码。在GoodsController类中,编写处理修改的控制器方法。修改details.jsp页面,添加表单和提交按钮。在浏览器地址栏中,输入http://localhost:8080/goodsProject/details.jsp地址,查看运行结果。
改进“权限管理程序”案例,
完成修改权限功能实践练习程序设计和数据库设计搭建程序框架完成用户权限查询功能完成权限添加功能技术讲解讲解时间:30分钟实践时间:60分钟6.2权限管理程序:内容预览6.2.1程序设计和数据库设计权限管理是任何软件程序必备的功能,权限管理中包含对权限和权限组的管理,再将权限或权限组授予用户,权限是限制用户访问的依据。在复杂系统中,对权限管理的依赖性很大。在本程序中仅对权限级别进行授权,程序实现功能如下:用户信息列表用户权限查询新用户授权功能6.2.1程序设计和数据库设计数据库中涉及三张表,分别为用户表(Users)、权限表(Roles)和用户权限中间表(user_role_link),三张表的设计是典型的多对多关系。6.2.2搭建程序框架使用MyBatisGenerator自动工具,通过数据库中的表生成映射,包括Entity、DAO类和MapperXML配置文件。6.2.2搭建程序框架在Users实体类中添加对Roles实体类的引用?Mapper如何配置?publicclassUsers{privateList<Roles>roles;//省略get/set……}<resultMapid="RolesResultMap"type="com.mstf.smm.entity.Users"
extends="BaseResultMap"><collectionproperty="roles"ofType="com.mstf.smm.entity.Roles"
column="user_id"> <idproperty="roleId"column="role_id"/> <resultproperty="roleName"column="role_name"/></collection></resultMap>6.2.3完成用户权限查询功能本案例实现用户列表显示和用户权限查询功能,当用户进入index.jsp页面时,首先加载用户信息列表,其中包括姓名和密码信息。完成用户权限查询功能6.2.3完成用户权限查询功能当点击“权限”链接时,显示用户所拥有的权限。完成用户权限查询功能6.2.3完成用户权限查询功能1.在UsersMapper.xml文件中,添加<select>元素配置sql命令,该sql命令用于查询用户信息和所拥有的权限信息,并且在对应Mapper接口中配置代理方法。<selectid="selectRoleNameByPrimaryKey"resultMap="RolesResultMap"parameterType="java.lang.Integer">SELECTu.user_id,u.user_name,r.role_nameFROMusersuINNERJOINuser_role_linklONu.user_id=l.user_idINNERJOINrolesrONl.role_id=r.role_idWHEREu.user_id=#{userId,jdbcType=INTEGER}</select>6.2.3完成用户权限查询功能2.在UsersService类中,编写findAll和findRolesByUserID方法,用于查询所有用户和用户权限信息。//查询所有用户publicListfindAll(){returnusersMapper.selectByExample(null);}//通过用户ID查询,用户的权限publicUsersfindRolesByUserID(Integerid){returnusersMapper.selectRoleNameByPrimaryKey(id);}6.2.3完成用户权限查询功能3.在UsersController类中,编写用于响应页面请求的方法,并在web.xml文件中将欢迎(启动)页面设置为“getUsersAll.form“。4.在index.jsp页面中,添加列表显示的html元素。由老师演示代码的实现步骤6.2.4完成权限添加功能本案例在示例6.3基础上添加授权功能,当用户尚未授予任何权限时,点击“新用户授权”超链接进入授权页面,首先将显示要授权的用户姓名和权限列表。完成权限添加功能6.2.4完成权限添加功能1.在RolesService类中,编写saveRole方法,接收用户id和权限的id参数,执行批量添加方法。publicvoidsaveRole(intuserId,int[]roleId){for(inti=0;i<roleId.length;i++){ userRoleLinkMapper.insert(newUserRoleLink(userId,roleId[i]));}}6.2.4完成权限添加功能2.在RolesController类中,编写grant方法实现授权,并返回index.jsp页面,显示当前已授权的用户权限。@RequestMapping(value="/grant")publicStringgrant(@RequestParam("grantRole")int[]grantRole,@RequestParam("userId")intuserId){rolesService.saveRole(userId,grantRole);//返回index.jsp页面
return"getUsersRole.form?id="+userId;}6.2.4完成权限添加功能2.在RolesController类中,编写grant方法实现授权,并返回index.jsp页面,显示当前已授权的用户权限。@RequestMapping(value="/grant")publicStringgrant(@RequestParam("grantRole")int[]grantRole,@RequestParam("userId")intuserId){rolesService.saveRole(userId,grantRole);//返回index.jsp页面
return"getUsersRole.form?id="+userId;}3.在display.jsp页面中,添加表单。6.2.5学生实践练习实践时间:60分钟在权限管理程序的现有基础上,为程序新增修改权限功能。6.2.5学生实践练习进入权限修改的页面,初始化页面,并且现在当前用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玻璃防火知识培训课件
- 气柜基础知识培训课件
- 分期买卖车辆合同书
- 2025年市场营销学课件资源集成
- 手房买卖贷款协议书
- 人身保险案例分析
- 美景左岸营销推广方案
- 建筑施工意外伤害救护基本知识
- 手房购房合同补充协议
- 框架结构抗震性能优化实施办法
- 蛋糕投标书技术方案
- 机房建设验收报告
- 环境岩土工程学课件-东南大学-潘华良境岩土工程学概论-9大环境岩土工程问题
- 公路养护的档案管理-公路养护档案的内容及分类
- 武汉大学《819宏微观经济学》知识板块归纳与重点名词解释大全
- 脊柱内镜应用与进展
- 学校食品安全会议记录内容
- 中国古代文物赏析
- 2022年江苏省录用公务员笔试《公安专业科目》试题(网友回忆版)
- 光伏电站螺旋地桩承载力计算软件
- 医用耗材配送服务方案
评论
0/150
提交评论