1.概述
在上一篇中,我们已经学会了如何创建运行一个Spring Boot程序,但是他还远远满足不了一个网站的基本需求,完成这篇的学习后我们就能实现一个简单的雏形。
2.目标
在本篇中,实现的简单的数据库访问,读取数据的功能。
3.详细步骤
(1)在第二次的项目中的pom.xml文件加入Jpa以及你所使用的数据库所对应的依赖,Jpa是Spring Boot中映射数据库所需的依赖,我使用的是mysql数据库,所以导入mysql数据库依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
(2)配置application.properties文件,请结合自身的数据库填写这些配置项。
spring.datasource.url=***
spring.datasource.username=***
spring.datasource.password=***
spring.datasource.driver-class-name=***
这里采用的方式是通过内置的配置文档覆盖Spring Boot的自动配置。
(3)编写我们的实体类
@Entity
@Table
public class User {
@Id
private String Id;
private String name;
public User() {
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"Id='" + Id + '\'' +
", name='" + name + '\'' +
'}';
}
}
@Entity注解是用来申明此类是一个实体类,@Table注解表名了此类与数据库中表相对应,对此类进行操作就是对数据库的表进行操作
(4)编写dao/repository层
此层为对数据的基本处理层,用来编写直接对数据库进行操作的代码。
由于我们导入了JPA依赖,很多通常的查询,删除,更新等操作可以不用在此编写了,Spring Boot提供了一些接口。而且还可以在接口中声明函数名称就能达到想要的效果,无需去实现函数,这真的是太便利了不是吗ヾ(゚∀゚ゞ)
@Repository
public interface UserRepository extends JpaRepository<User,String> {
}
@Repository注解是告诉Spring Boot这是一个仓库类,会在启动的时候帮你自动注入。JpaRepository里面含有一般数据库操作所需要的接口,我们会在service层中调用他们。
(5)编写service层
service层主要用于处理逻辑,是业务逻辑层。在此处我们编写了一个接口和一个实现类。接口的设计是为了满足松耦合的需求。
接口UserService的代码:
public interface UserService {
List<User> getAll();
}
实现类UserServiceImpl的代码:
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserRepository userRepository;
@Override
public List<User> getAll() {
return userRepository.findAll();
}
}
@Service注解表名其是一个服务类,服务启动时,Spring Boot会扫描到该类,并将其加入到容器中
@Autowired会自动将容器中的Bean注入其中。
(6)编写Control层
此层主要进行对页面的处理,包括跳转或者传参等等。
@Controller
public class UserControl {
@Autowired
private UserServiceImpl userService;
@RequestMapping("/")
public String toIndex(Model model){
List<User> userList=userService.getAll();
model.addAttribute("userList",userList);
return "index";
}
}
@Controller注解表明其为控制器类。
toIndex方法中多了一个Model参数,Model参数为页面传来的模型类,通过对模型类进行操作能够完成对页面进行传参。
(7)页面的编写
index.html页面代码如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<ul>
<li th:each="user : ${userList}">
<span th:text="${user.name}"></span>
</li>
</ul>
</body>
</html>
这个页面中的 ‘th:’表名使用thymeleaf引擎去解析,这样才能使静态页面动态化。想要了解更多的同学,可以自行百度thymeleaf的用法。
‘${*}’为Spring EL表达式,使用Spring EL表达式来获取后台传来的各种数据。
(8)项目启动后运行效果
数据库中的数据:
页面的展示效果: