首先对比一下二者的优势:
JPA的优势:
标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。
可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型
MyBatis 优势
- 上手容易,也更加容易掌握。
- 由于自己掌握 SQL ,因此可以写出更加优质的 SQL ,提高 SQL 的执行效率。
- 多表关联查询时,MyBatis 要灵活一些,也更具备优势。
- .....
废话不多说,直接上才艺,开搞,开搞。。。
其实我们用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);
}
我这里调用的是全查的方法,因为已经封装好了,所以我们直接调用就行。
最后再展示一些运行结果吧,要有始有终嘛~~~
所以如果不想使用mybatis ,那springboot 整合jpa 也是一种不错的选择。