前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot---(13)Spring Boot 使用JPA访问数据库

Spring Boot---(13)Spring Boot 使用JPA访问数据库

作者头像
IT云清
发布2019-01-22 10:34:49
2.1K0
发布2019-01-22 10:34:49
举报
文章被收录于专栏:IT云清IT云清

摘要:Spring-data-jpa的强大和方便之处在于:可以仅仅用一层接口,就可以实现对数据库的访问和操作。本文详细介绍了,Spring Boot环境下如何使用Spring-data-jpa 来访问和操作数据库。

开发环境:

SpringBoot 

Spring-data-jpa

开发工具:IntelliJ IDEA

mysq 5.7

1.pom.xml

代码语言:javascript
复制
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

2.配置文件

数据库连接

代码语言:javascript
复制
# mysql  
spring.datasource.url=jdbc:mysql://22.22.22.22/ss  
spring.datasource.username=root  
spring.datasource.password=123456  
spring.datasource.driver-class-name=com.mysql.jdbc.Driver  

jpa相关:

代码语言:javascript
复制
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=mysql
spring.jpa.generate-ddl=true
spring.data.jpa.repositories.enabled=true

ddl-auto的四种状态: create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

3.实体类

代码语言:javascript
复制
package com.alibaba.entity;

import javax.persistence.*;
import java.io.Serializable;

/**
 * Created by lightClouds917

 * Date 2018/2/3
 * Description:
 */
@Table(name = "user")
@Entity
public class User implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id",nullable = false)
    private Integer id;


    @Column(name = "name",nullable = false,unique = true)
    private String name;

    @Column(name = "password",nullable = true)
    private String password;

    @Column(name = "address",nullable = true)
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public User(String name, String password, String address) {
        this.name = name;
        this.password = password;
        this.address = address;
    }

    public User() {
    }
}

注意注解: @Table(name = "user")   为建表的表名

@Entity  标明为实体类

@Id  主键上一定要有这个标识,不然会出错的

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Transient  Entity中不映射成列的字段得加@Transient 注解

这是主键的生成策略,四种方式:

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.         TABLE:使用一个特定的数据库表格来保存主键。         SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。         IDENTITY:主键由数据库自动生成(主要是自动增长型)         AUTO:主键由程序控制。

4.持久层

代码语言:javascript
复制
package com.alibaba.dao;

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

/**
 * Created by lightClouds917
 * Date 2018/2/3
 * Description:
 */
public interface UserRepository extends JpaRepository<User,Long> {


    User findByName(String name);
    User findById(Integer id);
    User findByAddress(String address);
    void deleteByName(String name);
}

持久层,需要继承JpaRepository<User,Long>,第一个参数为实体类类型,第二个为long类型,在这个父类方法中,有一些已经写好了的方法可以直接调用;而且,还提供了,根据方法名自动解析生成sql的功能,如果使用idea,联想功能也是很强大的,当我写个find后他会自动联想这个实体中的属性,你可以直接选择然后用and或者or等来拼接。

jpa还有很多更强大的用法,比如自己写sql,分页,去重等,本篇先简单介绍如何入门。

问题:

1.出现如下时:

 Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'.You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

可修改:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://47.100.54.6/sz

为:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://47.100.54.6/sz?useSSL=false

2.如出现如下错误时,请在实体的主键上加上@Id注解

Caused by: org.hibernate.AnnotationException: No identifier specified for entity

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档