【java】一个 基础 spring boot + JPA + mysql 架子
前提工作: 安装好docker 还有 intelli IDEA
1,首先我们先搞好准备工作,mysql数据库的安装,咱们采用docker的方式,我本机安装的是5.7版本
docker pull mysql:5.7
确保成功拉取了mysql镜像后,在命令行执行如下命令启动mysql:
启动mysql的命令来自于dockerhub的mysql镜像主页【你可以忽略这条提示直接跑下面的命令】
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my-mysql mysql:5.7
如果你想把数据库的数据文件存储到宿主机目录可以使用-v 命令,-v 第一个参数是设置宿主机存储mysql数据文件的目录。【不能直接复制下面的命令,自行修改-v第一个参数,或者你可以直接忽略,跑上条命令即可】
docker run -d -p 3306:3306 -v /Users/kevinkang/Docker-Data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mine-mysql mysql:5.7
ok 当我们将mysql容器启动起来之后,效果是这样的
容器已经成功启动,我们现在直接从主机进入数据库,创建一个名称为es的数据库,因为jdbc连接mysql需要指定一个特定的数据库。
执行命令(或者进入容器然后进入数据库也行):
mysql -h 127.0.0.1 -uroot -p
然后提示输入密码,密码就是我们docker run 设置的密码 123456,然后就进入了mysql数据库,然后执行命令创建我们的数据库:
create database es;
然后切换到该数据库:
use es;
效果是这样的:
到这一步 ,数据的准备工作已经完成,你可以继续跑一条 show tables; 发现是空的,因为我们还没有这个数据库里面建表。
2,第二步,创建spring boot 项目。。。需要intelli IDEA
create new project -> spring initialzr 点击next 输入项目名字 sprint-boot-demo
然后一路往下点next,然后就是创建成功。
创建成功之后在main下的resources目录下创建一个application.yml文件【其实也可以写在application.propertis里面】,然后在yml文件加上下面的代码:
server:
port: 8080
server.servlet.context-path: /springboot
然后在找到入口文件 SprintBootDemoApplication.java 所在位置,在这个目录或者这个目录的子目录下新建一个controller文件,我们取名HiController.java
代码长这样:
package com.example.sprintbootdemo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController //等同于同时加上了@Controller和@ResponseBody
public class HiController {
//访问/kein或者/kevin任何一个地址,都会返回一样的结果
@RequestMapping(value = {"/kevin","/kev"},method = RequestMethod.GET)
public String say(){
return "hi you!!!";
}
}
然后找到入口文件 SprintBootDemoApplication.java ,点击箭头位置,然后run
然后idea 控制会看到启动日志,成功启动后,浏览器输入localhost:8080/kevin, 会显示这个:
服务已经成功启动了! 返回了字符串,当然这个返回值,我们完全可以自定义。。这个按照自己的需求修改就是。
3, 第三步 ,mysql 和 java 服务已经启动起来了,现在我们需要服务帮我们创建数据表,操作数据库等动作,这时候需要JPA了,jpa java persitence api,持久化api。
找到pom.xml文件,然后将引入包的信息放进去:
<!-- JPA Data (We are going to use Repositories, Entities, Hibernate, etc...) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Use MySQL Connector-J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
然后将数据库信息,添加到resources目录下的application.yml文件里面:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/es
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update # 自动更新数据表中的字段等信息
show-sql: true # 日志中显示sql语句
现在application.yml长这样:
然后我们来写实体类:
添加User.java
package com.example.sprintbootdemo.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity // This tells Hibernate to make a table out of this class
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String email;
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
然后添加接口 UserRepository
package com.example.sprintbootdemo.model;
import org.springframework.data.repository.CrudRepository;
import com.example.sprintbootdemo.model.User;
// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete
public interface UserRepository extends CrudRepository<User, Integer> {
}
这时候项目结构是这样:
重启项目打印日志会有下面信息:
数据表创建成功了,利用mysql命令,登入,查看,的确创建了两张表。
到这一步我们没有完,我们还需要对数据做一些操作。
4,第四步,操作数据库里面的数据。
在controller目录下面【controller目录和入口文件在同一个目录下】增加一个UserController
package com.example.sprintbootdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.sprintbootdemo.model.User;
import com.example.sprintbootdemo.model.UserRepository;
@Controller // This means that this class is a Controller
@RequestMapping(path="/user") // This means URL's start with /user (after Application path)
public class UserController {
@Autowired // This means to get the bean called userRepository
// Which is auto-generated by Spring, we will use it to handle the data
private UserRepository userRepository;
@GetMapping(path="/add") // Map ONLY GET Requests
public @ResponseBody String addNewUser (@RequestParam String name
, @RequestParam String email) {
// @ResponseBody means the returned String is the response, not a view name
// @RequestParam means it is a parameter from the GET or POST request
User n = new User();
n.setName(name);
n.setEmail(email);
userRepository.save(n);
return "Saved";
}
@GetMapping(path="/all")
public @ResponseBody Iterable<User> getAllUsers() {
// This returns a JSON or XML with the users
return userRepository.findAll();
}
}
最后的目录结构长这样:
HelloController 和 HiController只是我们没有引入jpa的测试controller,不必理会。然后我们重启项目,重启成功之后在浏览器发起一个get请求。
http://localhost:8080/user/add?name=kevin&&email=kev@gmail.com
保存成功,去数据库查看,的确成功了,然后我们从数据库取出数据,在浏览器输入
http://localhost:8080/user/all
返回成功,到此 spring boot + jpa + mysql 的基础架子已经完成了。
参考资料:https://blog.csdn.net/forezp/article/details/61472783 【第二步】
spring boot 官网 connect-mysql 教程 【第三四步】
上面这个项目在这里: https://github.com/aeolusheath/spring-boot-JPA-mysql