spring boot系列之整合jpa

JPA简介
Java Persistence API是一种持久化规范,JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,是Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层。

JPA和Hibernate的关系
JPA 的目标之一是制定一个可以由很多供应商实现的 API,目前Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现。
Hibernate
       – JPA 的始作俑者就是 Hibernate 的作者
       – Hibernate 从 3.2 开始兼容 JPA
OpenJPA
       – OpenJPA  是 Apache 组织提供的开源项目
TopLink
       – TopLink 以前需要收费,如今开源了

JPA优势
标准化:  提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
简单易用,集成方便:  JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java  类一样简单,只需要使用 javax.persistence.Entity 进行注释,JPA 的框架和接口也都非常简单.
可媲美JDBC的查询能力:  JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

JPA包含技术
 ORM映射元数据:JPA支持XML 和JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。 
JPA API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC和 SQL代码中解脱出来。 
查询语言(JPQL):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的  SQL 紧密耦合。

spring boot整合JPA
第一步:引入spring-boot-starter-jdbc依赖:
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

第二步:引入mysql连接类和连接池类
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>  // 对测试和运行的classpath有效,编译主代码时无效
</dependency>

第三步:application.properties文件数据源配置
spring:
    datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
        username: root
        password: 123456
   jpa:
        hibernate:
            ddl-auto: update # 第一次创建表create, 后面用update
        show-sql: true

第四步:ENTITY、DAO、WEB
@Entity
public class Account {
    @Id
    @GeneratedValue
    private int id ;
    private String name ;
    private double money; ... 省略getter setter
}

DAO层
通过编写一个继承自 JpaRepository 的接口就能完成数据访问,其中包含了几个单表查询的方法
public interface AccountDao extends JpaRepository<Account,Integer> {
     // Account是对象名,而不是具体的表名
    //  Integer是主键的类型,一般为Integer或者Long
}

简略SERVICE层

WEB层(restful api来测试数据的访问)

@RestController
@RequestMapping("/account")
public class AccountController {
    @Autowired
    AccountDao accountDao;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public List<Account> getAccounts() {
        return accountDao.findAll();
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Account getAccountById(@PathVariable("id") int id) {
        return accountDao.findOne(id);
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public String updateAccount(@PathVariable("id") int id, @RequestParam(value = "name", required = true)
        String name, @RequestParam(value = "money", required = true) double money) {                            
        Account account = new Account();
        account.setMoney(money);
        account.setName(name);
        account.setId(id);
        Account account1 = accountDao.saveAndFlush(account);
        return account1.toString();
    }

    @RequestMapping(value = "", method = RequestMethod.POST)
    public String postAccount(@RequestParam(value = "name") String name,
                              @RequestParam(value = "money") double money) {
        Account account = new Account();
        account.setMoney(money);
        account.setName(name);
        Account account1 = accountDao.save(account);
        return account1.toString();
    }
}

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值