之前一直用mybatis处理dao层,之后接触了jpa后,发现jpa自动帮你封装了常用了增删改查操作,用起来比mybatis方便得多,在这里记录下
这里所用springboot是2.1.7版本
一、QuickStart
1、导入jpa的依赖以及数据库驱动的依赖
<!--加入对jpa的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
2、配置连接,在application.properties中加入相关数据库驱动的连接
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=6198611nao
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
我这里的mysql是最新版本的,所以驱动与旧版本的有所不同
3、定义表的实体类,我这里一个user表
package com.xyn.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Entity //表示实体类
@Table(name = "user") //对应哪一张表
public class User implements Serializable {
@Id //主键。必须有的,否则会报错
private int id;
private String username;
private String password;
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setPa(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
4、编写dao层,定义一个UserDao接口,继承JpaRepository<T,ID>接口,就可以实现常用的增删改查。
import com.xyn.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface Userdao extends JpaRepository<User, Integer> {
}
5、测试类:
import com.xyn.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserdaoTest {
@Autowired
private Userdao dao;
@Test
public void save(){
dao.save(new User(5,"许大虎","2545"));
}
}
运行结果;
对应的增删改查的方法还有:
二、通过方法名自己定义sql查询
jpa不仅帮你封装了数据库常用的增删改查,还可以自己根据命名规则来定义查询语句,查询语句根据方法名来定义。具体命名规则表如下:
比如,我们要查询数据库里名字叫"许大虎“的所有信息,此时给出的常用查询方法不能满足我们的需求,我们可以根据自己定义的方法来查询。方法名需要满足一定格式的格式
测试类:
注意,我刚开始写方法名时为这个:
运行之后报错,后面发现方法名后面的字段不是我数据库中的字段,所以报错,因此,当自己需要自定义方法名的时候,字段需要与数据库中的字段名对应
还要很多可以自定义的方法名,具体参照上图表来定义。
三、通过sql语句来查询
当自定义方法名来查询依旧不能满足你的需求的时候,你可以使用sql语句
测试类:
四、总结
使用jpa,可以使用它自身提供的增删改查语句,也可以通过命名规则来自己定义查询语句,当然,也可以通过@Query注解自己写sql语句。jpa相对来说扩展性强而简单,使用起来相对方便。