JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API。
JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。
Idea 中Spring boot 整合JPA 相对来说,比较简单,只要选择JPA就行,根据以下步骤创建一个简单的示例
2.如图,设置好Group和Artifact,点击Next
3.如图,选择Spring Boot 2.0.0,选择Web,JPA和MySQL,点击Next
4.如图,设置好项目名称,点击Finish
5.如图创建好的项目
package com.yk.findbyusername.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
public class Userinfo implements Serializable {
@Id
@GeneratedValue
private long id;
private String username;
private String password;
private Integer state;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
@Override
public String toString() {
return "Userinfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", state=" + state +
'}';
}
}
package com.yk.findbyusername.reposiroty;
import com.yk.findbyusername.domain.Userinfo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserinfoRepository extends JpaRepository{
public Userinfo findByUsername(String username);
public Userinfo findByUsernameAndPassword(String username,String password);
}
package com.yk.findbyusername.controller;
import com.yk.findbyusername.domain.Userinfo;
import com.yk.findbyusername.reposiroty.UserinfoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping(value = "/findby") public class UserinfoController { @Autowired private UserinfoRepository userinfoRepository; @RequestMapping(value = "/username") public Userinfo findByUsername() { Userinfo userinfo = userinfoRepository.findByUsername("yk001"); System.out.println(userinfo.toString()); return userinfo; } @RequestMapping(value = "/usernameandpassword") public Userinfo findByUsernameAndPassword() { Userinfo userinfo = userinfoRepository.findByUsernameAndPassword("yk002","pw002"); System.out.println(userinfo.toString()); return userinfo; } }
server.port=80 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=true spring.datasource.username=root spring.datasource.password=mysql spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto=update
insert into userinfo(username, password, state) values('yk001', 'pw001', 11)
insert into userinfo(username, password, state) values('yk002', 'pw002', 12)
执行上面的查询,在表中插入两条数据
11.测试:
浏览器输入http://localhost/findby/username,有以下信息输出
Hibernate: select userinfo0_.id as id1_0_, userinfo0_.password as password2_0_, userinfo0_.state as state3_0_, userinfo0_.username as username4_0_ from userinfo userinfo0_ where userinfo0_.username=?
Userinfo{id=1, username='yk001', password='pw001', state=11}
浏览器输入http://localhost/findby/usernameandpassword,有以下信息输出
12.源码下载:
https://github.com/xuyonjin/spring-boot-jpa-findbyusername.git