一.环境搭建

  • jdk安装与配置

  • Tomcat安装与配置

  • Maven安装与配置

  • Intellij IDEA安装

  • lombok插件安装

具体方法自行百度,以下只给出推荐

JDK1.8下载与安装完整教程_java1.8下载_小曾同学.com的博客-CSDN博客

【Tomcat】史上最全下载、安装配置及使用教程,(2022最新..建议收藏,教学)附Tomcat常见报错解决方法_tomcat安装及配置教程_神兽汤姆猫的博客-CSDN博客

maven的下载与安装教程(超详细)_格子衫111的博客-CSDN博客

二.测试环境

1.创建项目目录

1.创建一个Maven项目。

image-20230515140307515

2.在main目录中创建java目录

  • com.inspur.bean
  • com.inspur.controller
  • com.inspur.mapper
  • com.inspur.service

3.在resourses下创建

  • applicationContext.xml
  • dp.properties
  • mybatis-config.xml
  • springMVC.xml
  • log4j.properties
  • /mappers目录(如果不使用注解的话)

4.在webapp目录下创建以下目录

  • /css目录
  • /js目录
  • /images目录
  • /pages目录

2.配置文件

1.修改pom.xml文件,导入下列依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.inpure</groupId>
<artifactId>ZyyMms</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ZyyMms Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.2.11.RELEASE</spring.version>
<logback.version>1.2.3</logback.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
<!--简化POJO类,需要安装Lombok插件 Settings Plugins-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--JSON格式-->
<!-- <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>-->
<!--上传下载-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- pageHelper依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
<!--日期时间工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
<build>
<finalName>ZyyMms</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.1.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.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</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>

2.配置web.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--全局参数:spring配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!--配置POST请求的乱码问题-->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<!--配置spring的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--配置springMVC的前端控制器(核心控制器)-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name><!--拦截器-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--拦截所有请求,包括css,js,image-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

3.配置dp.properties

1
2
3
4
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/his?serverTimezone=UTC
jdbc.username=root
jdbc.password=root

4.配置applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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">
<!--注解扫描-->
<context:component-scan base-package="com.inspur">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--加载数据库配置文件-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<!--配置数据源,使用阿里巴巴的数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="100"/>
<property name="minIdle" value="10"/>
</bean>
<!--配置mybatis的SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="typeAliasesPackage" value="com.inspur.bean"></property>
<!--测试前注释掉-->
<!-- <property name="mapperLocations" value="classpath:mappers/*.xml"></property>-->
<property name="plugins">
<list>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</list>
</property>
</bean>
<!--配置mybatis的组件扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
<property name="basePackage" value="com.inspur.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>

</bean>

<!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--注解的事务-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

</beans>

5.mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?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>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<mappers>
<package name="com.inspur.mapper"/>
</mappers>
</configuration>

6.springMVC.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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">

<!--配置注解扫描-->
<context:component-scan base-package="com.inspur.controller">

</context:component-scan>
<!-- 静态资源解析 包括:js,css,img,html... -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<mvc:resources location="/pages/" mapping="/pages/**"></mvc:resources>

<!--注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>

<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<!--配置前缀后缀-->
<property name="prefix" value="/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

7.log4j.properties

1
2
3
4
5
6
7
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n
#在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout

3.测试环境

1.在bean目录下创建User类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.inspur.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private String password;
}

2.在mapper目录下创建UserMapper接口

1
2
3
4
5
6
7
8
9
10
11
12
package com.inspur.mapper;

import com.inspur.bean.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
@Insert("insert into user(username,password) values (#{username},#{password})")
int save(User user);
}

3.在service目录下创建UserService接口

1
2
3
4
5
6
7
8
package com.inspur.service;

import com.inspur.bean.User;

public interface UserService {
public boolean save(User user);
}

4.在service目录下创建impl目录并在该目录下创建UserServiceImpl类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.inspur.service.impl;

import com.inspur.bean.User;
import com.inspur.mapper.UserMapper;
import com.inspur.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public boolean save(User user) {
System.out.println(user);
return userMapper.save(user)>0;
}
}

5.修改index.jsp文件,创建一个表单

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<body>
<h2>Hello World!</h2>

<form action="${pageContext.request.contextPath}/user/save" method="post">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>

6.在webapp/pages目录下创建success.jsp

1
2
3
4
5
6
7
8
9
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
success
</body>
</html>

7.创建his数据库,并创建user表

1
2
3
4
5
6
create database his
CREATE TABLE user(
id int(11) ,
username varchar(30) ,
password varchar(30)
) DEFAULT CHARSET=utf8;

8.运行项目,插入数据成功即可。

