因为要用spring boot,最近刚刚学习.这是一个web项目的配合mysq+Hibernate+tomcat的简单示例demo,很容易在此基础上扩展成自己的项目.
作者用的IDE是IDEA,新建一个工程,选择Spring Initalizer.
下一步的话由于作者需要部署到服务器上面,选择了war.不需要的话可以选择jar.
选择spring web+spring Data JPA+Mysql Driver.
然后完成即可,首次运行的话配置依赖需要一点时间,请耐心等待.
配置数据源分为两部分,一部分是建表与建用户,另一部分是在application.properties中配置的.
create database test; 复制代码
注意这里不用创建表了,因为Hibernate从实体类自动创建一个同名的表.
create user 'db'@'%' identified by 'xxxxx'; 复制代码
grant all on test.* to 'db'@'%'; 复制代码
这里建议授权all,因为后面Hibernate会用到建表权限,不能仅仅授权增删查改.
配置四个属性:
spring.jpa.hibernate.ddl-auto= spring.datasource.url= spring.datasource.username= spring.datasource.password= 复制代码
第一个属性是可以取值
none是对mysql的默认值,不会改变数据库结构.
Hibernate会根据给出的实体类去改变数据库.
创建数据库但是不会在关闭的时候删除.
创建数据库,当SessionFactory关闭时删除数据库.这个是对H2与其他嵌入式数据库的默认选项.
第一次运行时必须设置为update或create,因为还不知道确切的实体类,第一次运行后,可以设置为update或none. url的话对于mysql来说是
jdbc:mysql://ip:3306/database 复制代码
剩下的两个为用户名与密码. 以下是作者的配置,供参考:
这里创建一个简单的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会自动将实体类制作成一个数据表.
创建仓库保存用户记录.需要继承CrudRepository<T,ID>,第一个类型为实体类,第二个类型为主键类型.
package com.test; import org.springframework.data.repository.CrudRepository; public interface UserRepository extends CrudRepository<User,Integer> { } 复制代码
控制器用于控制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 Iterable<User> getAllUsers() { return userRepository.findAll(); } } 复制代码
@RequestMapping中的值表示url以此值开头. @PostMapping是仅处理post请求的路径. @ResponseBody表示返回的类型. @RequestParam表示一个从get或post中获取的参数. getAllUsers()会返回一个json或者xml.
首先输入
localhost:8080/demo/all 复制代码
由于作者先前已经有一行数据所以有显示.
否则的话应该显示为[] 接下来可以添加数据:
curl localhost:8080/demo/add -d name=123 复制代码
回应:
接下来可以选择再次查看:
在看看数据库:
Build即可. 然后会在项目目录的target下有一个test-0.0.1-xxx的war文件,就是这个了.改名字放到tomcat的webapps/下,比如作者改成了demo.war:然后可以去访问了,注意路径,这里的路径是war的路径再加上@RequestMapping中的路径再加上 @PostMapping或 @GetMapping路径:完成!