Java Web编程技术 课件 第17章SSM框架整合与实例_第1页
Java Web编程技术 课件 第17章SSM框架整合与实例_第2页
Java Web编程技术 课件 第17章SSM框架整合与实例_第3页
Java Web编程技术 课件 第17章SSM框架整合与实例_第4页
Java Web编程技术 课件 第17章SSM框架整合与实例_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb编程技术本章介绍Spring、SpringMVC如何与MyBatis整合,整合后开发基于SSM的应用程序。MyBatis与Spring的整合MyBatis与SpringMVC的整合基于SSM的会员管理第17章SSM框架整合与实例在前面章节中,分别讲解了Spring、SpringMVC和MyBatis的相关知识,然而在实际的项目开发中,Spring、SpringMVC和MyBatis需要整合在一起使用。SSM框架的分层结构SSM(Spring+SpringMVC+MyBatis)是目前最流行的开源框架。SSM框架是一个分层式开发架构,它在JavaEE多层模型的基础上对每一层又进行了细分,划分出4层结构,分别是:表示层(JSP)、业务控制层(Controller)、业务逻辑层(Service)、数据持久层(Mapper接口),如图17-1所示。17.1整合环境搭建由于SpringMVC是Spring框架的一个模块,SpringMVC与Spring之间不存在整合的问题,只要引入相应的JAR包即可。因此,SSM框架的整合只涉及MyBatis与Spring的整合,以及MyBatis与SpringMVC的整合。17.2在pom.xml中添加依赖项17.2.1要实现SSM框架的整合,首先需要准备这Spring和MyBatis框架整合所需的JAR包,本书使用Maven作为项目管理工具,因此需要在pom.xml中添加依赖项,具体如下。1.Spring框架所需的包使用到的Spring框架包使用下面依赖项,目前的版本是6.0.2。<dependency><groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency>在pom.xml中添加依赖项17.2.12.数据库驱动JAR包本书使用MySQL8数据库,它的数据库驱动程序包使用下面依赖项。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency>在pom.xml中添加依赖项17.2.13.MyBatis框架所需的JAR包使用MyBatis框架需要添加下面依赖项。<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency>在pom.xml中添加依赖项17.2.14.数据源C3P0和Lombok所需的包C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC规范标准扩展。目前使用它的开源项目有Hibernate,Spring等。本书使用C3P0数据源,使用下面依赖项。<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version></version></dependency><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>在pom.xml中添加依赖项17.2.15.JSP标准标签库JSTL包

若使用Tomcat11及以上版本(支持JakartaEE10)使用下面依赖项。<dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>2.0.0</version></dependency>在pom.xml中添加依赖项17.2.16.MyBatis与Spring整合的中间件为了满足MyBatis用户对Spring框架的需求,MyBatis社区开发了一个用于整合这两个框架的中间件MyBatis-Spring。从/artifact/org.mybatis/mybatis-spring地址下载该中间件。目前该中间件的最新版本是2.0.7,使用下面依赖项。<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.1</version></dependency>基于MapperScannerConfigurer的整合17.2.2使用MyBatisSpring中间件可以采用MapperScannerConfigurer类通过自动扫描的形式来配置MyBatis的映射器。MapperScannerConfigurer的使用非常简单,只需要在Spring的配置文件applicationContext.xml中添加如下代码。<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去--><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property><!--指定要自动扫描Mapper接口所在的基础包--><propertyname="basePackage"value="com.boda.mapper"></property></bean>编写配置文件17.2.3在基于SSM框架的应用程序中,需要编写多个配置文件,如下所示:applicationContext.xml,它是Spring的配置文件,主要配置数据源、会话工厂以及MyBatis与Spring整合的中间件等,如清单17.2所示。mybatis-config.xml,MyBatis的配置文件,主要配置MyBatis日志、映射文件等,如清单17.3所示。springmvc-config.xml,它是SpringMVC配置文件,主要配置静态资源、视图解析器等,如清单17.4所示。web.xml,它是项目的部署描述文件,主要配置SpringMVC的前端控制器等,如清单17.5所示。整合应用测试17.2.4完成了SSM框架的整合环境搭建,就可以开发测试应用程序。本例使用第5章清单5.8在数据库中创建的products表。下面是创建应用程序的具体步骤。(1)在项目的src/main/java目录中,创建com.boda.domain包,并在其中创建Product实体类,代码如清单17.6所示。清单17.6Product.java(2)在项目的src/main/java目录中,创建com.boda.mapper包,并在包中创建持久化类ProductMapper接口和ProductMapper.xml文件,代码如下。清单17.7ProductMapper.java(3)在项目的src/main/java目录中,创建com.boda.service包,并在包中创建服务接口ProductService和ProductServiceImpl实现类,代码如下。清单17.8ProductService.java清单17.9ProductServiceImpl.java整合应用测试17.2.4(4)在项目的src/main/java目录中,创建com.boda.controller包,并在包中创建用于处理页面请求的ProductController控制器,代码如下。清单17.10ProductController.java(5)在WEB-INF目录中创建一个jsp文件夹,在其中创建一个用于显示客户信息的JSP页面product.jsp,代码如下。清单17.11product.jsp(6)在浏览器地址栏中输入下面地址访问客户号为222的客户信息,显示结果如图17-2所示。http://localhost:8080/chapter17/find-product?id=222基于SSM的会员管理17.3本节在上一节将Spring、SprngMVC与MyBatis成功整合的基础上开发一个简单的会员管理系统,该系统实现会员的注册、登录、查询、删除和修改的功能。该系统的架构可以分为下面几层:表示层:由多个JSP页面组成。业务控制层:使用MemberController控制器类。业务逻辑层:通过业务逻辑组件构成。数据持久层:使用MySQL数据库存储系统数据,使用MyBatis框架操作数据。数据库层实现17.3.1本会员管理系统负责维护会员信息,系统只需要一个会员表。使用MySQL的webstore数据库存储会员表members,该表结构如表17-1所示。字段名数据类型宽度是否主键含义idint10是会员IDusernamevarvhar30否姓名passwordvarvhar10否口令emailvarvhar30否邮箱地址telephonechar11否电话数据库层实现17.3.1创建members表的SQL代码如下。CREATETABLEmembers(idINTPRIMARYKEY,usernameVARCHAR(30)NOTNULL,passwordVARCHAR(10),emailVARCHAR(30),telephoneVARCHAR(11));POJO类设计17.3.2

