zoukankan      html  css  js  c++  java
  • springboot~JPA把ORM统一起来

    JPA介绍

    JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,JPA受到了极大的支持和赞扬,其中就包括了Spring与EJB3.0的开发团队。JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品。

    Spring Data JPA

    Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,自己写个仓储接口后继承JpaRepository即可实现最基本的增删改查功能!

    在项目中引用Spring JPA

    1 在build.gradle文件中添加包引用

    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    runtime('mysql:mysql-connector-java')

    2 在source的配置文件中添加mysql和jpa的相关设置

    spring:
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&createDatabaseIfNotExist=true
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
      jpa:
          database: MYSQL
          show-sql: true #显示后台处理的SQL语句
          hibernate:
            ddl-auto: update #自动检查实体和数据库表是否一致,如果不一致则会进行更新数据库表

    上面代码中我们开启了数据库SQL代码的显示功能,我们在控制台上可以看到对应的SQL语句。

    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: insert into t_userinfo (password, user_name, id) values (?, ?, ?)
    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: insert into t_accountinfo (balance, user_info, account_id) values (?, ?, ?)

    3 添加数据库表实体,注意一些注解,@Entity表示数据表实体,@Table可以指定数据表名称,@Id表示是主键,@GeneratedValue主键升成规则,@Column表示数据列名称等等。

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "user")
    public class User {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "Id")
      private int id;
      @Column(name = "Name")
      private String name;
    }

    4 为数据表实体添加仓储接口,因为JPA已经有了自己的标准实例,所以简单的CURD实例我们不需要写了,如果有个性化的操作,再去定义接口和实现。

    import com.example.springdemo.model.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface SqlUserRepository extends JpaRepository<User, Integer> {
    
    }

    5 最后在controller中添加依赖注入的字段,一般使用@Autowired即可

    @RestController
    @RequestMapping("/mysql")
    public class MysqlController {
    
      @Autowired
      private SqlUserRepository repository;
    
      /**
       * return list.
       *
       * @return
       */
      @RequestMapping("/list")
      public List<User> dataList() {
        return repository.findAll();
    
      }
    }

    有时间,再和大家聊聊个性化接口和实现的设计!

    感谢阅读!

  • 相关阅读:
    Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器
    Python与Hack之守护进程
    Python与Hack之Zip文件口令破解
    Mysql远程连接,并解决wordp主题添加问题
    基于PHP以及Mysql,使用WordPress搭建站点
    AngularJS学习之输入验证
    微信公众平台搭建
    innobackupex: fatal error: no ‘innodb_buffer_pool_filename’解决方法
    Python多线程
    tpcc
  • 原文地址:https://www.cnblogs.com/lori/p/8874323.html
Copyright © 2011-2022 走看看