1. 概述
因为要用 spring boot, 最近刚刚学习. 这是一个 web 项目的配合 mysq+spring data jpa+tomcat 的简单示例 demo, 很容易在此基础上扩展成自己的项目.
2. 创建初始 spring demo
作者用的 IDE 是 IDEA, 新建一个工程, 选择 Spring Initalizer.
下一步的话由于作者需要部署到服务器上面, 选择了 war. 不需要的话可以选择 jar.
选择 spring web+spring Data JPA+Mysql Driver.
然后完成即可, 首次运行的话配置依赖需要一点时间, 请耐心等待.
3. 配置数据源
配置数据源分为两部分, 一部分是建表与建用户, 另一部分是在 application.properties 中配置的.
(1) 建库
create database test;
复制代码
注意这里不用创建表了, 因为 Hibernate 从实体类自动创建一个同名的表.
(2) 建用户
create user 'db'@'%' identified by 'xxxxx';
复制代码
(3) 用户授权
grant all on test.* to 'db'@'%';
复制代码
这里建议授权 all, 因为后面 Hibernate 会用到建表权限, 不能仅仅授权增删查改.
(4) 配置 application.properties
配置四个属性:
spring.jpa.hibernate.ddl-auto=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
复制代码
第一个属性是可以取值
none
update
create
create-drop
a.none
none 是对 mysql 的默认值, 不会改变数据库结构.
b.update
Hibernate 会根据给出的实体类去改变数据库.
c.create
创建数据库但是不会在关闭的时候删除.
d.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 用于配置主键.
package com.test;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@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, 第一个类型为实体类, 第二个类型为主键类型.
package com.test;
import org.springframework.data.repository.CrudRepository;
public interface UserRepository extends CrudRepository<User,Integer>
{
}
复制代码
6. 创建控制器
控制器用于控制 Http 请求, 在控制器中可以配置不同的路径实现不同的操作.
package com.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@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 IterablegetAllUsers()
{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 下有一个 test-0.0.1-xxx 的 war 文件, 就是这个了.
改名字放到 tomcat 的 webapps / 下, 比如作者改成了 demo.war:
然后可以去访问了, 注意路径, 这里的路径是 war 的路径再加上 @RequestMapping 中的路径再加上 @PostMapping 或 @GetMapping 路径:
完成!
完整代码 =======
github
码云:https://gitee.com/imykr/spring-boot-hibernate-tomcat-mysql
来源:juejin.im/post/5ddc04c36fb9a07ab07f6619
作者:氷泠
好文章,我在看❤️