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 selectByExample(EmployeeExample example);

//逆向工程之后,手动增加,获取全体员工信息方法

List getAllEmployee(EmployeeExample example);

//逆向工程之后,手动增加,获取数据库总行数方法

int getTotalCount();

//逆向工程之后,手动增加,分页方法

List getAllEmployeeByPage(int currentPage, int

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"/>

以下为手工添加部分:

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 allEmployee =

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">

全选 员工id 员工姓名 性别 密码 员工等级 邮箱 部门 操作

name="myselect" value=""/>

${} ${e} ${der} ****** ${de} ${il} ${mentName} 删除   编 辑

<%@ 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_中:

考虑员工表与部门表的关联性,新增员工信息时,需要自动显示部门信息,因此在页面跳转到新

增页面时,需要后台查询所有部门信息,置入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了。


本文标签: 员工 信息 显示 页面 工程