前面学习了一个简单的Spring Boot框架的搭建,以及配置文件的基础部分,今天来记录一下最近所学操作数据库的一个工具
JPA
,这个JPA可以让你基本不需要写SQL语句就可以执行增删改查的操作。当然了,如果涉及到比较复杂的操作的话,也可以使用原生的SQL语句。
引入依赖
首先要使用JPA的话,肯定是需要引入依赖的,既然要使用JPA操作数据库的话,数据库的驱动依赖也是必不可少的。对数据库的操作无非增删改查,为了方便演示,这里还需要引入一个模板引擎来渲染页面,模板引擎有很多种,这里选择freemarker。
<!-- JPA依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- freemarker依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MySQL依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
准备数据
- 这里我们是用的是MySQL,先建一个简单的数据表吧。
CREATE DATABASE jpadb;
USE jpadb;
CREATE TABLE superhero
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL ,
sex CHAR(2) NOT NULL ,
age int NOT NULL ,
skill VARCHAR(50) NOT NULL
)CHARSET utf8;
然后随便插入几条数据,备用。
- 建立对应的实体类
@Entity
@Table(name = "superhero") //这里需要指定我们刚刚建好的数据表,因为JPA会自动帮助键表
public class SuperHero {
@Id
@GeneratedValue //自增注解
private Integer id;
private String name;
private String sex;
private Integer age;
private String skill;
//省略get和set方法
}
建立Repository接口
新建一个类SuperHeroRepository
,使用JPA的关键就是这个Repository接口,使用它可以方便的对实体类进行访问。
public interface SuperHeroRepository extends JpaRepository<SuperHero,Integer> {}
像上面这样就好了?对,目前是这样的!
Service层
哈哈,现在就可以使用Service对数据库进行操作啦!
//Service注解,必须写!不然Controller使用Service的时候运行会报错。
@Service
public class SuperHeroService {
//@Autowired,自动注入,用过SSM的都知道,这里可以自动注入
@Autowired
private SuperHeroRepository superHeroRepository;
/**
* 查询所有超级英雄
* @return List
*/
public List<SuperHero> findAll(){
return superHeroRepository.findAll();
}
}
现在就可以查询superhero
表中所有的超级英雄,并且findAll方法返回的数据类型就是List,非常方便!
Controller处理并渲染页面
Service层写好之后,就可以使用Controller来处理并渲染页面了。这里要注入Service类同样可以使用自动注入。
@Controller
public class IndexController {
//自动注入
@Autowired
private SuperHeroService superHeroService;
//设置请求路径为/heros
@GetMapping(value = "/heros")
public String index(Model model){
//调用service层的findAll方法查询所有数据
List<SuperHero> superHeroList = superHeroService.findAll();
//使用Model对象保存数据
model.addAttribute("superHeroList",superHeroList);
//返回freemarker模板的名称,所以需要在templates文件夹下建立index.ftl文件
return "index";
}
}
<!-- index.ftl -->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr>
<th>编号</th>
<th>名字</th>
<th>性别</th>
<th>年龄</th>
<th>技能</th>
</tr>
<!-- 这是freemarker的循环语法,可以自行去了解 -->
<#list superHeroList as superHero>
<tr>
<td>${superHero.id}</td>
<td>${superHero.name}</td>
<td>${superHero.sex}</td>
<td>${superHero.age}</td>
<td>${superHero.skill}</td>
</tr>
</#list>
</table>
</body>
</html>
好啦,现在所有代码就写完啦!但是似乎还忘了什么,对的,application.yaml还没配置。
# 指定访问端口 默认是8080
server:
port: 8090
spring:
# 配置数据源,主要有classname,url,username,password
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/jpadb
username: root
password: 123456
# jpa配置
jpa:
# 是否在控制台显示sql语句
show-sql: true
hibernate:
# 这个就比较关键了,如果想让它自动建表的话,可以写create和update,但是create每次运行项目的时候,都会重建一次,update则不会,只会更新数据表接口,数据还在。
ddl-auto: update
好了,一个简单的查询就做好了,访问localhost:8090
就可以看到下面的表格啦!