工具:Idea
项目链接:https://gitee.com/martina-zhong/shida
文件结构
接下来大概解释一下这些文件,下面列的为主要文件,其他的都是一些自动生成文件,不用管
pom.xml作用:(系统配置文件,包括项目的一些信息以及项目依赖,需要什么依赖在里面添加idea会自动导入)
后端结构
1. entity层
实体层:也被称为model层。封装一个个的实体对象。如用户、商品等。
实体类中封装类的属性以及属性的构造方法(getter和setter等)
2.dao层:
持久层:也叫mapper层,和数据库底层进行交互。
简单来说,就是访问数据库,向数据库发送sql语句,完成数据的增删改查。
3.service层:(调用dao层)
业务逻辑层:进行业务逻辑应用处理。
先写接口,再写实现类。
4.controller层:(调用service层)
控制层:控制业务逻辑和流程。
前端
可直接找静态资源,放到java目录下,标记目录为源根。
b.填写信息
group:组名(一般填个人或公司名)
Aritifact:坐标(也就是项目位置)
c.选择项目依赖
这里我们勾选上springboot工具,以及spring web工具
(少了什么依赖不要紧,后面可以添加)
d.修改项目名称,完成
创建好的项目就是这个样子的
(1)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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.7version>
<relativePath/>
parent>
<groupId>com.shida.cngroupId>
<artifactId>demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>demoname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.2version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
<scope>truescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
因为我们使用的静态资源是jsp类型,加上jsp依赖就可以解析了
要在浏览器中运行,必须加上tomacat和热部署支持
使用的是mybatis框架,加上mybatis依赖
(2)在resource里面建立一个配置文件
(3)编写运行方法类
调用SpringbootApplication的run方法
package com.shida.cn.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication1 {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
定义用户的所有私有属性,对所有属性生成getter和setter方法。
package com.shida.cn.demo.entity;
public class User {
private int userid;
private String username;
private String password;
private String email;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"userid=" + userid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
}
package com.shida.cn.demo.dao;
import com.shida.cn.demo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("userMapper")
@Mapper
public interface UserDao {
//增加
@Insert("insert into user(username,password,email) values(#{username},#{password},#{email}) ")
int addUser(User user);
//删
@Delete("delete from user where userId=#{userId}")
int deleteById(int userId);
//改
@Update("update user set password=#{password} where username=#{username}")
int update(User user);
//查 查找所有用户
@Select("select * from user")
List<User> findAll();
//根据用户名 查找用户
@Select("select * from user where username=#{username}")
User findByName(String username);
}
UserService:接口用来定义业务,相当于下发一个指令
package com.shida.cn.demo.service;
import com.shida.cn.demo.entity.User;
import java.util.List;
public interface UserService {
//1.增加用户的业务
void addUser(User user);
//2.删除用户的业务
void deleteById(User user);
//3.更新用户信息
void update(User user);
//4.查找用户的方法
User findUser(String username);
//5.查找所有用户
List<User> findAll();
}
Impl:用来编写实现接口的方法
UserServiceImpl
注入Service,需要使用Autowired自动注入Dao层
package com.shida.cn.demo.service.Impl;
import com.shida.cn.demo.dao.UserDao;
import com.shida.cn.demo.entity.User;
import com.shida.cn.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
public void addUser(User user) {
userDao.addUser(user);
}
@Override
public void deleteById(User user) {
userDao.deleteById(user.getUserid());
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public User findUser(String username) {
User user = userDao.findByName(username);
return user;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
还需要自动注入service层,控制业务
package com.shida.cn.demo.controller;
import com.shida.cn.demo.entity.User;
import com.shida.cn.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 123
*/
@Controller
public class indexController {
@Autowired
UserService userService;
@RequestMapping("/userRegister")
public String getIndex(User user){
userService.addUser(user);
return "login.jsp";
}
}
前端
前端页面直接拿过来用,注册页面长这样观察register.jsp,发现点击注册页面表单内容提交到userRegister
因此Controller层使用@RequestMapping请求userRegister,当点击注册按钮,我们获取userRegister的内容(用户名字。密码,邮箱),调用Service层的addUser方法把数据写入数据库。
接下来配置数据库,这里我使用的是mysql数据库
mysql的下载安装步骤可以参考这篇文章:
http://t.csdn.cn/OA8Uq
这里我使用Navicat工具来管理mysql数据库:
Navicat的安装与破解
1.确定mysql的版本,加上数据库配置
如,我的版本是8.0.26,则在pom.xml文件里加上mysql依赖
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/shida?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
server.port是指定端口号
url里面改成自己的数据库名字
username改成自己的mysql用户名
password同理
注意:
mysql8使用
com.mysql.cj.jdbc.Drive
mysql5使用
com.mysql.jdbc.Drive
接下来点击运行,运行成功就是这样的
进入注册页面,输入相关信息,点击注册
接下来神奇的事情发生了!
我们刷新一下数据库
这就意味着controller层的点击注册添加用户到数据库成功了。
其他的操作也都类似。
之后就可以自己造数据啦。
遇到的问题:
1、
把controller层的@GetMapping换成@RequestMapping
原因:@RequestMapping既可以处理get请求,也可处理post请求
2.端口被占用
解决方法:
1.检查是否还有别的项目在启动,有的话关闭
2.server.port那里换一个端口号,如80,8888等
(如果说是idea关了,它还能访问怎么怎么怎么的,就是因为之前那个端口它还在,当然能进去访问了)
小tips: 80是默认端口号,不指定时是80,访问网页时,直接localhost不加端口号就可以访问。
如果还是有问题,idea重启,Windows重启