二、SpringBoot持久层支持
1、JPA概念
JPA(Java Persistence API)是Sun官方提出的Java持久化规范,用来方便大家操作数据库。
真正干活的可能是Hibernate,TopLink等等实现了JPA规范的不同厂商,默认是Hibernate。
2、JPA配置
-
创建数据库和表,准备数据
create database how2java; use how2java; CREATE TABLE category_ ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30), PRIMARY KEY (id) ) DEFAULT CHARSET=UTF8; insert into category_ values(null,'category 1'); insert into category_ values(null,'category 2'); insert into category_ values(null,'category 3'); insert into category_ values(null,'category 4');
-
修改application.properties
配置连接数据库的相关项目
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp spring.datasource.url=jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=admin spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update
-
修改pom.xml
在该文件中的dependencies标签增加配置,增加对Mysql和Jpa的支持
<!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!-- jpa--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
-
分别创建Category、CategoryDAO、CategoryController
-
Category
增加一个包:com.how2java.springboot.pojo,然后创建实体类Category。
@Entity 注解表示这是个实体类
@Table(name = “category_”) 表示这个类对应的表名是 category_ ,注意有下划线
@Id 表明主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 表明自增长方式
@Column(name = “id”) 表明对应的数据库字段名package com.how2java.springboot.pojo; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "category_") public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private int id; @Column(name = "name") private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
CategoryDAO
增加一个包:com.how2java.springboot.dao,然后创建dao接口;CategoryDAO继承了JpaRepository,并且提供泛型<Category,Integer> 表示这个是针对Category类的DAO,Integer表示主键是Integer类型。
JpaRepository 这个父接口,就提供了CRUD, 分页等等一系列的查询了,直接拿来用,都不需要进行二次开发。package com.how2java.springboot.dao; import org.springframework.data.jpa.repository.JpaRepository; import com.how2java.springboot.pojo.Category; public interface CategoryDAO extends JpaRepository<Category,Integer>{ }
-
CategoryController
增加一个包:com.how2java.springboot.web,然后创建CategoryController 类。
- 接受listCategory映射
- 然后获取所有的分类数据
- 接着放入Model中
- 跳转到listCategory.jsp中
package com.how2java.springboot.web; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.how2java.springboot.dao.CategoryDAO; import com.how2java.springboot.pojo.Category; @Controller public class CategoryController { @Autowired CategoryDAO categoryDAO; @RequestMapping("/listCategory") public String listCategory(Model m) throws Exception { List<Category> cs=categoryDAO.findAll(); m.addAttribute("cs", cs); return "listCategory"; } }
-
-
创建listCategory.jsp
对CategoryController传递过来的集合(cs)进行遍历
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>name</td> </tr> <c:forEach items="${cs}" var="c" varStatus="st"> <tr> <td>${c.id}</td> <td>${c.name}</td> </tr> </c:forEach> </table>
-
重启测试
由于pom.xml中增加了对jar包的依赖,而Springboot的热部署是没办法起作用的,所以在这里需要手动重启一下:
之后访问测试地址: