SpringBoot 整合 SpringDataJPA的步骤
在SpringBoot项目的pom.xml文件中引入依赖
< ! -- MySQL 连接驱动依赖 -- >
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql- connector- java< / artifactId>
< / dependency>
< ! -- Spring Boot JPA 依赖 -- >
< dependency>
< groupId> org. springframework. boot< / groupId>
< artifactId> spring- boot- starter- data- jpa< / artifactId>
< / dependency>
在application.properties配置文件中配置SpringDataJPA
########################################################
### 配置数据源
########################################################
spring. datasource. driverClassName = com. mysql. jdbc. Driver
spring. datasource. url = jdbc: mysql: / / localhost: 3306
在src/main/java目录下的entity包中创建实体类 例:在entity包中创建一个实体类 说明:entity包要和SpringBoot启动类同级 table的字段和entity的属性对应方式:student_id
对应studentId
import java. util. Date;
import java. io. Serializable;
import com. fasterxml. jackson. annotation. JsonIgnoreProperties;
import javax. persistence. Entity;
import javax. persistence. GeneratedValue;
import javax. persistence. GenerationType;
import javax. persistence. Id;
import javax. persistence. Table;
import org. springframework. format. annotation. DateTimeFormat;
@Entity
@Table ( name= "student" )
@JsonIgnoreProperties ( value = { "hibernateLazyInitializer" , "handler" } )
public class Student implements Serializable {
private static final long serialVersionUID = 1 L;
@Id
@GeneratedValue ( strategy = GenerationType. IDENTITY)
private Integer studentId;
private String studentName;
private Integer studentAge;
@DateTimeFormat ( pattern= "yyyy-MM-dd HH:mm:ss" )
private Date studentBirthday;
public Student ( ) {
super ( ) ;
}
public Student ( Integer studentId, String studentName, Integer studentAge, Date studentBirthday) {
super ( ) ;
this . studentId = studentId;
this . studentName = studentName;
this . studentAge = studentAge;
this . studentBirthday = studentBirthday;
}
public Integer getStudentId ( ) {
return studentId;
}
public void setStudentId ( Integer studentId) {
this . studentId = studentId;
}
public String getStudentName ( ) {
return studentName;
}
public void setStudentName ( String studentName) {
this . studentName = studentName;
}
public Integer getStudentAge ( ) {
return studentAge;
}
public void setStudentAge ( Integer studentAge) {
this . studentAge = studentAge;
}
public Date getStudentBirthday ( ) {
return studentBirthday;
}
public void setStudentBirthday ( Date studentBirthday) {
this . studentBirthday = studentBirthday;
}
@Override
public String toString ( ) {
return "Student [studentId=" + studentId + ", studentName=" + studentName + ", studentAge=" + studentAge
+ ", studentBirthday=" + studentBirthday + "]" ;
}
}
在repository包下创建Repository接口,并继承 JpaRepository接口 例:在repository包中创建一个StudentRepository接口 说明:repository包要和SpringBoot启动类同级,repository层即dao层
import org. springframework. data. jpa. repository. JpaRepository;
public interface StudentRepository extends JpaRepository < Student, Integer> {
}
在controller包下创建Controller类 例:在controller包中创建一个StudentController接口 说明:entity包要和SpringBoot启动类同级
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. web. bind. annotation. RequestMapping;
import org. springframework. web. bind. annotation. RestController;
@RestController
public class StudentController {
@Autowired
private StudentRepository repository;
@RequestMapping ( "/insert" )
public Object insert ( Student student) {
student = repository. save ( student) ;
return student;
}
}
在SpringBoot启动类上添加@EnableJpaRepositories注解 说明:@EnableJpaRepositories:注解用于 Srping Data JPA 的代码配置,用于取代 xml 形式的配置文件 例:
import org. springframework. boot. SpringApplication;
import org. springframework. boot. autoconfigure. SpringBootApplication;
import org. springframework. data. jpa. repository. config. EnableJpaRepositories;
@EnableJpaRepositories
@SpringBootApplication
public class App {
public static void main ( String[ ] args) {
SpringApplication. run ( App. class , args) ;
}
}
启动项目测试 在浏览器中访问:http://localhost:8080/insert?studentName=小明&studentAge=18&studentBirthday=2000-08-13 11:21:30
实体类中常用的注解
@Entity
:标记在类名上面,作为实体类的标识@Table
:当实体类与其映射的数据库表名不相同时需要使用 @Table注解 说明,该注解与 @Entity注解 并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。 @Table注解 的常用选项是 name,用于指明数据库的表名。 @Table注解 还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。uniqueConstraints 选项用于设置约束条件,通常不须设置@Id
:设置对象表示符,标识的实体类的属性映射对应表中的主键@GeneratedValue
:设置标识符的生成策略,常与 @Id注解 一起使用。参数:strategy 指定具体的生成策略 方式一:@GeneratedValue(strategy=GenerationType.AUTO) 也是默认策略, 即写成@GeneratedValue 也可;类似 Hibernate 的 native 策略,生成方式取决于底层的数据库 方式二: @GeneratedValue(strategy = GenerationType.IDENTITY)指定 自动增长 策略,适用于 MySQL 方式三: @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “seqtblperson”)指定 序列 策略,常用于 Oracle,其中 generator 表示生成器的名字。而且还要指定@SequenceGenerator(name = “seqtblperson”, sequenceName = “seqtblperson”, allocationSize = 1)注解配合使用。其中 name 指定生成器的名字(与 generator 的值一样),sequenceName 指定数据库中定义序列的名字,allocationSize 指定序列每次增长 1@Column
:描述数据库表中该字段的定义,具有以下属性: name:表示数据库表中该字段的名称,默认情形属性名称一致 nullable:表示该字段是否允许为 null,默认为 true unique:表示该字段是否是唯一标识,默认为 false length:表示该字段的大小,仅对 String类型 的字段有效 insertable:表示在 ORM 框架执行插入操作时,该字段是否应出现 INSETRT 语句中,默认为 true updateable:表示在 ORM 框架执行更新操作时,该字段是否应该出现在 UPDATE 语句中,默认为 true columnDefinition:表示该字段在数据库中的实际类型。通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP@OrderBy
:在加载数据的时候可以为其指定顺序@Transient
:表示该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性。如果一个属性并非数据库表的字段映射。就务必将其标示为@Transient。否则,ORM 框架默认其注解为@Basic