从零开始搭建Springboot+JPA后台

51 篇文章 12 订阅
14 篇文章 7 订阅

从零开始搭建Springboot+JPA后台

一、环境、工具

  • jdk16.0.2
  • java 15
  • SpringBoot
  • JPA
  • Maven
  • mysql

二、搭建后台spring-boot框架

2.1 创建项目

1、首先创建新项目,点击new- project,选择Spring Initializr next:
默认使用 https://start.spring.io/ 创建项目
如果很慢或连接不上,则使用:https://start.aliyun.com/ (阿里云镜像)
在这里插入图片描述

2、选择项目需要的依赖(如果用JPA的话,Mybatis Framework可以不选)
在这里插入图片描述
3、创建好的项目结构如下:
在这里插入图片描述
其中

  • java:Java程序开发目录,其中***Application文件是Spring-boot的入口程序;
  • resources:资源文件目录,其中static文件夹:存放静态文件,如css,js,图片等资源;templates文件夹:存放Web页面的模板文件;application.properties:项目配置文件,如服务端口、数据库配置等
  • test:测试程序目录
  • pom.xmlMaven项目管理文件,用于构建Maven项目的各种配置信息,如项目信息,Java版本信息、项目依赖,插件等等

3、在pom.xml中添加Spring Data JPA依赖

<!-- Spring Data JPA 依赖(重要) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

4、数据库连接配置
首先打开mysql workbench,查看数据库的用户名和密码

在 application.properties 添加数据库连接配置

#自动生成数据库表(关键)
spring.jpa.hibernate.ddl-auto=update
#mysql数据库连接配置(非常重要)
spring.datasource.url = jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = root
#mysql数据库驱动程序(重要)
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
#jpa配置:在控制台显示Hibernate的sql(可选)
spring.jpa.show-sql = true
#其他配置:关闭Thymeleaf 的缓存
spring.thymeleaf.cache = false

其中spring.datasource.url中要填端口号(一般为3306)和数据库名
datasource.username中填数据库管理员账号
datasource.password中填数据库管理员密码

2.2 数据库层(DAO层)

数据库层(DAO层)主要面向数据库底层,负责CRUD等操作,该层包括映射数据库表的实体类,和包含Repository仓库的数据访问接口层

5、创建实体类User
新建entity包,在 entity 包中新建 User 类:用于映射数据库表:
在这里插入图片描述
User.java

package com.example.usermanagement.entity;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
    @Id //表示该属性作为表的主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) //设定主键生成策略:IDENTITY表示由数据库自动生成
    private Long id; // Long 对应MySQL数据库 bigint 类型
    @Column(nullable = false, unique = true, length = 20) //列字段,非空且唯一,字符最大长度20
    private String username;
    @Column(nullable = false, length = 20) //列字段,非空,字符最大长度20
    private String password;

// getter/setter 略
}

6、创建数据接口访问层(repository仓库)
◼JPA 提供了操作数据库的接口。在开发过程中继承和使用这些接口,可简化持久化开发工作。
◼ Spring能够找到自定义接口,并生成代理类,在开发过程中可以不写相关SQL操作,由代理类自动生成。
◼ JPA接口:JpaRepository

新建repository包,在包中新建接口:UserRepository并且其extends JpaRepository<User, Long> 接口,结构如图:
在这里插入图片描述
UserRepository:

package com.example.usermanagement.repository;


import com.example.usermanagement.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    public User findByUsernameAndPassword(String username,String password);
// JpaRepository 自动实现了很多内置的CURD方法
// 这些方法以后可直接调用,例如:
// List<T> findAll();
// Optional<T> findById(id);
// User save(user);
// void delete(user);
// void deleteById(id);
// long count();
// boolean existsById(id);
}

2.3 业务层(Service层)

业务层包括主要面向具体业务,实现具体功能,其在DAO层之上,处理控制器层的需求,实现对应功能。
7、首先创建服务层接口。即新建service包,然后在包中新建UserService接口。然后在UserService中根据业务功能的需要声明相关方法。
在这里插入图片描述
UserService:

