从百度云盘下载本博客的代码,https://pan.baidu.com/s/1ztOr7FnypSv-0FX_5EMIlw,提取码:soft
前往 Eclipse下载并安装的博客 https://blog.csdn.net/u011159350/article/details/113704086
本博客使用的Eclipse版本是Version: 2022-12 (4.26.0),Build id: 20221201-1913
其他版本也行
前往 Java下载并安装的博客 https://blog.csdn.net/u011159350/article/details/113703862
本博客使用的Java版本是15.0.1
其他Java也行
前往 Apache Maven下载并安装的博客 https://blog.csdn.net/u011159350/article/details/103796714
前往 MySQL下载并安装的博客 https://blog.csdn.net/u011159350/article/details/113619926
打开MySQL附带的软件MySQL WorkBench
下面是上面图片里要执行的SQL内容
CREATE TABLE `mydb`.`s001` (
`LOGIN_USERID` VARCHAR(20) NOT NULL COMMENT '登陆用户ID',
`LOGIN_PASSWORD` VARCHAR(20) NOT NULL COMMENT '登陆密码',
`USER_NAME` VARCHAR(50) NULL COMMENT '用户名表示用',
`EMAIL` VARCHAR(30) NULL COMMENT '邮件地址',
`BIRTH_YMD` VARCHAR(8) NULL COMMENT '出生年月日',
`TELPHONE_NUMBER` VARCHAR(11) NULL COMMENT '电话号码',
PRIMARY KEY (`LOGIN_USERID`))
COMMENT = '用户情报表';
在下图添加数据,然后点击Apply按钮
点击finish,就添加成功数据了。
Group Id:com.study
Artifact Id:StudySpringBoot
下面的步骤是设置jdk,因为我是设定过后重新截图,所以会看起来设定后没有变化。
双击打开下面的pom.xml文件
把pom.xml里的内容全部删除,然后下面的文件复制到pom.xml文件中
<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.0modelVersion>
<artifactId>studyartifactId>
<groupId>com.studygroupId>
<version>0.0.1-SNAPSHOTversion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.9.RELEASEversion>
<relativePath />
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>15.0java.version>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<fastjson.version>1.2.24fastjson.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>1.3.1version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
<overwrite>trueoverwrite>
<verbose>trueverbose>
configuration>
plugin>
plugins>
build>
project>
按照下图的操作,进入Eclipse商店
输入MyBatis,然后检索
webapp/WEB-INF/jsp/amc01.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>
<base href="http://localhost:8090/myweb/" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>个人网站管理系统title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
head>
<body>
<form action="amc01/login" name="amc01from" method="post">
<label for="login_userid">登陆用户名label>
<input type="text" class="form-control" id="login_userid" name="login_userid" placeholder="Username">
<br>
<label for="login_password">登陆密码label>
<input type="password" class="form-control" id="login_password" name="login_password" placeholder="Password">
<button type="submit" class="btn btn-default">Submitbutton>
form>
body>
html>
webapp/WEB-INF/jsp/amc02.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>
<base href="http://localhost:8090/myweb/" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>个人网站管理系统title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
head>
<body>
账号登录失败!<br>
<a href="amc01">重新登录a>
body>
html>
webapp/WEB-INF/jsp/index.jsp的内容如下
下面的标签没有起作用,使得两个If标签内的值都表示了出来。等研究明白了在来修改。
<%@ 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>
<base href="http://localhost:8090/myweb/" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>个人网站管理系统title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
head>
<body>
你的昵称是 ${userinfo.user_name}<br>
你的邮件是 ${userinfo.email}<br>
你的生日是 ${userinfo.birth_ymd}<br>
你的电话号码是 ${userinfo.telphone_number}<br>
c:if>
<a href="amc01">登录a>
c:if>
body>
html>
创建包:com.study,然后在该包下面创建WebAppMainApplication.java的内容如下,这是启动整个web应用的程序
package com.study;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
*
*/
@SpringBootApplication
public class WebAppMainApplication {
/**
* Web启动主方法
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(WebAppMainApplication.class, args);
}
}
创建包:com.study.action,然后在该包下面创建AMC01LoginAction .java的内容如下,这是Service类调用的程序,负责实现更加具体的业务逻辑,service类通过调用各种Action类,实现一个完整的复杂的业务逻辑。
package com.study.action;
public class AMC01LoginAction {
}
创建包:com.study.controller.amc01,然后在该包下面创建AMC01Controller .java的内容如下,这是点击jsp画面后,第一个跳转到的程序
package com.study.controller.amc01;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.study.dto.AMC01InputDto;
import com.study.dto.AMC01OutputDto;
import com.study.service.AMC01Service;
@Controller
public class AMC01Controller {
/** 画面初始化事件 */
private static final String EVT_INIT= "/";
/** 画面跳转事件 */
private static final String EVT_AMC01 = "amc01";
/** 画面登录事件 */
private static final String EVT_LOGIN = "amc01/login";
@Autowired
private AMC01Service amc01Service;
/**
* 画面的初始化事件
* @param m
* @return
*/
@RequestMapping(EVT_INIT)
public String init(Model m) {
AMC01Form amc01from = new AMC01Form();
m.addAttribute("userinfo", amc01from);
// 视图重定向index.jsp
return "index";
}
/**
* 跳转到amc01.jsp
* @return
*/
@RequestMapping(EVT_AMC01)
public String Amc01Jsp() {
// 视图重定向amc01.jsp
return "amc01";
}
/**
* 画面的登录事件
* @param m
* @param scmform
* @return
*/
@RequestMapping(value = EVT_LOGIN, method = RequestMethod.POST)
public String login(Model m, @ModelAttribute("amc01from") AMC01Form amc01from) {
AMC01InputDto amc01InputDto = new AMC01InputDto();
amc01InputDto.setLogin_userid(amc01from.getLogin_userid());
amc01InputDto.setLogin_password(amc01from.getLogin_password());
AMC01OutputDto amc01OutputDto = amc01Service.excute(amc01InputDto);
if(amc01OutputDto.getUser_name() == null) {
// 登录失败
return "amc02";
}else {
// 登录成功跳转
AMC01Form userinfo = new AMC01Form();
userinfo.setUser_name(amc01OutputDto.getUser_name());
userinfo.setEmail(amc01OutputDto.getEmail());
userinfo.setBirth_ymd(amc01OutputDto.getBirth_ymd());
userinfo.setTelphone_number(amc01OutputDto.getTelphone_number());
m.addAttribute("userinfo", userinfo);
// 视图重定向index.jsp
return "index";
}
}
}
创建包:com.study.controller.amc01,然后在该包下面创建AMC01Form .java的内容如下,从Jsp向controller类传入值和从controller类向Jsp传出值的时候,需要把值存在这个form类里
package com.study.controller.amc01;
public class AMC01Form {
/**
* 登陆用户ID
*/
private String login_userid;
/**
* 登陆密码
*/
private String login_password;
/**
* 用户名表示用
*/
private String user_name;
/**
* 邮件地址
*/
private String email;
/**
* 出生年月日
*/
private String birth_ymd;
/**
* 电话号码
*/
private String telphone_number;
/**
* 取得登陆用户ID
* @return 登陆用户ID
*/
public String getLogin_userid() {
return login_userid;
}
/**
* 设定登陆用户ID
* @param login_userid 登陆用户ID
*/
public void setLogin_userid(String login_userid) {
this.login_userid = login_userid;
}
/**
* 取得登陆密码
* @return 登陆密码
*/
public String getLogin_password() {
return login_password;
}
/**
* 设定登陆密码
* @param login_password 登陆密码
*/
public void setLogin_password(String login_password) {
this.login_password = login_password;
}
/**
* 取得用户名表示用
* @return 用户名表示用
*/
public String getUser_name() {
return user_name;
}
/**
* 设定用户名表示用
* @param user_name 用户名表示用
*/
public void setUser_name(String user_name) {
this.user_name = user_name;
}
/**
* 取得邮件地址
* @return 邮件地址
*/
public String getEmail() {
return email;
}
/**
* 设定邮件地址
* @param email 邮件地址
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 取得出生年月日
* @return 出生年月日
*/
public String getBirth_ymd() {
return birth_ymd;
}
/**
* 设定出生年月日
* @param birth_ymd 出生年月日
*/
public void setBirth_ymd(String birth_ymd) {
this.birth_ymd = birth_ymd;
}
/**
* 取得电话号码
* @return 电话号码
*/
public String getTelphone_number() {
return telphone_number;
}
/**
* 设定电话号码
* @param telphone_number 电话号码
*/
public void setTelphone_number(String telphone_number) {
this.telphone_number = telphone_number;
}
}
创建包:com.study.dto,然后在该包下面创建AMC01InputDto .java的内容如下,从controller类向service类传入值的时候、需要这个类保存值,一般命名为XXXInputDto
package com.study.dto;
public class AMC01InputDto {
/**
* 登陆用户ID
*/
private String login_userid;
/**
* 登陆密码
*/
private String login_password;
/**
* 取得登陆用户ID
* @return 登陆用户ID
*/
public String getLogin_userid() {
return login_userid;
}
/**
* 设定登陆用户ID
* @param login_userid 登陆用户ID
*/
public void setLogin_userid(String login_userid) {
this.login_userid = login_userid;
}
/**
* 取得登陆密码
* @return 登陆密码
*/
public String getLogin_password() {
return login_password;
}
/**
* 设定登陆密码
* @param login_password 登陆密码
*/
public void setLogin_password(String login_password) {
this.login_password = login_password;
}
}
创建包:com.study.dto,然后在该包下面创建AMC01OutputDto .java的内容如下,从service类向controller类传出值的时候、需要这个类保存值,一般命名为XXXOutputDto
package com.study.dto;
public class AMC01OutputDto {
/**
* 用户名表示用
*/
private String user_name;
/**
* 邮件地址
*/
private String email;
/**
* 出生年月日
*/
private String birth_ymd;
/**
* 电话号码
*/
private String telphone_number;
/**
* 取得用户名表示用
* @return 用户名表示用
*/
public String getUser_name() {
return user_name;
}
/**
* 设定用户名表示用
* @param user_name 用户名表示用
*/
public void setUser_name(String user_name) {
this.user_name = user_name;
}
/**
* 取得邮件地址
* @return 邮件地址
*/
public String getEmail() {
return email;
}
/**
* 设定邮件地址
* @param email 邮件地址
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 取得出生年月日
* @return 出生年月日
*/
public String getBirth_ymd() {
return birth_ymd;
}
/**
* 设定出生年月日
* @param birth_ymd 出生年月日
*/
public void setBirth_ymd(String birth_ymd) {
this.birth_ymd = birth_ymd;
}
/**
* 取得电话号码
* @return 电话号码
*/
public String getTelphone_number() {
return telphone_number;
}
/**
* 设定电话号码
* @param telphone_number 电话号码
*/
public void setTelphone_number(String telphone_number) {
this.telphone_number = telphone_number;
}
}
创建包:com.study.dto,然后在该包下面创建AMC01LoginUserInfoDto .java的内容如下,这是普通的dto类,这里我用来存储repository类从db中检索后返回来的值
package com.study.dto;
public class AMC01LoginUserInfoDto {
/**
* 用户名表示用
*/
private String user_name;
/**
* 邮件地址
*/
private String email;
/**
* 出生年月日
*/
private String birth_ymd;
/**
* 电话号码
*/
private String telphone_number;
/**
* 取得用户名表示用
* @return 用户名表示用
*/
public String getUser_name() {
return user_name;
}
/**
* 设定用户名表示用
* @param user_name 用户名表示用
*/
public void setUser_name(String user_name) {
this.user_name = user_name;
}
/**
* 取得邮件地址
* @return 邮件地址
*/
public String getEmail() {
return email;
}
/**
* 设定邮件地址
* @param email 邮件地址
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 取得出生年月日
* @return 出生年月日
*/
public String getBirth_ymd() {
return birth_ymd;
}
/**
* 设定出生年月日
* @param birth_ymd 出生年月日
*/
public void setBirth_ymd(String birth_ymd) {
this.birth_ymd = birth_ymd;
}
/**
* 取得电话号码
* @return 电话号码
*/
public String getTelphone_number() {
return telphone_number;
}
/**
* 设定电话号码
* @param telphone_number 电话号码
*/
public void setTelphone_number(String telphone_number) {
this.telphone_number = telphone_number;
}
}
创建包:com.study.entity,然后在该包下面创建S001Entity .java的内容如下,这是数据库实体类,对应着数据库里S001表,主要用于SQL检索的时候,本博客中没有用到这个类。
package com.study.entity;
public class S001Entity {
/**
* 登陆用户ID
*/
private String login_userid;
/**
* 登陆密码
*/
private String login_password;
/**
* 用户名表示用
*/
private String user_name;
/**
* 邮件地址
*/
private String email;
/**
* 出生年月日
*/
private String birth_ymd;
/**
* 电话号码
*/
private String telphone_number;
/**
* 取得登陆用户ID
* @return 登陆用户ID
*/
public String getLogin_userid() {
return login_userid;
}
/**
* 设定登陆用户ID
* @param login_userid 登陆用户ID
*/
public void setLogin_userid(String login_userid) {
this.login_userid = login_userid;
}
/**
* 取得登陆密码
* @return 登陆密码
*/
public String getLogin_password() {
return login_password;
}
/**
* 设定登陆密码
* @param login_password 登陆密码
*/
public void setLogin_password(String login_password) {
this.login_password = login_password;
}
/**
* 取得用户名表示用
* @return 用户名表示用
*/
public String getUser_name() {
return user_name;
}
/**
* 设定用户名表示用
* @param user_name 用户名表示用
*/
public void setUser_name(String user_name) {
this.user_name = user_name;
}
/**
* 取得邮件地址
* @return 邮件地址
*/
public String getEmail() {
return email;
}
/**
* 设定邮件地址
* @param email 邮件地址
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 取得出生年月日
* @return 出生年月日
*/
public String getBirth_ymd() {
return birth_ymd;
}
/**
* 设定出生年月日
* @param birth_ymd 出生年月日
*/
public void setBirth_ymd(String birth_ymd) {
this.birth_ymd = birth_ymd;
}
/**
* 取得电话号码
* @return 电话号码
*/
public String getTelphone_number() {
return telphone_number;
}
/**
* 设定电话号码
* @param telphone_number 电话号码
*/
public void setTelphone_number(String telphone_number) {
this.telphone_number = telphone_number;
}
}
创建包:com.study.repository,然后在该包下面创建AMC01Repository .java的内容如下,这是和AMC01Repository.xml文件相对应的类,调用这个类后,就能调用到AMC01Repository.xml,然后就能实现对数据库的增删改查。
关于怎么传入参数的博客:https://blog.csdn.net/qq_38254897/article/details/84961223
package com.study.repository;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.study.dto.AMC01LoginUserInfoDto;
@Mapper
public interface AMC01Repository {
/**
* 检索登陆用户的信息
* @param login_userid 登陆用户ID
* @param login_password 登陆密码
* @return 登陆用户的信息
*/
public AMC01LoginUserInfoDto selectUserInfo(@Param("login_userid") String login_userid,@Param("login_password") String login_password);
}
创建包:com.study.service,然后在该包下面创建AMC01Service .java的内容如下,这是controller类直接调用的程序,负责实现一段完整的业务逻辑。
package com.study.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.study.dto.AMC01InputDto;
import com.study.dto.AMC01LoginUserInfoDto;
import com.study.dto.AMC01OutputDto;
import com.study.repository.AMC01Repository;
@Service
public class AMC01Service {
@Autowired
private AMC01Repository amc01Repository;
public AMC01OutputDto excute(AMC01InputDto amc01InputDto) {
AMC01LoginUserInfoDto amc01LoginUserInfoDto = amc01Repository.selectUserInfo(amc01InputDto.getLogin_userid(), amc01InputDto.getLogin_password());
AMC01OutputDto amc01OutputDto = new AMC01OutputDto();
if(amc01LoginUserInfoDto != null) {
amc01OutputDto.setUser_name(amc01LoginUserInfoDto.getUser_name());
amc01OutputDto.setEmail(amc01LoginUserInfoDto.getEmail());
amc01OutputDto.setBirth_ymd(amc01LoginUserInfoDto.getBirth_ymd());
amc01OutputDto.setTelphone_number(amc01LoginUserInfoDto.getTelphone_number());
}
return amc01OutputDto;
}
}
在src/main/resources文件夹下,创建文件夹com/study/repository,不是包,然后创建AMC01Repository.xml。这里负责检索用户信息,这个文件可以写很多SQL,不限制写一个,可以写所有增删改查。
<?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.study.repository.AMC01Repository">
<select
id="selectUserInfo" resultType="com.study.dto.AMC01LoginUserInfoDto">
SELECT USER_NAME
,EMAIL
,BIRTH_YMD
,TELPHONE_NUMBER
FROM S001
WHERE LOGIN_USERID=#{login_userid}
AND LOGIN_PASSWORD=#{login_password}
</select>
</mapper>
在src/main/resources文件夹下,创建文件application.properties
内容如下
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydb?serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2dd1.auto=update
spring.jpa.show-sql=true
mybatis.mapper-locations: classpath:com/study/repository/*.xml
mybatis.type-aliases-package: com.study.dto
logging.level.org.lzq.tide.mapper=debug
server.context-path=/myweb
server.port=8090
打开WebAppMainApplication.java,鼠标右键单击,参照下图选择
我这里启动失败了,报了错误
参照下面这个博客,解决了我的问题:
java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.解决方法
上面博客的命令如下:
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’; #更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限
再重置下密码:alter user ‘root’@‘localhost’ identified by ‘123456’;
再次启动获得成功
打开网页浏览器,访问:http://localhost:8090/myweb/
点击上面图片的登陆链接,跳转到下面的页面,输入
登陆用户名:5001
登陆密码:abc
点击submit按钮
成功跳转,成功获取用户信息
再次点击登陆链接,输入错误的用户名,点击submit按钮
提示登陆失败
点击重新登陆,正常跳转
经过上面的测试,说明实现了自己想要的功能。