2022.01.08 更新
1 概述
一个简单的Web
项目配合MySQL
+Hibernate
+Tomcat
的简单示例demo,很容易在此基础上扩展成自己的项目。
2 创建工程
笔者IDE为IntelliJ IDEA,新建一个工程,选择Spring Initalizer
:
war
/jar
均可,这里选择war
。
选择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
:MySQL
的默认值,不会改变数据库结构update
:Hibernate
会根据给出的实体类去改变数据库create
:创建数据库但是不会在关闭的时候删除create-drop
:创建数据库,当SessionFactory
关闭时删除数据库,这个是H2与其他嵌入式数据库的默认选项
第一次运行时必须设置为update
或create
,因为还不知道确切的实体类,第一次运行后,可以设置为update
或none
。
url
的话对于MySQL
来说是
jdbc:mysql://ip:3306/database
剩下的两个为用户名与密码。
參考配置如下:
4 实体类
这里创建一个简单的User
实体类,需要用到@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;
}
}
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
路径:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。