JPA的基本知识点
最近新接手了一个项目,这个项目就是用的JPA框架,通过网上查阅资料,才了解到JPA是一个可以快速开发的框架,封装的比较严重,基本不用自己写sql语句,全都给你封装好了,而且JPA还和hibernate有一定关系,hibernate是它的一种实现,JPA的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解。下面就来具体看一下这些知识点。
通过解析方法名来创建查询
JPA主打的招牌就是快速开发,那么它究竟快在了哪儿呢,我个人认为,应该就是数据层部分,它不用写具体sql语句,而是直接通过方法名中带关键字就可以创建查询,例如
public List<MmsService> findByMmsMemberIdOrderByPriceAsc(Long id);
简单讲解一下,这句话的意思就是根据MmsMember中的id来查询MmsService这个实体类,然后按price字段来正序排列,怎么样,是不是很屌,当时我看到的第一反应就是,我去,屌炸天,没错,就是这么屌。
这些大小写不是乱写的,只有关键字可以进行大写,JPA就是通过大小写来进行解析的,所以这一点要注意。
下面来看实体类的写法
@Entity
@Table(name="MMS_SERVICE")
@NamedQuery(name="MmsService.findAll", query="SELECT m FROM MmsService m")
public class MmsService implements Serializable {
table注解:name就是指定数据库表名称,catalog指定数据库名称
schema指定数据库的用户名
NameQuery注解:name指定命名查询的名称,query指定命名查询语句
- 如果你非得想自己写sql语句的话,也可以,下面来看一下
@Modifying
@Query("SELECT s from MmsService s WHERE s.id=?1")
public List<MmsService> test(Long id);
modifying就是更新的意思,查询一般不用,此处可以去掉;query里面写查询语句,不过查的依旧是实体类,而非表名;此处需要注意的是既然写了sql语句,方法名中就不可以带有任何关键字,否则查询语句将不起作用。
如果有的小伙伴们就想和平常一样写sql语句呢,也不是不可以,只需加一个属性即可
@Query(value="select memberid,name from mms_service where memberid=? ",nativeQuery=true)
public List<Object[]> masterService(Long id);
nativeQuery就是本地查询,意思就是原生态的sql语句,等于true就是支持本地查询,false反之。
通过这几天的使用,感觉JPA的确能够快速开发,因为它给你封装的比较完善,但是有利有弊吧,这样长时间使用,会让你对本地sql有些生疏,建议还是有时间自己写写sql文,别把这些基础丢掉,如果有什么意见或建议,欢迎大家在留言区给我留言,谢谢。