zoukankan      html  css  js  c++  java
  • 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 完整代码

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

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

    在这里插入图片描述

  • 相关阅读:
    当使用了相对路径 <base href="<%= basePath %>" /> 后,全局都只能使用相对路径
    springmvc controller转发setViewName时找不到路径的问题以及转发视图时出现找不到样式的问题
    springmvc 使用jq传递json数据时出现415错误
    eclipse
    渗透测试记录
    在CentOS上安装Mysql使用yum安装mysql
    centos 安装 jdk
    wget和curl方式下载JDK
    Python程序的首行
    打印标准目录
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/13181861.html
Copyright © 2011-2022 走看看