介绍
在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。必须编写太多样板代码来执行简单查询以及执行分页和审计。Spring Data JPA旨在通过减少实际需要的工作量来显着改善数据访问层的实现。作为开发人员,您编写存储库接口,包括自定义查找器方法,Spring将自动提供实现。
想了解更多的使用教程,请前往官方文档,在此我只是记录下我所示使用Spring-data-jpa的相关用法。
官网地址
使用记录
一、在maven项目中引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
二、新建实体类
实体类要和数据库表单字段对应,此处我用用户表做为例子
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "tb_user")
public class tb_user {
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")//这个是hibernate的注解/生成32位UUID
@GeneratedValue(generator = "idGenerator")
private String pk;
private String username;
private String password;
private String phone;
private boolean active;
private String authority;
public String getPk() {
return pk;
}
public void setPk(String pk) {
this.pk = pk;
}
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
三、为实体类新建Dao层
import com.sun.gisvisualition.entity.tb_user;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface tb_userDao extends JpaRepository<tb_user, String>, JpaSpecificationExecutor<tb_user> {
tb_user findByUsernameAndPassword(String username, String password);
tb_user findByPhoneAndPassword(String phone, String password);
}
四、Controller层调用
其使用方法和SSM框将的使用方法类似,具体代码如下,com.sun下面的代码是我自定义的接口和实体类;
下面的是验证登录的接口
import com.sun.gisvisualition.config.exception.DataResultException;
import com.sun.gisvisualition.dao.tb_userDao;
import com.sun.gisvisualition.dao.tb_user_infoDao;
import com.sun.gisvisualition.entity.DataResult;
import com.sun.gisvisualition.entity.tb_user;
import com.sun.gisvisualition.entity.tb_user_info;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Controller
@RequestMapping("user")
public class userController {
@Autowired
private tb_userDao tbUserDao;
@Autowired
private tb_user_infoDao tbUserInfoDao;
@RequestMapping("isLogin")
@ResponseBody
public DataResult isLogin(String username, String password, HttpSession session) {
DataResult dataResult = new DataResult();
tb_user tbUser = new tb_user();
tb_user_info tbUserInfo = new tb_user_info();
Pattern p = null;
Matcher m = null;
p = Pattern.compile("^[1][3,4,5,8][0-9]{9}$");
m = p.matcher(username);
if (m.matches()) {
tbUser = tbUserDao.findByPhoneAndPassword(username, password);
} else {
tbUser = tbUserDao.findByUsernameAndPassword(username, password);
}
if (tbUser == null) {
throw new DataResultException("账号或密码错误");
}
if (tbUser.isActive() == false) {
throw new DataResultException("账号未激活");
}
tbUserInfo = tbUserInfoDao.findByUserPk(tbUser.getPk());
session.setAttribute("user", tbUser);
session.setAttribute("user_info", tbUserInfo);
dataResult.setMsg("登录成功");
dataResult.setData(tbUserInfo);
return dataResult;
}
}