Spring JPA的好处:
-
首先,spring JPA在减少sql语句两的同时,也减少了学习负担,通过调用接口,传入封装的实体对象,就能创建sql语句,不用学习ORM框架。
-
其次,能一定程度上增加数据库的访问性能。不同的程序访问同一张表,由于Spring JPA对同一个功能实现的sql语句都是一样的,所以数据库中对该功能只会缓存一条sql语句,避免了不同的程序因sql语句不同造成的每次请求都去解析。在大量访问的情况下,能在一定程度上提高访问的性能。
Spring JPA的使用和刚接触到时踩到的坑。
@GetMapping(value = "/getData")
public Page<CourseTableBean> getData(){
Page<CourseTableBean> page = service.getData();
System.out.println(JSON.toJSONString(page));
return page;
}
@Service
public class DataService {
DataRepostory repository;
@Autowired
public DataService(DataRepostory repository){
this.repository = repository;
}
Page<CourseTableBean> getData(){
return repository.findAll(PageRequest.of(0,5));
}
}
@Repository
public interface DataRepostory extends JpaRepository<CourseTableBean, String> {
@Override
@Query(value = "select * from COURSE u order by cno desc ",
countQuery = "select count(*) from COURSE", nativeQuery = true)
//当查询方法里用到了Pageable时,返回的结果必须是Page,当//查询方法里没有Pageable时,返回的结果一定不能用Page修
//饰
public Page<CourseTableBean> findAll(Pageable page);
}
@Entity
@Table(name = "COURSE")
public class CourseTableBean implements Serializable {
@Id
@Column(name="cno")
private String cno;
@Column(name = "cname")
private String cName;
@Column(name = "tno")
private String tno;
@Column(name = "c_number")
private int cNumber;
public String getCno() {
return cno;
}
public void setCno(String cno) {
this.cno = cno;
}
public String getCname() {
return cName;
}
public void setCname(String cName) {
this.cName = cName;
}
public String getTno() {
return tno;
}
public void setTno(String tno) {
this.tno = tno;
}
public int getCnumber() {
return cNumber;
}
public void setCnumber(int cNumber) {
this.cNumber = cNumber;
}
}
//页数默认是从0开始的,参数只能是基本类型。不能是封装的entity对象
public Page findByCno( String cno, Pageable pageable);
public Page findByCNumber(int number, Pageable pageable);
public Page findByCName(String cname, Pageable pageable);
@Query注解属性
value 写查找的sql语句
countQuery 当使用页数时写的查询全部页数的sql语句
nativeQuery 使用原生的sql语句,不同的数据库sql语句格式不一样,当写自己的sql时赋值为true.
菜鸟得每天学习一点点。