首先对比一下二者的优势:

JPA的优势:

标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。

简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。

可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型

MyBatis 优势

  1. 上手容易,也更加容易掌握。
  2. 由于自己掌握 SQL ,因此可以写出更加优质的 SQL ,提高 SQL 的执行效率。
  3. 多表关联查询时,MyBatis 要灵活一些,也更具备优势。
  4. .....

废话不多说,直接上才艺,开搞,开搞。。。

其实我们用Spring Data JPA 就是为了偷懒,就是懒得写SQL,所以它来了。

它带着封装的方法走来了~~~

首先,我们想用它,就要想办法把它搞出来,再pom.xml里写依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

然后建立实体类和数据库表的关系:

package com.n.domain;

import javax.persistence.*;

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Integer uid;

    private String uname;

    private String upassword;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", uid=").append(uid);
        sb.append(", uname=").append(uname);
        sb.append(", upassword=").append(upassword);
        sb.append("]");
        return sb.toString();
    }
}

因为是测试关系,我的表就相对于简单了一些;其中所用到的注解的作用如下:

  • @Entity 标识这个实体类,可以被处理
  • @Table() 注解指定数据库对应的表名
  • @Id 用来指定表的主键。
  • @GeneratedValue() 用来指定主键的类型
  • @Column 用来指定这个属性对应的表的列名,如果类属性和表列名一致可不指定,不一致就需要指定

创建一个接口

创建一个接口来使用它,继承JpaRepository 。有两个参数,第一个参数是是对应的实体类对象,第二个参数主键数据类型。

package com.n.mapper;

import com.n.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User,Integer> {

}

最后就是万众期待的测试了:

@Autowired
private UserRepository userRepository;

@Test
public void selectUser(){
    List<User> all = userRepository.findAll();
    System.out.println(all);
}

我这里调用的是全查的方法,因为已经封装好了,所以我们直接调用就行。

最后再展示一些运行结果吧,要有始有终嘛~~~

springboot主流集成的持久层 springboot持久层框架 比较_springboot主流集成的持久层

所以如果不想使用mybatis ,那springboot 整合jpa 也是一种不错的选择。