package com.example.usermanagement.service;

import com.example.usermanagement.entity.User;

import java.util.List;

public interface UserService {
    public List<User> getUserList();
    public User findUserById(Long id);
    public void save(User user);
    public void edit(User user);
    public void delete(Long id);
    public User login(String username, String password);
}

8、实现服务层接口
在service包中新建UserServiceImp类,用于实现UserService接口,其通过调用DAO层的UserRespository的函数实现具体的业务。
在这里插入图片描述
UserServiceImp:

package com.example.usermanagement.service;

import com.example.usermanagement.entity.User;
import com.example.usermanagement.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service //声明类为服务实现类
public class UserServiceImp implements UserService {
    @Qualifier
    private UserRepository userRepository;

    @Override
    public List<User> getUserList() {
        return userRepository.findAll(); //直接调用Repository内置的CURD方法
    }

    @Override
    public User findUserById(Long id) {
        return userRepository.findById(id).get(); //直接调用Repository内置的CURD方法
//findById(id)返回的是Optional类(一个可以为null的容器对象)
//如果Optional容器中存在对象,则调用get()方法返回该对象
    }

    @Override
    public void save(User user) {
        userRepository.save(user); //直接调用Repository内置的CURD方法
    }

    @Override
    public void edit(User user) { //保存修改的对象
        userRepository.save(user); //直接调用Repository内置的CURD方法
    }

    @Override
    public void delete(Long id) {
        userRepository.deleteById(id); //直接调用Repository内置的CURD方法
    }
    /*@Override
    public User login(String username, String password) {
        User user=userRepository.findByUsernameAndPassword(username,password);
        return user;
    }*/
}

2.4 控制器层(Web层)

控制器层面向Controller层,其主要通过调用业务层实现的具体业务,Controller层调用服务层业务(Service层)负责业务调度,在这一层,一个方法所体现的是一个可以对外提供的功能。

9.首先创建controller包,在controller包中新建UserController控制器
UserController.java:

package com.example.usermanag.controller;

import com.example.usermanag.entity.User;
import com.example.usermanag.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Date;
import java.util.List;

@Controller
public class UserController {
    //@Autowired // 自动注入( 无需自己new对象:UserService userService=new UserServiceImp(); )
    @Qualifier
    private UserService userService;
    @RequestMapping("/")
    public String index() {
        return "redirect:/list"; //请求转发到 /list
    }
    @RequestMapping("/list")
    public String list(Model model) {
        List<User> users = userService.getUserList();
        model.addAttribute("users", users);
        return "user/list";
    }
@RequestMapping("/add")
public String add() {
    return "user/add"; //打开创建user界面
}
    @PostMapping("/add")
    public String add(User user) { //保存新创建的user
        userService.save(user);
        return "redirect:/list";
    }
    @RequestMapping("/edit/{id}")
    public String edit(Model model, @PathVariable Long id) {
        User user=userService.findUserById(id);
        model.addAttribute("user", user);
        return "user/edit"; //打开编辑user界面
    }
    @PostMapping("/edit")
    public String edit(User user) { //保存编辑好的user
        userService.edit(user);
        return "redirect:/list";
    }
    @RequestMapping("/delete/{id}")
    public String delete(Model model,@PathVariable Long id) {
        User user=userService.findUserById(id);
        model.addAttribute("user", user);
        return "user/delete"; //删除之前道个别(看看数据)
    }
    @PostMapping("/delete/{id}")
    public String delete(@PathVariable Long id) { //确认删除
        userService.delete(id);
        return "redirect:/list";
    }
}

后台测试

至此,我们的后台已经基本搭建好了,右键点击application文件运行,或者点右上角的锤子图标进行部署。等待一段时间后显示如下就是成功完成。
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中杯可乐多加冰

请我喝杯可乐吧,我会多加冰!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值