三.项目开发

登录功能

1.创建一个扩展类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
@AllArgsConstructor
@NoArgsConstructor
public class QueryExtends {

private String id;

private String name;

private String password;

private String role;

}

创建一个mapper,查看是哪种用户并获取它的id,name,role

1
2
3
4
5
6
7
8
9
@Mapper
public interface QueryExtendsMapper {
@Select(" SELECT id, username, role, password FROM users WHERE username=#{name} AND PASSWORD =#{password} " +
" UNION " +
" SELECT id, name, role, password FROM member WHERE name=#{name} AND PASSWORD =#{password} " +
" UNION " +
" SELECT id, name, role, password FROM doctor WHERE name=#{name} AND PASSWORD =#{password} ")
QueryExtends login(@Param(value = "name") String name, @Param(value = "password") String password);
}

service层创建接口与实现类

1
2
3
4
public interface QueryExtendsService {
//登录
QueryExtends login(String name,String password);
}
1
2
3
4
5
6
7
8
9
10
@Service
@Transactional
public class QueryExtendsServiceImpl implements QueryExtendsService {
@Autowired
private QueryExtendsMapper queryExtendsMapper;
@Override
public QueryExtends login(String name, String password) {
return queryExtendsMapper.login(name,password);
}
}

控制层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@Controller
@RequestMapping("/")
public class QueryExtendsController {
@Autowired
private QueryExtendsService queryExtendsService;

@Autowired
private UsersService usersService;

@Autowired
private MemberService memberService;

@Autowired
private DoctorService doctorService;

//登录
@RequestMapping("login")
public String login(String name, String password, HttpSession session){
QueryExtends queryExtends = queryExtendsService.login(name, password);
if(queryExtends!=null){//登录成功跳转到后端页面
session.setAttribute("users",queryExtends);
return "index";
}else {
return "login";//登录失败跳转到登录面
}

}
//注销
@RequestMapping("/logout")
public String logout(HttpSession session){
session.removeAttribute("users");
return "login";
}

@PostMapping("updatepwd")
public String updatepwd(String password1, String password2, String password3, HttpServletRequest request) {
QueryExtends users = (QueryExtends) request.getSession().getAttribute("users");
String message = "";
if (password2.equals(password3)) {
if (password1.equals(users.getPassword())) {
if (Objects.equals(users.getRole(), "1")) {
usersService.updatePassword(users.getId(), password3);
} else if (Objects.equals(users.getRole(), "2")) {
doctorService.updatePassword(users.getId(), password3);
} else {
memberService.updatePassword(users.getId(), password3);
}
} else {
message = "原密码输入错误!";
request.getSession().setAttribute("message", message);
return "userpwdupdate";
}
} else {
message = "两次输入的密码不一致!";
request.getSession().setAttribute("message", message);
return "userpwdupdate";
}
return "index";
}
}

创建过滤器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class LoginCheckFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;//获取HttpServletRequest
HttpSession session= request.getSession();
Object users = session.getAttribute("users");
if(users!= null){//登录了直接放行
filterChain.doFilter(servletRequest,servletResponse);
}else {
String requestURI = request.getRequestURI();
if(requestURI.contains("login")){//包含login的路径就行放行需要放行
filterChain.doFilter(servletRequest,servletResponse);
}else {//其他的直接跳转到登录界面
request.getRequestDispatcher("/pages/login.jsp").forward(servletRequest,servletResponse);
}
}

}
}

在web.xml中配置过滤器