本应用只使用一个POJO类,即Member类,包括属性id、username、password、email和telephone,对应于members表的字段,代码如下。

清单17.12Member.java@Data@NoArgsConstructor@AllArgsConstructorpublicclassMember{privateintid;//会员标识privateStringusername;//会员名privateStringpassword;//会员口令privateStringemail;//会员EmailprivateStringtelephone;//电话}数据访问层设计17.3.3数据访问层设计主要创建Mapper映射器接口和Mapper.xml配置文件。1.创建映射器Mapper接口创建MemberMapper接口,在该接口中定义6个方法,可以实现添加会员、修改会员、删除会员、按姓名和口令查找会员、按id查找会员及查找全部会员。清单17.13MemberMapper.javapublicinterfaceMemberMapper{@Insert("INSERTINTOmembersVALUES(#{id},#{username},#{password},"+"#{email},#{telephone})")publicintsave(Membermember);//添加会员@Delete("DELETEFROMmembersWHEREid=#{id}")publicintdelete(intid);//删除会员@Update("UPDATEmembersSETusername=#{username},"+"password=#{password},email=#{email},telephone=#{telephone}"+"WHEREid=#{id}")publicintupdate(Membermember);//更新会员@Select("SELECT*FROMmembersWHEREid=#{id}")publicMemberfindById(intid);//按id查找会员@Select("SELECT*FROMmembersWHEREusername=#{username}")publicMemberfindByName(Stringusername);//按姓名查找会员@Select("SELECT*FROMmembers")publicList<Member>findAll();//查找全部会员}业务逻辑层设计17.3.4

业务逻辑层设计包含两部分,一是创建业务逻辑组件接口MemberService;二是创建业务逻辑组件实现类MemberServiceImpl。1.业务逻辑组件接口

创建一个MemberService接口,定义添加会员、更新会员、删除会员、按id查找及查找全部会员等方法。清单17.14MemberService.javaMemberService.java清单17.14

publicinterfaceMemberService{publicintsave(Membermember);//添加会员publicintupdate(Membermember);//更新会员publicintdelete(intid);//删除会员publicMemberfindById(intid);//按id查找会员publicList<Member>findAll();//查找全部会员publicMemberfindByName(Stringusername,Stringpassword);//按姓名查找会员}业务逻辑层设计17.3.4

2.

业务逻辑组件实现类创建MemberServiceImpl类,它实现MemberService接口。在MemberServiceImpl类中通过调用数据访问组件来实现业务逻辑操作。清单17.15MemberServiceImpl.javaMemberServiceImpl.java清单17.15@Service@TransactionalpublicclassMemberServiceImplimplementsMemberService{@AutowiredprivateMemberMappermemberMapper;@Overridepublicintsave(Membermember){//添加会员//如果表中不包含该会员,则添加该会员if(memberMapper.findById(member.getId())==null)returnmemberMapper.save(member);else return0;}@Overridepublicintupdate(Membermember){//更新会员//如果表中存在该会员,则更新该会员if(memberMapper.findById(member.getId())!=null)returnmemberMapper.update(member);else return0;}@Overridepublicintdelete(intid){//删除会员//如果表中存在该会员,则删除该会员if(memberMapper.findById(id)!=null)returnmemberMapper.delete(id);else return0;}@OverridepublicMemberfindById(intid){//按id查找会员returnmemberMapper.findById(id);}publicList<Member>findAll(){//查找全部会员returnmemberMapper.findAll();}//按姓名查找会员publicMemberfindByName(Stringusername,Stringpassword){ Membermember=memberMapper.findByName(username); if(member!=null&&member.getPassword().equals(password)){ returnmember;}returnnull;}}控制器的开发17.3.5在项目的src目录中创建com.boda.controller包,并在包中创建控制器MemberController,用于处理页面请求,代码如下。清单17.16MemberController.javaMemberController.java清单17.16@ControllerpublicclassMemberController{ privatestaticfinalLoglogger=LogFactory.getLog(MemberController.class);

@Autowired privateMemberServicememberService;

//显示注册表单 @RequestMapping(value="/member-register",

method=RequestMethod.GET) publicModelAndViewregister(Modelmodel){ ("registercalled"); returnnewModelAndView("memberForm","command",newMember()); } //添加会员 @RequestMapping(value="/save-member") publicStringsaveMember(@ModelAttributeMembermember,Modelmodel){ ("savemembercalled"); intn=memberService.save(member); if(n==1){ List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList"; }else{ return"error"; } }//显示登录表单@RequestMapping(value="/login",method=RequestMethod.GET)publicModelAndViewlogin(Modelmodel){ ("logincalled"); returnnewModelAndView("memberLogin","command",newMember());} //实现会员登录@RequestMapping(value="/member-login",method=RequestMethod.POST)publicStringmemberLogin(Stringusername,Stringpassword,Modelmodel){ ("loginmembercalled"); Membermember=memberService.findByName(username,password); if(member!=null){

model.addAttribute("member",member);

return"welcome"; }else{

return"error"; } }

//查找所有会员信息@RequestMapping(value="/find-all-member")publicStringfindAllMember(Modelmodel){ ("findallmembercalled"); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

//按编号查找会员@RequestMapping(value="/find-member")publicStringfindMemberById(Integerid,Modelmodel){ ("findMembercalled"); Membermember=memberService.findById(id); model.addAttribute("member",member); return"member";}

//删除会员@RequestMapping(value="/delete-member/{id}")publicStringdeleteMember(@PathVariableIntegerid,Modelmodel){ ("deletemembercalled"); intn=memberService.delete(id); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

//修改会员@RequestMapping(value="/edit-member/{id}")publicStringeditMember(@PathVariableIntegerid,Modelmodel){ ("editmembercalled"); Membermember=memberService.findById(id); model.addAttribute("member",member); return"memberEditForm";}

//更新会员@RequestMapping(value="/update-member")publicStringupdateMember(@ModelAttributeMembermember,Modelmodel){ ("updatemembercalled"); intn=memberService.update(member); List<Member>members=memberService.findAll(); model.addAttribute("memberList",members); return"memberList";}

视图的实现15.3.6

本应用的视图主要包括会员注册页面、编辑页面、显示所有会员页面、显示登录页面等,如下所示。1.会员注册页面

会员注册页面memberForm.jsp包含一个表单,用来输入会员信息,代码如下。

清单17.17memberForm.jspmemberForm.jsp清单17.17<head><title>会员注册</title><linkhref="css\main.css"rel="stylesheet"type="text/css"/></head><body><divclass="container"><form:formmethod="POST"action="save-member"><fieldset><legend>新会员注册</legend><p><labelfor="id">用户号:</label><form:inputid="id"path="id"/></p><p><form:labelpath="username">用户名:</form:label><form:inputpath="username"/></p><p><form:labelpath="password">口令:</form:label><form:passwordpath="password"/></p><p><form:labelpath="email">邮箱:</form:label><form:inputpath="email"/></p><p><form:labelpath="telephone">电话:</form:label><form:inputpath="telephone"/></p> <pclass="buttons"><inputid="submit"type="submit"value="提交"><inputid="reset"type="reset"value="重置"></p></fieldset></form:form>

视图的实现15.3.6在浏览器地址栏输入http://localhost:8080/chapter17/member-register,控制首先转到控制器类的register()方法,之后转到memberForm.jsp注册页面,在其中填入会员注册信息,如图17-3所示,单击“提交”按钮,注册成功控制最终转到memberList.jsp页面。视图的实现15.3.62.会员登录页面会员登录页面memberLogin.jsp包含一个表单,用户接收输入的会员名和口令,代码如下。清单17.18memberLogin.jspmemberLogin.jsp清单17.18<form:formmethod="POST"action="member-login"><fieldset><legend>会员登录</legend><p><form:labelpath="username">会员名</form:label><form:inputpath="username"name="username"/></p><p><form:labelpath="password">密码</form:label><form:passwordpath="password"name="password"/></p><pclass="buttons"><inputid="submit"type="submit"value="提交"><inputid="reset"type="reset"value="重置"></p></fieldset></form:form>视图的实现15.3.63.显示所有会员页面

在会员注册成功后,或删除、更新会员信息后,控制转向memberList.jsp页面,显示所哟会员信息。该页面中还为每条会员记录提供了“删除”和“修改”链接,点击链接将执行相应的动作删除和修改会员。清单17.19memberList.jspmemberList.jsp清单17.19<tableclass="tabletable-borderedtable-sm"><tr><th>客户号</th><th>客户名</th><th>口令</th><th>邮箱</th><th>电话</th><th>修改</th><th>删除</th></tr><c:forEachvar="member"items="${memberList}"><tr><td>${member.id}</td><td>${member.username}</td><td>${member.password}</td><td>${member.email}</td><td>${member.telephone}</td><td><ahref="edit-member/${member.id}">修

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论