SpringBoot整合Jpa

虽然最近一直在用springboot框架,但还是觉得不太熟悉,所以决定通过手动实践来学习基础的使用。这一篇是介绍springboot简单整合jpa的教程,jpa不需要和mybatis一样去建表。

spring data jpa的使用

准备工作

首先给大家看一下application.properties文件代码
##端口号
server.port=8888

##数据库配置
##数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&useSSL=false
##数据库用户名
spring.datasource.username=root
##数据库密码
spring.datasource.password=root
##数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##validate  加载hibernate时,验证创建数据库表结构
##create   每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
##create-drop        加载hibernate时创建,退出是删除表结构
##update                 加载hibernate自动更新数据库结构
##validate 启动时验证表的结构,不会创建表
##none  启动时不做任何操作
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
pom文件


    4.0.0

    com.ooliuyue
    springboot_swagger
    0.0.1-SNAPSHOT
    jar

    springboot_swagger
    springboot_swagger

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.6.RELEASE
        
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            io.springfox
            springfox-swagger2
            2.2.2
        
        
            io.springfox
            springfox-swagger-ui
            2.2.2
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

实体类User
package com.ooliuyue.springboot_swagger.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import javax.persistence.*;

/**
 * @Auther: ly
 * @Date: 2018/12/17 17:56
 */
@Entity
@Table(name = "User")
@ApiModel(description = "user")
public class User {

    public User() {

    }

    public User(Integer id, String username, int age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }

    @ApiModelProperty(value = "主键id",hidden = true)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ApiModelProperty(value = "用户名称")
    @Column
    private String username;

    @ApiModelProperty(value = "用户年龄")
    @Column
    private int age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
JPA的基本注解

@Entity:修饰实体类,指明该类将映射到指定的数据表,例如:Customer类默认的数据表名为 customer
@Table:当实体类与映射的数据库表名不同名时需要使用@Table 注解,该注解与@Entity注解并列使用,使用其name属性指明数据库的表名
@Id :标识该属性为主键,一般标注在该属性的 getter 方法上
@GeneratedValue :标注主键的生成策略,通过其 strategy 属性。通常与@Id注解一起使用。默认情况下 JPA 会自动选择一个最适合底层数据库的主键生成策略,MySQL 默认为 AUTO,常用策略有:
–IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植
@Basic :用于没有任何标注的 getXxx() 方法,默认即为 @Basic,所以若一个 getter 方法无任何注解,可以使用 @Basic 注解,也可以不使用
@Column :当实体的属性与其映射的数据表的列不同名时使用,一般用于 getter 方法上。其 name 属性用来指明此属性在数据表中对应的列名;unique 属性指明是否为唯一约束;nullable 属性用来指明是否可以为空,false 为不能为空;length 属性指明此列的长度。

然后就是jpa的重要地方,TestUseuDao,继承了JpaRepository,由于本文只是简单介绍了jpa的简单功能,所以JpaRepository中内置的方法已经足够使用,代码如下。
package com.ooliuyue.springboot_swagger.dao;

import com.ooliuyue.springboot_swagger.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TestUserDao extends JpaRepository {}
然后就是测试方法,我这里直接在test启动类进行测试
package com.ooliuyue.springboot_swagger;

import com.ooliuyue.springboot_swagger.dao.TestUserDao;
import com.ooliuyue.springboot_swagger.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootSwaggerApplicationTests {

    @Test
    public void contextLoads() {
    }

    @Autowired
    private TestUserDao testUserDao;

    @Test
    public void insert(){
        User user = new User();
        user.setUsername("张三");
        user.setAge(23);
        testUserDao.save(user);
    }

    @Test
    public void update(){
        User user = new User();
        user.setId(1);
        user.setAge(18);
        user.setUsername("李四");
        testUserDao.save(user);
    }

    @Test
    public void select() {
        User user = testUserDao.findOne(1);
        System.out.println(user);
    }

    @Test
    public void delete() {
        testUserDao.delete(1);
    }
}

结果:

自动生成表,在测试方法里可以进行数据库数据操作


自动生产该表

你可能感兴趣的:(SpringBoot整合Jpa)