Spring Boot中访问关系型数据库,可以使用Spring Data JPA建立数据访问层,那么先来介绍下相关的必要配置。
于Spring Boot项目的pom.xml文件中添加如下依赖:
org.springframework.boot spring-boot-starter-data-jpa
访问数据库的前提是需要先有一个数据库,本文使用MySQL做演示,故添加MySQL的驱动如下:
此处添加数据库驱动并没有指定版本号,因为版本号已在spring-boot-dependencies中指定。Spring Boot的当前最新版本号是1.5.7.RELEASE,MySQL驱动的版本号是5.1.44。mysql mysql-connector-java
于application.properties文件中添加数据源配置:
## 数据源配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
这里使用的是本地的demo库,后面将在此库中创建数据库表。
于application.properties文件中添加JPA配置:
## JPA配置
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true
第一条配置开启控制台中打印sql语句,第二条配置美化输出的json字符串。此外,Spring Boot中默认Hibernate是JPA的实现者。
application.properties文件中维持如下配置:
# 访问路径
server.context-path=/demo
# 端口号
server.port=8088
那么,当前的访问路径是http://localhost:8088/demo/;如果不希望添加该配置,默认访问路径是http://localhost:8080/。
于本地MySQL数据库的demo库中创建学生表student,该表包含4个字段:id(学生编号),name(姓名),age(年龄),nat(国籍);建表sql如下:
CREATE TABLE `student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
`age` int(4) DEFAULT NULL COMMENT '年龄',
`nat` varchar(200) DEFAULT NULL COMMENT '国籍',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生表'
创建与student数据表字段一致的实体类Student:
package net.xxpsw.demo.springboot.student.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Student {
@Id
private Long id;
private String name;
private Integer age;
private String nat;
public Student() {
super();
}
public Student(Long id, String name, Integer age, String nat) {
super();
this.id = id;
this.name = name;
this.age = age;
this.nat = nat;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getNat() {
return nat;
}
public void setNat(String nat) {
this.nat = nat;
}
}
其中,@Entity指明该实体类与数据库表相映射,@Id指明该属性映射数据库表的主键。
创建数据访问接口StudentRepository,该接口继承JpaRepository
package net.xxpsw.demo.springboot.student.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import net.xxpsw.demo.springboot.student.entity.Student;
public interface StudentRepository extends JpaRepository {
}
查看JpaRepository@NoRepositoryBean
public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor {
List findAll();
List findAll(Sort sort);
List findAll(Iterable ids);
List save(Iterable entities);
void flush();
S saveAndFlush(S entity);
void deleteInBatch(Iterable entities);
void deleteAllInBatch();
T getOne(ID id);
@Override
List findAll(Example example);
@Override
List findAll(Example example, Sort sort);
}
@NoRepositoryBean指明此接口不是业务使用的接口,从JpaRepository