目录
前置说明
使用开发工具 IntelliJ IDEA;
Java 版本1.8.0_251;
使用数据库是关系型数据库MySQL;
项目整体目录:
项目创建:
点击file – new – project — 选择 maven 模板如下:
点击next,输入项目名称等
填好后,选择自己的maven配置文件
创建好后,在main下没有Java、resources文件夹,需要自己创建,右键main文件夹,new创建java文件夹、resources文件夹,然后右键java文件夹,选择如下:
右键resources文件夹,同样做如下操作:
pom添加依赖:
<!--SpringMVC的jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--mysql连接的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- SpringJDBC -->
<!-- 注意:与当前项目使用的其它spring依赖保持相同的版本号 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--数据库连接池dbcp的jar包-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--MyBatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!--Spring整合MyBatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!--测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!--配置过滤器,解决中文乱码 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置spring监听器,默认只加载WEB-INF文件下面的applicationContext.xml配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--改变默认配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--servlet加载springmvc配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
jdbc.properties配置文件:
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
driver=com.mysql.cj.jdbc.Driver
username=root
password=123456
initialSize=2
maxActive=10
applicationContext.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:util="http://www.springframework.org/schema/util"
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/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 自动扫描 -->
<context:component-scan base-package="com.ssm01.dao"></context:component-scan>
<context:component-scan base-package="com.ssm01.service"></context:component-scan>
<context:component-scan base-package="com.ssm01.serviceImpl"></context:component-scan>
<util:properties id="properties" location="classpath:jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="#{properties.url}"/>
<property name="driverClassName" value="#{properties.driver}" />
<property name="username" value="#{properties.username}" />
<property name="password" value="#{properties.password}" />
<property name="initialSize" value="#{properties.initialSize}" />
<property name="maxActive" value="#{properties.maxActive}" />
</bean>
<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置接口文件在哪里 -->
<property name="basePackage" value="mapper" />
</bean>
<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置XML文件在哪里 -->
<property name="mapperLocations" value="classpath:mappers/*.xml" />
<!-- 配置使用哪个数据源连接数据库 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- spring自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm01.dao"></property>
</bean>
</beans>
springmvc.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">
<!--配置包扫描,扫描到加注解的类自动创建bean组件-->
<context:component-scan base-package="com.ssm01.controller"/>
<!-- 2.配置映射处理和适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 3.视图的解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
业务逻辑实现
配置文件建好后,在Java包下创建需要的Java包,及类。
创建user实体类
package com.ssm01.entity;
import java.io.Serializable;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public int id;
public String userNo;
public String userName;
public String pwd;
public String sex;
public int age;
public String job;
public String phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserNo() {
return userNo;
}
public void setUserNo(String userNo) {
this.userNo = userNo;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User [id=" + id + ", userNo=" + userNo + ", userName="
+ userName + ", pwd=" + pwd
+ ", sex=" + sex + ", age=" + age + ", job=" + job + ", phone="
+ phone + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((job == null) ? 0 : job.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result + ((pwd == null) ? 0 : pwd.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
result = prime * result
+ ((userName == null) ? 0 : userName.hashCode());
result = prime * result + ((userNo == null) ? 0 : userNo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (job == null) {
if (other.job != null)
return false;
} else if (!job.equals(other.job))
return false;
if (phone == null) {
if (other.phone != null)
return false;
} else if (!phone.equals(other.phone))
return false;
if (pwd == null) {
if (other.pwd != null)
return false;
} else if (!pwd.equals(other.pwd))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
if (userNo == null) {
if (other.userNo != null)
return false;
} else if (!userNo.equals(other.userNo))
return false;
return true;
}
}
创建UserDao
package com.ssm01.dao;
import com.ssm01.entity.User;
import java.util.List;
public interface UserDao {
public User login(User user);
public User add(User user);
public User update(User user);
public boolean delete(int id);
public List<User> selectList();
}
创建UserService
package com.ssm01.service;
import com.ssm01.entity.User;
import java.util.List;
import java.util.Map;
public interface UserService {
public Map<String, Object> login(User user);
public Map<String, Object> add(User user);
public Map<String, Object> update(User user);
public boolean delete(int id);
public List<User> selectList();
}
创建UserServiceImpl
package com.ssm01.serviceImpl;
import com.ssm01.dao.UserDao;
import com.ssm01.entity.User;
import com.ssm01.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class UserServiceImpl implements UserService {
@Resource
UserDao userDao;
@Override
public Map<String, Object> login(User user) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("data", userDao.login(user));
return map;
}
@Override
public Map<String, Object> add(User user) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("data", userDao.add(user));
return map;
}
@Override
public Map<String, Object> update(User user) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("data", userDao.update(user));
return map;
}
@Override
public boolean delete(int id) {
return userDao.delete(id);
}
@Override
public List<User> selectList() {
return userDao.selectList();
}
}
创建UserController
package com.ssm01.controller;
import com.ssm01.entity.User;
import com.ssm01.service.UserService;
import com.ssm01.util.ResultMessage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Resource
UserService userService;
@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ResultMessage login(User user){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
try {
Map<String, Object> map = userService.login(user);
list.add(map);
return ResultMessage.newInstance(0, "登录成功", list);
} catch (Exception e) {
e.printStackTrace();
return ResultMessage.newInstance(1, "登录失败", list);
}
}
@ResponseBody
@RequestMapping(value = "/selectList", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public ResultMessage selectList(){
List<User> list = new ArrayList<User>();
try {
list = userService.selectList();
return ResultMessage.newInstance(0, "查询成功", list);
} catch (Exception e) {
e.printStackTrace();
return ResultMessage.newInstance(1, "查询失败", list);
}
}
}
创建请求返回实体类ResultMessage
package com.ssm01.util;
import java.io.Serializable;
import java.util.List;
public class ResultMessage implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int code = 0;
private String message;
private List<?> data;
public ResultMessage(){
}
public ResultMessage(int code, String message, List<?> data){
this.code = code;
this.message = message;
this.data = data;
}
public static ResultMessage newInstance(int code, String message, List<?> data){
ResultMessage obj = new ResultMessage();
obj.code = code;
obj.message = message;
obj.data = data;
return obj;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<?> getData() {
return data;
}
public void setData(List<?> data) {
this.data = data;
}
@Override
public String toString() {
return "ResultMessage [code=" + code + ", message=" + message
+ ", data=" + data + "]";
}
}
创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm01.dao.UserDao">
<resultMap type="com.ssm01.entity.User" id="UserResult">
<id property="id" column="id"></id>
<result property="userName" column="user_name"></result>
<result property="pwd" column="password"></result>
</resultMap>
<select id="login" parameterType="com.ssm01.entity.User" resultMap="UserResult">
select * from user where user_name=#{userName} and password=#{pwd}
</select>
<insert id="add" parameterType="com.ssm01.entity.User" useGeneratedKeys="true">
insert into user (user_name,password) values(#{userName},#{pwd})
</insert>
<select id="selectList" resultType="com.ssm01.entity.User">
select
id as id,
user_no as userNo,
user_name as userName,
password as pwd,
sex as sex,
age as age,
job as job,
phone as phone from user where 1=1
</select>
</mapper>
前端页面
修改index.jsp作为登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录页面</title>
</head>
<body>
<a href="add.jsp">注册</a> <br/>
<form action="${pageContext.request.contextPath}/user/login" method="post">
userName:<input type="text" name="userName" value="${userName}"/><br/>
passWord:<input type="password" name="pwd" value="${pwd}"/><br/>
<input type="submit" value="登录"/><br/>
<font color="red">${errorMsg}</font>
</form>
</body>
</html>
服务启动
添加完成后,需要配置Tomcat
点击左上角的加号图标
找到tomcat server,点击下面的local
做如下选择处理,最后点击fix;这里需要修改Tomcat的配置文件,这里是已经修改后的结果,如需修改请自行百度
做如下选择后点击OK
这里可以把library添加进来
都配置好后,即可启动工程,启动工程后回自动跳转浏览器,打开localhost:8081/SSM01
如下即是我们项目启动后请求到的jsp页面,表示项目运行成功,这里的话因为我是准备做前后端分离开发,所以这里的jsp页面先不做请求返回处理,具体的前端返回处理会在前端工程中做处理,前端vue工程已写了另一篇文章,专门介绍如何使用vue搭建前端工程,有兴趣可以查看。
数据库建表语句,这里去除了userCode字段,因为在业务中没有实际的使用,代码中也去除了该字段。其他创建时间、修改时间等字段在以上系统中没有使用,可用可不用,正常系统都会有这些字段。可添加base实体类,管理公共字段,让其他业务实体继承base实体即可。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_no` varchar(50) NOT NULL COMMENT '用户编号',
`user_name` varchar(50) NOT NULL COMMENT '用户名称',
`password` varchar(80) NOT NULL COMMENT '用户密码',
`sex` enum('男','女') NOT NULL DEFAULT '男' COMMENT '性别',
`age` int(3) DEFAULT NULL COMMENT '年龄',
`job` varchar(50) DEFAULT NULL COMMENT '工作',
`phone` varchar(20) DEFAULT NULL COMMENT '电话',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`modify_time` datetime DEFAULT NULL COMMENT '修改时间',
`modify_user` varchar(50) DEFAULT NULL COMMENT '修改人',
`del_flg` int(2) NOT NULL DEFAULT '1' COMMENT '删除标识',
PRIMARY KEY (`id`),
UNIQUE KEY `index_user_no` (`user_no`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息表'