目录
写博客的小背景
大二结束后,跟着老师学习web开发,用的是SSM框架即spring+springMVC+mybatis。0基础学习,困难重重,好在有老师和学姐学长们的帮助,以及我们小组同学之间的不断交流,才渐渐的打开了web开发的大门,一步一步的向前走。
学而不思则罔,思而不学则殆。半个月的学习使我领略到了一个工程的开发远比写一句hello world要复杂的多,其中涉及到各种各样的知识技能,如若不加整理,终将是一堆散沙,久而久之,或许将随风而去。总结便是聚沙成塔的过程。
开发工具——intelij IDEA
项目管理工具maven
下面介绍如何用maven建一个web工程
建好之后的目录结构
配置Tomcat
点击运行
运行结果
建一个ssm小例子
文件目录的结构如下:
这样建目录结构符合maven的约定
然后标记文件夹的属性
1.将java文件夹标记为sources root
2.将resources标记为resources root
3.同样的操作方式,依次将test目录下的java文件夹标记为test sources root
4.将test目录下的resources文件夹标记为test resources root
浏览一下项目的整个文件目录结构:
下面是各个文件的原码
开始配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.snnu</groupId>
<artifactId>ccs</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>webapp1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.ccs.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.23</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<!--数据库相关依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
<scope>runtime</scope>
</dependency>
<!--数据库链接池-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!--DAO框架:MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!--mybatis自身实现的spring整合依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--Servlet web相关依赖 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--spring依赖-->
<!--1)spring核心依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<!--2)spring dao层依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<!--3)spring-web相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<!--4)spring test相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>webapp1</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
配置logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
配置spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置整合MyBatis过程 -->
<!-- 1:配置数据库相关参数 properties的属性:${url}-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--2:数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置链接池属性 -->
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<!-- c3p0连接池的私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接后不自动commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- 获取连接超时时间 -->
<property name="checkoutTimeout" value="1000"/>
<!-- 当前获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!-- 3:配置SqlSessionFactory对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据连接池-->
<property name="dataSource" ref="dataSource"/>
<!--配置MyBatis全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="com.snnu.entity"/>
<!--扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!--4:配置扫描DAO接口包,动态实现DAO接口,注入到spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入SQLSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描DAO接口包-->
<property name="basePackage" value="com.snnu.dao"/>
</bean>
</beans>
配置spring-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--扫描service包下所有使用注解的类型-->
<context:component-scan base-package="com.snnu.service"/>
<!--配置事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据库连接池-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置基于注解的声明式事务
默认使用注解来管理事务
-->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
配置spring-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置springMVC-->
<!--1.开启springMVC注解模式-->
<!--简化配置
(1)自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
(2)提供一系列:数据绑定,数字和日期的format @NumberFormat,@DataTimeFormat,
xml,json默认读写支持
-->
<mvc:annotation-driven/>
<!--2:静态资源默认servlet配置-->
<!--1加入对静态资源的处理:js,gif,png-->
<!--2允许使用"/"做整体映射-->
<mvc:default-servlet-handler/>
<!--配置jsp 显示ViewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--前缀-->
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<!--后缀-->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<!--4扫描web相关的bean-->
<context:component-scan base-package="com.snnu.web"/>
</beans>
配置jdbc.properties
说明:user=root (root是你的mysql的用户名)
password是你的mysql的密码
url=jdbc:mysql://127.0.0.1:3306/work?useUnicode=true&charsetEncoding=utf8&useSSL=false
work是你建的数据库的名字
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/work?useUnicode=true&charsetEncoding=utf8&useSSL=false
user=root
password=123456
配置mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!--使用jdbc的getGeneratedKeys 获取数据库自增主键值 -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 使用列别名替换列名 默认:true-->
<setting name="useColumnLabel" value="true"/>
<!-- 开启驼峰命名转换:Table(create_time)->Entity(createTime)-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
配置web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<!--配置DispatcherServlet -->
<servlet>
<servlet-name>ccs-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置springMVC需要加载的配置文件
spring-dao.xml,spring-service.xml,spring-web.xml
Mybatis->spring -> springMVC
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ccs-dispatcher</servlet-name>
<!--默认匹配所有的请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
下面开始写各个文件
JobDao.java
package com.snnu.dao;
import com.snnu.entity.Job;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
public interface JobDao {
Job selectByName(String jobName);
Job selectById(int jobId);
List<Job> queryAllJob();
void deleteById(int jobId);
void insertJob(Job job);
}
Worker_JobDao.java
package com.snnu.dao;
import com.snnu.entity.Worker_Job;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
public interface Worker_JobDao {
void insert(Worker_Job worker_job);
List<Worker_Job> queryAllWorkerJob();
void deleteByWorkerIdAndJobId(@Param("workerId")Integer workerId, @Param("jobId")Integer jobId);
}
WorkerDao.java
package com.snnu.dao;
import com.snnu.entity.Worker;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
public interface WorkerDao {
List<Worker> queryAll();
Worker selectByName(String workerName);
Worker selectById(int workerId);
void deleteById(int workerId);
void insertWorker(Worker worker);
}
Job.java
package com.snnu.entity;
/**
* Create by pengweijie on 2018/7/27
*/
public class Job {
private Integer jobId;
private String jobName;
private Integer salary;
public int getJobId() { return jobId; }
public void setJobId(int jobId) {
this.jobId = jobId;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public Job(Integer jobId, String jobName, Integer salary) {
this.jobId = jobId;
this.jobName = jobName;
this.salary = salary;
}
@Override
public String toString() {
return "Job{" +
"jobId=" + jobId +
", jobName='" + jobName + '\'' +
", salary=" + salary +
'}';
}
}
Worker.java
package com.snnu.entity;
/**
* Create by pengweijie on 2018/7/27
*/
public class Worker {
private Integer workerId;
private String workerName;
private String workerSex;
private String workerAge;
private String workerPhone;
public Worker(Integer workerId, String workerName, String workerSex,String workerAge, String workerPhone) {
this.workerId = workerId;
this.workerName = workerName;
this.workerSex=workerSex;
this.workerAge = workerAge;
this.workerPhone = workerPhone;
}
public int getWorkerId() {
return workerId;
}
public void setWorkerId(int workerId) {
this.workerId = workerId;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workerName) {
this.workerName = workerName;
}
public String getWorkerAge() {
return workerAge;
}
public void setWorkerAge(String workerAge) {
this.workerAge = workerAge;
}
public String getWorkerPhone() {
return workerPhone;
}
public void setWorkerPhone(String workerPhone) {
this.workerPhone = workerPhone;
}
public String getWorkerSex() {
return workerSex;
}
public void setWorkerSex(String workerSex) {
this.workerSex = workerSex;
}
@Override
public String toString() {
return "Worker{" +
"workerId=" + workerId +
", workerName='" + workerName + '\'' +
", workerSex='" + workerSex + '\'' +
", workerAge='" + workerAge + '\'' +
", workerPhone='" + workerPhone + '\'' +
'}';
}
}
Worker_Job.java
package com.snnu.entity;
/**
* Create by pengweijie on 2018/7/27
*/
public class Worker_Job {
private Integer workerId;
private Integer jobId;
private String workerName;
private String jobName;
private Integer salary;
private Worker worker;
private Job job;
public Worker_Job(Integer workerId, Integer jobId, String workerName, String jobName, Integer salary) {
this.workerId = workerId;
this.jobId = jobId;
this.workerName = workerName;
this.jobName = jobName;
this.salary = salary;
}
public Worker_Job(Worker worker, Job job) {
this.workerId = worker.getWorkerId();
this.jobId = job.getJobId();
this.workerName = worker.getWorkerName();
this.jobName = job.getJobName();
this.salary = job.getSalary();
}
@Override
public String toString() {
return "Worker_Job{" +
"workerId=" + workerId +
", jobId=" + jobId +
", workerName='" + workerName + '\'' +
", jobName='" + jobName + '\'' +
", salary=" + salary +
'}';
}
public Integer getWorkerId() {
return workerId;
}
public void setWorkerId(Integer workerId) {
this.workerId = workerId;
}
public Integer getJobId() {
return jobId;
}
public void setJobId(Integer jobId) {
this.jobId = jobId;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workName) {
this.workerName = workName;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
}
DistributeServiceImpl.java
package com.snnu.service.impl;
import com.snnu.dao.JobDao;
import com.snnu.dao.WorkerDao;
import com.snnu.dao.Worker_JobDao;
import com.snnu.entity.Job;
import com.snnu.entity.Worker;
import com.snnu.entity.Worker_Job;
import com.snnu.service.DistributeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
@Service
public class DistributeServiceImpl implements DistributeService {
@Autowired
private WorkerDao workerDao;
@Autowired
private JobDao jobDao;
@Autowired
private Worker_JobDao worker_jobDao;
@Override
public Worker getWorkerById(Integer workerId) {
return workerDao.selectById(workerId);
}
@Override
public List<Worker> getWorkerList() {
return workerDao.queryAll();
}
@Override
public List<Job> getJobList() {
return jobDao.queryAllJob();
}
@Override
public List<Worker_Job> getWorkerJobList() {
return worker_jobDao.queryAllWorkerJob();
}
@Override
public void addWorker(Worker worker) {
workerDao.insertWorker(worker);
}
@Override
public void addJob(Job job) {
jobDao.insertJob(job);
}
@Override
public void deleteJob(Integer JobId) {
jobDao.deleteById(JobId);
}
@Override
public void fireWorker(Integer WorkerId) {
workerDao.deleteById(WorkerId);
}
@Override
public void DistributeJob(String workerName, String jobName) {
Worker worker = workerDao.selectByName(workerName);
Job job = jobDao.selectByName(jobName);
System.out.println(worker.toString());
System.out.println(job.toString());
Worker_Job worker_job = new Worker_Job(worker, job);
System.out.println(worker_job.toString());
worker_jobDao.insert(worker_job);
}
@Override
public void deleteWorkerJob(Integer workerId, Integer jobId) {
worker_jobDao.deleteByWorkerIdAndJobId(workerId, jobId);
}
}
DistributeService.java
package com.snnu.service;
import com.snnu.entity.Job;
import com.snnu.entity.Worker;
import com.snnu.entity.Worker_Job;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
public interface DistributeService {
//获取单个工人
Worker getWorkerById(Integer workerId);
//获取所有工人信息
List<Worker> getWorkerList();
//获取工作列表
List<Job> getJobList();
//获取工作安排信息表
List<Worker_Job> getWorkerJobList();
//安排工作
void DistributeJob(String workerName,String jobName);
//添加工人
void addWorker(Worker worker);
//开除工人
void fireWorker(Integer workerId);
//新增工作
void addJob(Job job);
//废除工作
void deleteJob(Integer jobId);
//删除“员工-工作”记录
void deleteWorkerJob(Integer workerId,Integer jobId);
}
DistributeController.java
package com.snnu.web;
import com.snnu.entity.Job;
import com.snnu.entity.Worker;
import com.snnu.entity.Worker_Job;
import com.snnu.service.DistributeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* Create by pengweijie on 2018/7/27
*/
@Controller
@RequestMapping("/distribute")
public class DistributeController {
@Autowired
private DistributeService distributeService;
@RequestMapping(value = "/worker", method = RequestMethod.GET)
public String workerList(Model model) {
List<Worker> workerlist = distributeService.getWorkerList();
model.addAttribute("workerList", workerlist);
return "workerList";
}
@RequestMapping(value = "/job", method = RequestMethod.GET)
public String jobList(Model model) {
List<Job> jobList = distributeService.getJobList();
model.addAttribute("jobList", jobList);
return "jobList";
}
@RequestMapping(value = "/workerjob", method = RequestMethod.GET)
public String workjobList(Model model) {
List<Worker_Job> worker_jobList = distributeService.getWorkerJobList();
model.addAttribute("work_jobList", worker_jobList);
return "worker_jobList";
}
@RequestMapping(value = "/{workerId}/deleteWorker", method = RequestMethod.GET)
public String deleteWorker(@PathVariable("workerId") Integer workerId, Model model) {
distributeService.fireWorker(workerId);
return "redirect:/distribute/worker";
}
@RequestMapping(value = "/{jobId}/deleteJob", method = RequestMethod.GET)
public String deleteJob(@PathVariable("jobId") Integer jobId) {
distributeService.deleteJob(jobId);
return "redirect:/distribute/job";
}
@RequestMapping(value = "/{workerId}/{jobId}/deleteWorkerJob", method = RequestMethod.GET)
public String deleteWorkerJob(@PathVariable("workerId") Integer workerId,
@PathVariable("jobId") Integer jobId) {
distributeService.deleteWorkerJob(workerId, jobId);
return "redirect:/distribute/workerjob";
}
@RequestMapping(value = "/addWorker", method = RequestMethod.GET)
public String addWorker() {
return "updateWorker";
}
@RequestMapping(value = "/addJob", method = RequestMethod.GET)
public String addJob() {
return "updateJob";
}
@RequestMapping(value = "/addWorkerJob", method = RequestMethod.GET)
public String addWorkerJob() {
return "updateWorkerJob";
}
@RequestMapping(value = "/registerworker")
public String registerworker(@RequestParam("workerId") Integer workerId,
@RequestParam("workerName") String workerName,
@RequestParam("workerSex") String workerSex,
@RequestParam("workerAge") String workerAge,
@RequestParam("workerPhone") String workerPhone) {
Worker worker = new Worker(workerId, workerName, workerSex, workerAge, workerPhone);
distributeService.addWorker(worker);
return "redirect:/distribute/worker";
}
@RequestMapping(value = "/registerjob")
public String registerworker(@RequestParam("jobId") Integer jobId,
@RequestParam("jobName") String jobName,
@RequestParam("salary") Integer salary) {
Job job = new Job(jobId, jobName, salary);
distributeService.addJob(job);
return "redirect:/distribute/job";
}
@RequestMapping(value = "distributeJob", method = RequestMethod.POST)
public String distribute(@RequestParam("workerName") String workerName,
@RequestParam("jobName") String jobName) {
System.out.println(workerName);
System.out.println(jobName);
distributeService.DistributeJob(workerName, jobName);
return "redirect:/distribute/workerjob";
}
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String backHomePage() {
return "index";
}
}
JobDao.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.snnu.dao.JobDao">
<select id="selectById" resultType="Job">
SELECT *
FROM job
WHERE jobId=#{jobId}
</select>
<select id="selectByName" resultType="Job">
SELECT *
FROM job
WHERE jobName=#{jobName}
</select>
<delete id="deleteById" parameterType="Job">
DELETE FROM job WHERE jobId = #{jobId}
</delete>
<insert id="insertJob" parameterType="Job">
INSERT INTO Job (
jobId,
jobName,
salary)
VALUES (
#{jobId},
#{jobName},
#{salary}
)
</insert>
<select id="queryAllJob" resultType="Job">
SELECT *
FROM job
ORDER BY jobId ASC
</select>
</mapper>
Worker_JobDao.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.snnu.dao.Worker_JobDao">
<insert id="insert" parameterType="Worker_Job">
INSERT INTO worker_job (
workerId,
jobId,
workerName,
jobName,
salary)
VALUES (
#{workerId},
#{jobId},
#{workerName},
#{jobName},
#{salary}
)
</insert>
<select id="queryAllWorkerJob" resultType="Worker_Job">
SELECT *
FROM worker_job
ORDER BY workerId DESC
</select>
<delete id="deleteByWorkerIdAndJobId" parameterType="Worker_Job">
DELETE
FROM worker_job
WHERE workerId = #{workerId} and jobId=#{jobId}
</delete>
</mapper>
WorkerDao.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.snnu.dao.WorkerDao">
<select id="selectById" resultType="Worker">
SELECT *
FROM worker
WHERE workerId= #{workerId}
</select>
<select id="selectByName" resultType="Worker" parameterType="String">
SELECT *
FROM worker
WHERE workerName= #{workerName}
</select>
<delete id="deleteById" parameterType="Worker">
DELETE FROM worker WHERE workerId = #{workerId}
</delete>
<insert id="insertWorker" parameterType="Worker">
INSERT INTO worker (
workerId,
workerName,
workerSex,
workerAge,
workerPhone)
VALUES (#{workerId},
#{workerName},
#{workerSex},
#{workerAge},
#{workerPhone})
</insert>
<select id="queryAll" resultType="Worker">
SELECT *
FROM worker
ORDER BY workerId ASC
</select>
</mapper>
head.jsp
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入 Bootstrap -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
tag.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
common/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="common/tag.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>主界面</title>
<%@include file="common/head.jsp"%>
</head>
<body>
<!-- 页面显示部分-->
<div class="container">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h2>主菜单</h2>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>
<a class="btn btn-info" href="/distribute/worker" >员工表</a>
</th>
<th>
<a class="btn btn-info" href="/distribute/job" >职位表</a>
</th>
<th>
<a class="btn btn-info" href="/distribute/workerjob" >员工-职位表</a>
</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</body>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
jobList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="common/tag.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>职业列表页</title>
<%@include file="common/head.jsp"%>
</head>
<body>
<!-- 页面显示部分-->
<div class="container">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h2>职业列表</h2>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>
<a class="btn btn-info" href="/distribute/index" >返回主页</a>
</th>
<th>
<a class="btn btn-info" href="/distribute/addJob" >添加职业</a>
</th>
</tr>
</thead>
</table>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>职业编号</th>
<th>职业名称</th>
<th>职业薪资</th>
<th>操 作</th>
</tr>
</thead>
<tbody>
<c:forEach var="job" items="${jobList}">
<tr>
<td>${job.jobId}</td>
<td>${job.jobName}</td>
<td>${job.salary}</td>
<td>
<a class="btn btn-info" href="/distribute/${job.jobId}/deleteJob" >删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
updateJob.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改工作信息</title>
</head>
<body>
<h3>修改页面</h3>
<br>
<form action="/distribute/registerjob" method="post">
<table>
<tr>
<td><label>职业编号:</label></td>
<td><input type="text" id="jobId" name="jobId"></td>
</tr>
<tr>
<td><label>职业名称:</label></td>
<td><input type="text" id="jobName" name="jobName"></td>
</tr>
<tr>
<td><label>职业薪资:</label></td>
<td><input type="text" id="salary" name="salary"></td>
</tr>
<tr>
<td><input type="submit" id="submit" value="保存"></td>
<a href="/distribute/job">返回</a>
</tr>
</table>
</form>
</body>
<html>
updateWorker.jsp
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
<title>修改用户信息</title>
</head>
<body>
<h3>修改页面</h3>
<br>
<form action="/distribute/registerworker" method="post">
<table>
<tr>
<td><label>工号:</label></td>
<td><input type="text" id="workerId" name="workerId"></td>
</tr>
<tr>
<td><label>姓名:</label></td>
<td><input type="text" id="workerName" name="workerName"></td>
</tr>
<tr>
<td><label>性别:</label></td>
<td><input type="text" id="workerSex" name="workerSex"></td>
</tr>
<tr>
<td><label>年龄:</label></td>
<td><input type="text" id="workerAge" name="workerAge"></td>
</tr>
<tr>
<td><label>电话:</label></td>
<td><input type="text" id="workerPhone" name="workerPhone"></td>
</tr>
<tr>
<td><input type="submit" id="submit" value="保存"></td>
<a class="button" href="/distribute/worker">返回</a>
</tr>
</table>
</form>
</body>
<html>
updateWorkerJob.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>安排工作</title>
</head>
<body>
<h3>安排工作</h3>
<br>
<form action="/distribute/distributeJob" method="post">
<table>
<tr>
<td><label>员工姓名:</label></td>
<td><input type="text" id="workerName" name="workerName"></td>
</tr>
<tr>
<td><label>职业名称:</label></td>
<td><input type="text" id="jobName" name="jobName"></td>
</tr>
<tr>
<td><input type="submit" id="submit" value="保存"></td>
<a href="/distribute/workerjob">返回</a>
</tr>
</table>
</form>
</body>
<html>
worker_jobList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="common/tag.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>已分配列表页</title>
<%@include file="common/head.jsp"%>
</head>
<body>
<!-- 页面显示部分-->
<div class="container">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h2>已分配列表</h2>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>
<a class="btn btn-info" href="/distribute/index" target="_blank">返回主页</a>
</th>
<th>
<a class="btn btn-info" href="/distribute/addWorkerJob" target="_blank">安排工作</a>
</th>
</tr>
</thead>
</table>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>员工工号</th>
<th>职业编号</th>
<th>员工姓名</th>
<th>职业名称</th>
<th>职业薪资</th>
<th>操 作</th>
</tr>
</thead>
<tbody>
<c:forEach var="worker_job" items="${work_jobList}">
<tr>
<td>${worker_job.workerId}</td>
<td>${worker_job.jobId}</td>
<td>${worker_job.workerName}</td>
<td>${worker_job.jobName}</td>
<td>${worker_job.salary}</td>
<td>
<a class="btn btn-info" href="/distribute/${worker_job.workerId}/${worker_job.jobId}/deleteWorkerJob" >删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
workerList.jsp
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%@include file="common/tag.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>工人列表页</title>
<%@include file="common/head.jsp"%>
</head>
<body>
<!-- 页面显示部分-->
<div class="container">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h2>员工列表</h2>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>
<a class="btn btn-info" href="/distribute/index" >返回主页</a>
</th>
<th>
<a class="btn btn-info" href="/distribute/addWorker" >添加员工</a>
</th>
</tr>
</thead>
</table>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>工号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>电话</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach var="worker" items="${workerList}">
<tr>
<td>${worker.workerId}</td>
<td>${worker.workerName}</td>
<td>${worker.workerSex}</td>
<td>${worker.workerAge}</td>
<td>${worker.workerPhone}</td>
<td>
<a class="btn btn-info" href="/distribute/${worker.workerId}/deleteWorker" >删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
WEB-INF/index.jsp
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%@include file="WEB-INF/jsp/common/head.jsp"%>
<!DOCTYPE html>
<html>
<head>
<title>欢迎页</title>
<%@include file="WEB-INF/jsp/common/head.jsp"%>
</head>
<body>
<!-- 页面显示部分-->
<div class="container">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h2>欢迎光临</h2>
</div>
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>
<a class="btn btn-info" href="/distribute/index" target="_blank">进入主页</a>
</th>
</tr>
</thead>
</table>
</div>
</table>
</div>
</div>
</div>
</body>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
至此,项目所有的源代码都完了。
建数据库
1.建名字为work的数据库
2.建表job,worker,worker_job
job表的项
worker表的设计
worker_job表的设计
最终结果展示
到此结束!
如果有好的建议,欢迎留言。