1
2
3
4
5
6
7
8
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.inspur.filter.LoginCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/pages/*</url-pattern>
</filter-mapping>

增删改查功能

以增删改查会员为例

创建实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Data
public class Member {

private String id;

private String name;

private String password;

private String role;

private String realname;

private String credit;

private String sex;

private Integer age;

private String tel;

private Integer balance;

private String anaphylaxis;

private String createTime;

}

创建mapper

注解方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Mapper
public interface MemberMapper {

@Insert("insert into member (id, name, password, role, realname, credit, sex, age, tel, balance, anaphylaxis, create_time) values (#{id}, #{name}, #{password}, #{role}, #{realname}, #{credit}, #{sex}, #{age}, #{tel}, #{balance}, #{anaphylaxis}, #{createTime})")
int save(Member members);

@Update("update member set name = #{name}, credit = #{credit}, tel = #{tel}, balance = #{balance} where id = #{id}")
int update(Member members);

List<Member> findMemberByCondition(Member member);

@Delete("delete from member where id = #{id}")
boolean deleteByMemberId(String id);

@Select("select * from member where id = #{id}")
Member findMemberById(String id);

@Update("update member set password=#{password} where id = #{id}")
void updatePassword(@Param(value = "id") String id, @Param(value = "password") String password);
}

映射文件方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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.inspur.mapper.MemberMapper">

<select id="findMemberByCondition" resultType="com.inspur.entity.Member">
select * from member
<where>
<if test="id!=null and id!=''">
and id= #{id}
</if>
<if test="name!=null and name!=''">
and name like '%${name}%'
</if>
<if test="credit!=null and credit!=''">
and credit like '%${credit}%'
</if>
<if test="tel!=null and tel!=''">
and tel like '%${tel}%'
</if>
</where>
</select>
</mapper>


业务层创建接口与实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface MemberService {
boolean saveOrUpdateMember(Member member);

PageInfo<Member> getMemberByCondition(Member member, Integer pageNum, Integer pageSize);

boolean deleteByMemberId(String id);

Member findMemberById(String id);

List<Member> getAllMember();

void updatePassword(String id, String password);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@Service
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberMapper membersMapper;

@Override
public boolean saveOrUpdateMember(Member member) {
String membersId = member.getId();
if (membersId == null || membersId.equals("")) {
return save(member);
} else {
return update(member);
}
}

boolean save(Member members) {
String id = new DateTime().toString("yyyyMMddHHmmss");
members.setId(id);
members.setRole("3");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
members.setCreateTime(simpleDateFormat.format(new Date()));
return membersMapper.save(members) > 0;
}

boolean update(Member members) {
return membersMapper.update(members) > 0;
}
@Override
public PageInfo<Member> getMemberByCondition(Member member, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Member> membersList = membersMapper.findMemberByCondition(member);
PageInfo<Member> pageInfo = new PageInfo<>(membersList);
return pageInfo;
}

@Override
public boolean deleteByMemberId(String id) {
boolean b = membersMapper.deleteByMemberId(id);
return b;
}

@Override
public Member findMemberById(String id) {
Member members = membersMapper.findMemberById(id);
return members;
}

@Override
public List<Member> getAllMember() {
return membersMapper.findMemberByCondition(new Member());
}

@Override
public void updatePassword(String id, String password) {
membersMapper.updatePassword(id, password);
}
}

控制层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
@Controller
@RequestMapping("/member")
public class MemberController {
@Autowired
private MemberService memberService;

@Autowired
private CostSettleDetailService costSettleDetailService;

@Autowired
private PaymentDetailService paymentDetailService;


@PostMapping("save")
public String save(Member member, HttpServletRequest request) {
Member updateMember = (Member) request.getAttribute("member");
if (updateMember != null) {
member.setId(updateMember.getId());
}
boolean flag = memberService.saveOrUpdateMember(member);

return "redirect:/member/list";
}

@GetMapping("list")
public String getMemberByCondition(Member member,
HttpServletRequest request,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize) {
PageInfo<Member> pageInfo = memberService.getMemberByCondition(member, pageNum, pageSize);
request.setAttribute("pageInfo", pageInfo);
return "memberlist";
}
@GetMapping("deleteByMemberId")
public String deleteByMemberId(String id) {
boolean flag = memberService.deleteByMemberId(id);
return "redirect:/member/list";
}

@GetMapping("findMemberById")
public String findMemberById(String id, HttpServletRequest request) {
Member member = memberService.findMemberById(id);
request.setAttribute("member", member);
return "membermodify";
}

@GetMapping("increase")
public String increase(String id, HttpServletRequest request) {
Member member = memberService.findMemberById(id);
request.getSession().setAttribute("czMember", member);
return "membercz";
}

@PostMapping("saveIncrease")
public String saveIncrease(Integer money, String rechargeMethod, HttpServletRequest request) {
Member member = (Member) request.getSession().getAttribute("czMember");
member.setBalance(member.getBalance() + money);
PaymentDetail paymentDetail = new PaymentDetail();
SimpleDateFormat formatId = new SimpleDateFormat("yyyyMMddHHmmss");
paymentDetail.setId(formatId.format(new Date()));
paymentDetail.setRechargeMethod(rechargeMethod);
paymentDetail.setRechargeAmount(money);
paymentDetail.setMemberId(member.getId());
paymentDetail.setBalance(member.getBalance());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
paymentDetail.setCreateTime(simpleDateFormat.format(new Date()));
paymentDetailService.save(paymentDetail);
boolean b = memberService.saveOrUpdateMember(member);
return "redirect:/member/list";
}

@GetMapping("payById")
public String payById(Integer money, String costSettleDetailId, HttpServletRequest request) {
QueryExtends queryExtends = (QueryExtends) request.getSession().getAttribute("users");
Member member = memberService.findMemberById(queryExtends.getId());
member.setBalance(member.getBalance() - money);
memberService.saveOrUpdateMember(member);//扣钱
costSettleDetailService.finishBySettleId(costSettleDetailId);
PaymentDetail paymentDetail = new PaymentDetail();
paymentDetail.setMemberId(member.getId());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
paymentDetail.setId(simpleDateFormat.format(new Date()));
paymentDetail.setRechargeAmount(money);
paymentDetail.setBalance(member.getBalance());
paymentDetail.setCreateTime(simpleDateFormat2.format(new Date()));
paymentDetail.setRechargeMethod("微信支付");

CostSettleDetail costSettleDetail = costSettleDetailService.getCostSettleById(costSettleDetailId);
paymentDetail.setUserId(costSettleDetail.getUserId());
// System.out.println("看过来 " + queryExtends.getId());
paymentDetailService.save(paymentDetail);
return "redirect:/costSettleDetail/listByMemberId";
}
}

其他关键技术

前端开启el表达式与c标签库

1
2
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用for-each遍历集合,其中pageInfo.list为固定写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            <c:forEach items="${pageInfo.list}" var="doctorAdvice">
<tr>
<td>${doctorAdvice.id}</td>
<td>${doctorAdvice.memberId}</td>
<td>
<c:forEach items="${doctorList}" var="doctor">
<c:if test="${doctor.id == doctorAdvice.doctorId}">${doctor.name}</c:if>
</c:forEach>
</td>
<td>${doctorAdvice.createTime}</td>
<td>${doctorAdvice.prescription}</td>
<%-- <td>西药治疗:皮炎平</td>--%>
<td><a onclick="deletes(${doctorAdvice.id})"><img src="../images/icon/del.png" width="16" height="16"/></a></td>
<td><a onclick="ky(${doctorAdvice.registerOrderId}, ${doctorAdvice.id})"><img src="../images/icon/edit2.png" width="16" height="16"/></a></td>
</tr>

</c:forEach>

c-if进行页面选择

1
2
3
4
5
6
7
8
<c:if test="${sessionScope.users.role==2}">
<ul>
<li><a href="${pageContext.request.contextPath}/prescribe/sendList" target="right">药品发放</a></li>
<li><a href="${pageContext.request.contextPath}/registerorder/list" target="right">挂号管理</a></li>
<li><a href="${pageContext.request.contextPath}/doctorduty/list" target="right">医生值班管理</a></li>
<li><a href="${pageContext.request.contextPath}/doctorAdvice/list" target="right">医生诊断管理</a></li>
</ul>
</c:if>

for-each加c-if进行判断选中

1
2
3
<c:forEach items="${doctorList}" var="doctor">
<c:if test="${payment.userId == doctor.id}">${doctor.name}</c:if>
</c:forEach>

导航栏效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<div id="pagination" style="align:right;margin-top:-10px;">
<div id='project_pagination' class="pagination pagination-centered">
<div class="pagination">
<ul>
<li class="disabled"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageNum=${pageInfo.isFirstPage?1:pageInfo.prePage}&pageSize=${pageInfo.pageSize}&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">«</a>
</li>
<c:forEach items="${pageInfo.navigatepageNums}" var="nav">
<li class="${pageInfo.pageNum==nav?'active':''}"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageNum=${nav}&pageSize=${pageInfo.pageSize}&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">${nav}</a>
</li>
</c:forEach>


<li>
<a href="${pageContext.request.contextPath}/doctorAdvice/list?pageNum=${pageInfo.isLastPage?pageInfo.pages:pageInfo.nextPage}&pageSize=${pageInfo.pageSize}&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">»</a>
</li>
</ul>
<ul>
<li><span>(${pageInfo.startRow}-${pageInfo.endRow}/${pageInfo.total})</span></li>
<li><span>显示条数&nbsp;:${pageInfo.size}</span></li>
</ul>
<ul>
<li class="${pageInfo.pageSize==5?'active':''}"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageSize=5&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">5</a>
</li>
<li class="${pageInfo.pageSize==10 ?'active':''}"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageSize=10&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">10</a>
</li>
<li class="${pageInfo.pageSize==15 ?'active':''}"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageSize=15&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">15</a>
</li>
<li class="${pageInfo.pageSize==20 ?'active':''}"><a
href="${pageContext.request.contextPath}/doctorAdvice/list?pageSize=20&registerOrderId=${doctorAdvice.registerOrderId}&memberId=${doctorAdvice.memberId}&createTime=${doctorAdvice.createTime}">20</a>
</li>
</ul>
</div>
</div>
</div>