Spring Boot+MySQL+Spring Data JPA一个Web的Demo

Posted 6b7b5fc3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot+MySQL+Spring Data JPA一个Web的Demo相关的知识,希望对你有一定的参考价值。

2020.06.23 更新

1 概述

一个简单的web项目配合mysql+Hibernate+Tomcat的简单示例demo,很容易在此基础上扩展成自己的项目.

2 创建工程

笔者IDE为IntelliJ IDEA,新建一个工程,选择Spring Initalizer:
技术图片
下一步的话由于需要部署到服务器上面,选择了war.不需要的话可以选择jar.
技术图片
选择Spring Web+Spring Data JPA+MySQL Driver.
技术图片
技术图片
技术图片
然后完成即可,首次运行的话配置依赖需要一点时间,请耐心等待.

3 配置数据源

配置数据源分为两部分,一部分是建表与建用户,另一部分是在application.properties中配置的.

3.1 创建库与用户

create database test;

注意这里不用创建表了,因为Hibernate从实体类自动创建一个同名的表.
接着创建用户:

create user ‘db‘@‘%‘ identified by ‘xxxxx‘;

3.2 用户授权

grant all on test.* to ‘db‘@‘%‘;

这里建议授权all,因为后面Hibernate会用到建表权限,不能仅仅授权增删查改.

3.3 配置application.properties

配置四个属性:

spring.jpa.hibernate.ddl-auto=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

第一个属性是可以取值

  • none:none是对MySQL的默认值,不会改变数据库结构.
  • update:Hibernate会根据给出的实体类去改变数据库.
  • create:创建数据库但是不会在关闭的时候删除.
  • create-drop:创建数据库,当SessionFactory关闭时删除数据库.这个是H2与其他嵌入式数据库的默认选项.

第一次运行时必须设置为update或create,因为还不知道确切的实体类,第一次运行后,可以设置为update或none.
url的话对于MySQL来说是

jdbc:mysql://ip:3306/database

剩下的两个为用户名与密码.
以下是笔者的配置,供参考:
技术图片

4 实体类

这里创建一个简单的User实体类,需要用到javax中的@Entity,@Id,@GeneratedValue@GenerationType注解.
@Entity用于标识实体类,@Id用于标识主键,@GeneratedValue@GenerationType用于配置主键.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

除了主键之外,可以加上自己想要的属性与setter和getter,Hibernate会自动将实体类制作成一个数据表.

5 持久层

创建Repository保存用户记录.需要继承CrudRepository<T,ID>,第一个类型为实体类,第二个类型为主键类型.

public interface UserRepository extends CrudRepository<User,Integer> {}

6 控制层

控制层用于控制HTTP请求,在控制器中可以配置不同的路径实现不同的操作.

@Controller
@RequestMapping(path = "/demo")
public class MainController {
    @Autowired
    private UserRepository userRepository;
    
    @PostMapping(path = "/add")
    public @ResponseBody String addNewUser(@RequestParam String name)
    {
        User user = new User();
        user.setName(name);
        userRepository.save(user);
        return "Saved.";
    }
    
    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers()
    {
        return userRepository.findAll();
    }
}
  • @RequestMapping中的值表示URL以此值开头
  • @PostMapping是仅处理POST请求的路径
  • @ResponseBody表示返回的类型
  • @RequestParam表示一个从GET或POST中获取的参数
  • getAllUsers()会返回一个JSON或者xml

7 IDE上测试

首先输入:

localhost:8080/demo/all

由于先前已经有一行数据所以有显示.
技术图片
否则的话应该显示为[].
接下来可以添加数据:

curl localhost:8080/demo/add -d name=123

回应:
技术图片
接下来可以选择再次查看:
技术图片
再看看数据库:
技术图片

8 打包发布

Build->Build Artifacts.
技术图片
技术图片
Build即可.
然后会在项目目录的target下有一个WAR文件,就是这个了.
技术图片
改名字放到Tomcat的webapps下,比如笔者改成了demo.war:
技术图片
接着可以去访问了,注意路径,这里的路径是WAR的路径加上@RequestMapping的路径再加上@PostMapping@GetMapping路径:
技术图片

9 完整代码

如果觉得文章好看,欢迎点赞。

同时欢迎关注微信公众号:氷泠之路。

技术图片































以上是关于Spring Boot+MySQL+Spring Data JPA一个Web的Demo的主要内容,如果未能解决你的问题,请参考以下文章

spring boot mysql 事务

Spring Boot 2.0:Docker Compose + Spring Boot + Nginx + Mysql 实践

Spring Boot项目搭建(Spring Boot 2.2.4 + MyBatis + MySql)

Spring Boot:在Spring Boot中使用Mysql和JPA

(转)Spring Boot 2 :Docker Compose + Spring Boot + Nginx + Mysql 实践

Spring/Spring-Boot 学习 paoding-rose-jade 连接MySQL数据库