zoukankan      html  css  js  c++  java
  • SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

    SpringBoot整合SpringDataJPA

    1、JPA概念

    JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.

    JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

    ORM映射元数据

    JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

    API

    用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

    查询语言

    这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合

    2.springdataJPA的快速入门

    创建maven工程并导入依赖:(这里用的是sprigcloud2.1.16的)

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.16.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
    <dependency>
    <groupId>org.sprin
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    </dependency>
    </dependencies>

    2、配置文件application.yml

    server:
    port: 9090
    spring:
    application:
    name: spring-data-jpa
    datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///user_db?serverTimezone=UTC
    username: root
    password: root
    #jpa配置
    jpa:
    show-sql: true
    hibernate:
    ddl-auto: update

    注意: url这里的配置 必须要加入serverTimezone=UTC传递时区,不然操作数据库会抛异常的,///代表的是127.0.0.1:3306 本地的可以省略

    ServerTimeZone时区的问题

    在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,例如:

    url:jdbc:mysql://localhost:3306/mango?serverTimezone=Asia/Shanghai&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8

    解析:

    ddl-auto表示对数据库进行自动化配置

    值有三个选择:

    create表示创建,如果说数据库中不管有没有这张表,都会先干掉,然后在重新创建,不适合生产环境

    update表示更新,如果说数据库中有这张表,则执行进行更新表中的数据,如果没有这张表,则直接创建这张表,适合生产环境

    none 没有任何操作

    3、实体类

    @Data
    @Entity//表示当前类是实体类
    @Table(name="tb_user",catalog = "user_db")
    public class UserInfo {
    /**
    * 如果数据库表中 的字段名称和实体类中的属性名称保持一致的话,可以不需要加@Column注解
    * @GeneratedValue(strategy=GenerationType.IDENTITY)主键生成策略
    * GenerationType.IDENTITY表示针对于mysql中有自增长的数据的生成策略
    * GenerationType.SEQUENCE表示针对于oracle数据中的主键生成策略
    * GenerationType.AUTO是默认的选项,会根据数据库自动选择

    @table 中的name值是指定数据库中的表名   catalog表示的是指定database名


    */
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String name;
    private String gender;
    private Integer age;
    private String address;
    private String qq;
    private String email;
    private String username;
    private String password;
    private String phone;
    }

    4.dao接口

    /**
    * dao接口
    */
    @Repository
    public interface UserMapper extends JpaRepository<UserInfo,Integer> {
    }

    jpaRepository的泛型 为 userinfo 为实体类  integer为实体类的id也就是数据库对应的主键

    5、测试类

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

    @Autowired
    private UserMapper userMapper;

    //查询方法
    @Test
    public void queryAll(){
    List<UserInfo> infoList = userMapper.findAll();
    System.out.println(infoList);
    }
    }

    在实体类上要加入lombok的注解:

    @AllArgsConstructor #有参构造的注解
    @NoArgsConstructor #无参构造的注解

     

    6、基于@Query注解查询与更新

     

     

    欢迎大家一起交流学习...



  • 相关阅读:
    mysql索引创建和使用细节(二)
    mysql索引创建和使用细节(一)
    PHP7.2.6安装sodium扩展
    passwd修改密码失败,报鉴定令牌操作错误
    centos6升级python版本至python3.5
    centos6升级gcc版本
    elasticsearch中文手册
    MySQL主从仅同步指定库
    适用于Centos6/7,vsftp自动安装脚本
    Redis内存模型
  • 原文地址:https://www.cnblogs.com/niCong/p/13762265.html
Copyright © 2011-2022 走看看