admin 管理员组文章数量: 887021
2023年12月23日发(作者:c c++编辑器)
实验报告
课程名称
姓 名
专 业
实验项目
JavaEE技术
学 号
班 级
指导教师
实验日期
实验地点
实验七:Spring、MyBatis与SpringMVC
成 绩
框架整合编程
一、实验目的
1、掌握 Spring 框架的使用;
2、掌握 MyBatis 持久层框架;
3、掌握 SpringMVC 框架的使用; 4、掌握 SSM 框架的整合。
二、实验要求
1、创建 配置文件,在 中配置过滤器和前端控制器;
2、整合 Spring 与 SpringMVC;
3、搭建 MyBatis 框架,使用 Spring 框架整合 MyBatis。
三、实验环境
Windows 7/10,MySQL/MariaDB,Eclipse,Tomcat
四、问题描述和实现过程
1、创建 maven 项目
2、创建数据库
3、创建 controller、mapper、model、service、test 包
4、使用MyBatis逆向工程,生成mapper接口和映射文件
5、执行逆向工程
6、修正MyBatis自动生成的接口文件
package ;
import ee;
import eeExample;
import ;
import ;
public interface EmployeeMapper {
long countByExample(EmployeeExample example);
int deleteByExample(EmployeeExample example);
int deleteByPrimaryKey(Integer empId);
int insert(Employee record);
int insertSelective(Employee record);
//逆向工程之后,手动增加,校验用户登录方法
Employee checkUser(String username, String password);
List
//逆向工程之后,手动增加,获取全体员工信息方法
List
//逆向工程之后,手动增加,获取数据库总行数方法
int getTotalCount();
//逆向工程之后,手动增加,分页方法
List
pageSize);
//
以上为手动添加的五个方法
Employee selectByPrimaryKey(Integer empId);
int updateByExampleSelective(@Param("record") Employee
record, @Param("example") EmployeeExample
example);
int updateByExample(@Param("record") Employee record,
@Param("example") EmployeeExample example);
int updateByPrimaryKeySelective(Employee record);
int updateByPrimaryKey(Employee record);
}
7、MyBatis属于面向接口编程,需要同步修正对于的XML文件
"/dtd/mybatis-3-
">
property="empName"/> property="empGender"/> property="empPassword"/> property="empGrade"/> property="empEmail"/> property="empDepartmentId"/> 以下为手工添加部分: select count(*) from employee 8、整合Spring与MyBatis 8.1、在资源文件夹下置入MyBatis的配置文件 8.2、在资源文件夹下置入 (1),Spring核心配置文件。负责加载数据库配置文件,数据库连接 池,配置SqlSessionFactory工厂,以及配置MapperScannerConfigurer扫描mapper包 (2),Spring配置文件,负责扫描service包 (3),Spring配置文件,负责事务管理 (4)ties数据库配置文件 (5)ties日志配置文件 9、整合 Spring MyBatis 和 SpringMVC 置入 配置文件: (1)配置 controller 扫描包 (2) 注解驱动 自动注册 RequestMappingHandlerMapping、RequestMappingHandlerAdapter 等 bean (3) 静态资源处理 (4) 配置视图解析器 (5) 定义文件上传解析器* 10、创建 Service 接口 11、创建接口实现类 12、配置 13、在WEB-INF下创建views文件夹,保存*.jsp文件 可以首先编写简单jsp,测试SSM项目构建是否成功。 14、在webapp文件夹下创建bootstrap_plugin、images、mycss文件夹,分别置入相应资源文件 15、在webapp文件夹下创建文件 16、在webapp/WEB-INF/views文件夹下创建文件 分别引入头部,左部和脚步 17、考虑显示页面分页问题,加入PageBean package ; import ; public class PageBean { //程序员指定或者页面参数 private int currentPage;//当前页 private int pageSize; //每页显示多少条 //查询数据库 private int recordCount;//数据库一共有多少条 private List recordList;//本页显示的数据列表 //计算 private int pageCount; //计算后得到的数值,总页数 private int beginPageIndex;//页面列表的开始索引(包括) private int endPageIndex; //页面列表的结束索引(包括) public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { tPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { ze = pageSize; } public int getRecordCount() { return recordCount; } public void setRecordCount(int recordCount) { Count = recordCount; } public List getRecordList() { return recordList; } public void setRecordList(List recordList) { List = recordList; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { unt = pageCount; } public int getBeginPageIndex() { return beginPageIndex; } public void setBeginPageIndex(int beginPageIndex) { ageIndex = beginPageIndex; } public int getEndPageIndex() { return endPageIndex; } public void setEndPageIndex(int endPageIndex) { eIndex = endPageIndex; } public PageBean() { } public PageBean(int currentPage, int pageSize, int recordCount, List recordList) { tPage = currentPage; ze = pageSize; Count = recordCount; List = recordList; //计算总页码 //pageCount=(recordCount+pageSize-1)/pageSize; if (recordCount % pageSize == 0) { pageCount = recordCount / pageSize; } else { pageCount = recordCount / pageSize + 1; } //计算beginPageIndex和endPageIndex //总页数不大于10,则全部显示 if (pageCount <= 10) { beginPageIndex = 1; endPageIndex = pageCount; } else { //总页数大于10,则显示当前页附近的10页 beginPageIndex = currentPage - 4; endPageIndex = currentPage + 5; //当 前面的页码数量不足4个时,则显示前10个页码 if (beginPageIndex < 1) { beginPageIndex = 1; endPageIndex = 10; } //当 后面的页码数量不足5个时,则显示后10个页码 if (endPageIndex > pageCount) { endPageIndex = pageCount; beginPageIndex = pageCount - 10 + 1; } } } } 18、在ller包中,编写 @Controller public class EmployeeController { String username; @Resource private EmployeeService employeeService; @RequestMapping("/login") public String checkUser(HttpServletRequest request, Model model) { username = ameter("username"); String password = ameter("password"); n(username + " " + password); Employee emp = ser(username, password); if (emp != null) { return "forward:/getAllEmployee"; } else { ribute("errorMessage", "错误的用户名或密码"); return "forward:/"; } } //分页 @RequestMapping("/getAllEmployee") public ModelAndView getSubEmployeeByPage(@RequestParam int currentPage) { ModelAndView mav = new ModelAndView(); int pageSize = 10; int beginIndex = (currentPage - 1) * pageSize; int recordCount = alCount(); n(recordCount); List EmployeeByPage(beginIndex, pageSize); PageBean pb = new PageBean(beginIndex, pageSize, recordCount, allEmployee); ect("employee", pb); ect("username", username); wName("showEmployee"); return mav; } } 19、编写showEmployee显示员工数据 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/jsp/jstl/core" prefix="c" %> "/TR/html4/"> charset=UTF-8"> href="bootstrap_plugin/css/"> href="mycss/"> <%@ include file="" %> <%@ include file="" %> items="${List}" var="emp"> name="myselect" value=""/> aria-hidden="true">« begin="${ageIndex}" end="${eIndex}" var="p"> href="getAllEmployee?currentPage=${p}">${p} aria-hidden="true">» <%@ include file="" %> 20、使用maven插件运行项目,测试 在地址栏输入localhost:8080/erp/ 输入正确的用户名和密码: 测试页码跳转成功!并且,显示员工部分为关联显示。 21、编写员工删除模块 1、在中添加: href="deleteEmployee?id=${}">删除 2、在 3、在EmployeeController类中添加方法: @RequestMapping("/deleteEmployee") public String deleteEmployee(@RequestParam int id){ if(Employee(id)){ return"forward:/getAllEmployee?currentPage=1"; } return"forward:/getAllEmployee?currentPage=1"; } 测试效果: 如何在第N页删除某一行信息,删除成功之后,重新定位到第N页? 解决方案:在服务器session中记录每次分页的页码。重写分页算法,加入session //分页 @RequestMapping("/getAllEmployee") public ModelAndView getSubEmployeeByPage(@RequestParam int currentPage,HttpSession session){ ModelAndView mav=new ModelAndView(); int pageSize=10; ribute("currentPage",currentPage); //增加此行代码 int beginIndex=(currentPage-1)*pageSize; int recordCount=alCount(); n(recordCount); List allEmployee=EmployeeByPage(beginIndex,pageSize); PageBean pb=new PageBean(beginIndex,pageSize,recordCount,allEmployee); ect("employee",pb); ect("username",username); wName("showEmployee"); return mav;}} 在EmployeeController类中修改deleteEmployee方法: @RequestMapping("/deleteEmployee") public String deleteEmployee(@RequestParam int id,HttpSession session){ Integer currentPage=(Integer)ribute("currentPage"); if(Employee(id)){ return"forward:/getAllEmployee?currentPage="+currentPage;} return"forward:/getAllEmployee?currentPage="+currentPage;} 22、编写新增员工模块 1、在main_中:
全选 员工id 员工姓名 性别 密码 员工等级 邮箱 部门 操作 ${} ${e} ${der} ****** ${de} ${il} ${mentName} 删除 编 辑
href="getAllEmployee?currentPage=1">员工信息
考虑员工表与部门表的关联性,新增员工信息时,需要自动显示部门信息,因此在页面跳转到新
增页面时,需要后台查询所有部门信息,置入ModelAndView中,并显示前台页面。
2、编写控制器部分:
@RequestMapping("/add")
public ModelAndView addNewEmployee(){
//从数据库中查询出全部部门的信息,置入ModelAndView
ModelAndView mav=new ModelAndView();
DepartmentExample example=new DepartmentExample();
List
department=Department(example);
ect("department",department);
wName("addNewEmployee");
return mav;}
注意:jsp前台页面可以单独传递离散的参数到后台,例如:
@RequestMapping("addEmployeeOk")
Public String addEmployeeOk(HttpServletRequest request){
String empName = ameter(“empName”);
String empId = ameter(“empId”);
…
继续封装成 model
loyee(employee);
}
在springMVC中,jsp前台可以向后台传递对象。但是要保证前台表单的name属性值必须和接收对象的属性同名。
因此,使用以下方式,代码更为简洁:
@RequestMapping("addEmployeeOk")
public String addEmployeeOk(Employee employee){
Password("123456"); //每一个新增员工初始化密码均为123456
loyee(employee);
return"forward:/getAllEmployee?currentPage=1";}
3、在views目录下新增页面:
<%@ include file="" %>
<%@ include file="" %>
<%@ include file="" %>
23、编写员工信息编辑模块
思路:
(1)点击编辑链接,首先从数据库中去除该id对应的员工信息
(2)将查询得到的员工信息置入ModelAndView中,并传递到编辑
页面
(3)在编辑页面显示出员工信息,但是员工id号不准修改,允许修改员工密码
24、编写员工查找模块
五、实验结果及分析
1.项目工程框架
2.运行结果:
(1)Mybatis逆向工程
(2)运行tomcat
(3)登录界面
(3)登录成功
(3)删除员工信息
(4)删除成功后
(5)查询员工
(6)数据库结构
六、实验总结
实验过程中也遇到许多的问题
1. 配置问题
解决办法:tomcat环境要一致
2. 用tomcat8.5运行
用tomcat7.0运行
就是找不到,在网上找了很多的解决办法,都不行,就是找不到,花了好几天,后来陆陆续续更改了一些错误,今天老师发了原码,同过源码对比,找到了了配置文件中多写了一些代码,把多余的代码注释掉就OK了,就多了一行代码,就是没有找到。
3. 没有引进去资源,导致界面成这样
由于我是从老师发的资料里面找到的bootstrap_plugins,多了个s,后来更改就OK了。
版权声明:本文标题:实验七--Spring、MyBatis与Spring+MVC框架整合编程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703317022h446661.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论