最近看了很多Springboot的教学视频,感觉都太长了,而且没有项目的实战。今天根据一个博客主写一个实现增删改查的简单用户系统,源码可以参考第二期的文章。本次项目搭建使用Springboot+Mybatis+Mysql。第一期只实现用户登录的功能。
(1)创建Springboot项目
File-》New Project-》Spring Initializr,填写完项目有关信息后,一定要注意,选择以下模板:
注意:一般项目创建后Maven会自动下载依赖,如果出现下载很慢的情况(说明是外网下载),推荐采用阿里云镜像,配置方法自行百度。
(2)连接数据库
idea中有连接数据库的功能,连接数据库后会获得数据库的信息,就可以不用打开数据库服务端了。具体操作如下:
连接数据库时填写:
连接成功可以看到:
项目连接数据库的配置文件编写:数据库连接后还需要将数据库数据导入项目,配置文件(我比较喜欢yml配置,所以将全局配置文件application.properties改为yml后缀)编写如下:
注意:数据库的表需要自己先建好,然后填写自己数据库的信息与端口。本人使用的是3305端口,与默认的3306不一致。
(3)搭建项目结构
由于一般项目需要采用MVC架构,项目架构搭建如下:
项目文件xin01搭建展示:
资源文件resources搭建展示:
pom配置文件展示(填写mysql连接jar包的版本):
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.huang</groupId>
<artifactId>xin01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xin01</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>org.junit.vintage</groupId>-->
<!-- <artifactId>junit-vintage-engine</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
一般会自动创建,注意这里由于有一个冲突,注释了test的某个标签。
注意:没有的文件自己创建,千万不能漏文件或者写错文件名称。
(4)具体代码编写
1.前端页面html编写
error.html
<!--登录失败页面-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>登录失败!</h1>
</body>
</html>
index.html
<!--首页-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
你好springboot,这是XXX的第一个springboot项目。
</body>
</html>
login.html(这个前端页面需要提交表单数据,较为重要)
<!--登录页面-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<!--实现表单提交-->
<form role="form" action = "/loginIn" method="post">
账号:<input type="text" id="name" name = "name"> <br>
密码:<input type="password" id = "password" name = "password"> <br>
<input type="submit" id = "login" value = "login">
</form>
</body>
</html>
success.html
<!--登录成功页面-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<h1>登录成功!</h1>
</body>
</html>
2.UserBean类编写
UserBean
package com.huang.xin01.bean;
/*
用户实体类,对应数据库的user表
*/
public class UserBean {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
3.HelloController类、LoginController类编写
HelloController
package com.huang.xin01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/*
首页控制层
*/
@Controller
public class HelloController {
@RequestMapping("/index")
public String hello(){
return "index";
}
}
LoginController
package com.huang.xin01.controller;
import com.huang.xin01.bean.UserBean;
import com.huang.xin01.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/*
登录功能的控制层
*/
@Controller
public class LoginController {
//调用userService,并且将其放入容器防止耦合
@Autowired
UserService userService;
//登录页面
@RequestMapping("/login")
public String show(){
return "login";
}
//表单按照post提交后的控制
@RequestMapping(value = "/loginIn",method = RequestMethod.POST)
public String login(String name,String password){
UserBean userBean = userService.loginIn(name,password);
if(userBean!=null){
return "success";
}else{
return "error";
}
}
}
4.UserMapper接口、UserMapper.xml配置文件、application.yml全局配置文件编写
UserMapper
package com.huang.xin01.mapper;
import com.huang.xin01.bean.UserBean;
import org.springframework.stereotype.Repository;
/*
Dao层,负责数据库的接口,具体通过Mybatis配置文件实现
*/
//@Repository
public interface UserMapper {
UserBean getInfo(String name,String password);
}
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" >
<!--Dao层的具体实现,采用Mybatis-->
<mapper namespace="com.huang.xin01.mapper.UserMapper">
<select id="getInfo" parameterType="String" resultType="com.huang.xin01.bean.UserBean">
SELECT * FROM user WHERE name = #{name} AND password = #{password}
</select>
</mapper>
application.yml
spring:
datasource:
name: xin1
url: jdbc:mysql://localhost:3305/xin1
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
#利用jdbc连接数据库
mybatis:
mapper-locations: classpath:mapper/UserMapper.xml
type-aliases-package: com.huang.xin01.bean
#指定mybatis扫描的xml文件
5.UserService接口、UserServiceImpl类编写
UserService
package com.huang.xin01.service;
import com.huang.xin01.bean.UserBean;
import org.springframework.stereotype.Repository;
/*
服务层接口,具体由serviceImpl类实现
*/
//@Repository
public interface UserService {
UserBean loginIn(String name,String password);
}
UserServiceImpl
package com.huang.xin01.service.serviceImpl;
import com.huang.xin01.bean.UserBean;
import com.huang.xin01.mapper.UserMapper;
import com.huang.xin01.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/*
服务层,调用Dao层实现登录功能
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public UserBean loginIn(String name, String password) {
return userMapper.getInfo(name, password);
}
}
6.启动类Xin01Application类修改(加上注解@MapperScan(“com.huang.xin01.mapper”))
Xin01Application
package com.huang.xin01;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
项目的启动程序,必须加上@MapperScan注解扫描mapper配置文件
*/
@SpringBootApplication
@MapperScan("com.huang.xin01.mapper")
public class Xin01Application {
public static void main(String[] args) {
SpringApplication.run(Xin01Application.class, args);
}
}
7.测试类Xin01ApplicationTests编写(test包里的)
Xin01ApplicationTests
package com.huang.xin01;
import com.huang.xin01.bean.UserBean;
import com.huang.xin01.service.UserService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/*
测试类,发现依赖的exclusions与RunWith冲突,已经注释
*/
@RunWith(SpringRunner.class)
@SpringBootTest
class Xin01ApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
UserBean userBean = userService.loginIn("huang","huang");
System.out.println("该用户id为"+userBean.getId());
}
}
(5)项目测试
注意:有些版本对于@Autowired注解会报红,可以选择设置
推荐将这个改动变为默认设置。
1.test测试
运行Test方法,观察控制台输出结果,正确如下:
2.项目测试
运行启动程序,在浏览器输入localhost:8080/login效果如下:
登录成功
总结
由于每个人各种配置的版本不同,可能会存在一些小问题,欢迎大家把这些问题提出在评论区,博主会尽快回答。