jpa系列:
springboot jpa使用
springboot jpa 关系注解和mappedBy
springboot jpa自定义查询
前言:
1.jpa(Java Persistence API)看作是hibernate的一个高级封装库。日志中显示执行的语句是经过jpa处理后的sql语句。比起jdbc更加方便(jdbc你还要自己编写大量sql语句等等操作)
2.IDE为idea,配置文件为yml,数据库为mysql,maven依赖需要jpa和mysql,到中央仓库直接查/百度其他文章就行
3.你还需要:在mysql里面建好数据库和一张表,设置好用户名和密码
4.中途看的烦躁,建议拉到结尾看总结再回头看
application.yml 配置:
spring:
jpa:
#设置数据库为mysql
database: mysql
#显示执行的语句(开了能在日志看到jpa执行的sql语句)
show-sql: true
#自行百度,不累述
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://localhost:3306/数据库名?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: root
注意jpa和datasource在spring范围下(即注意yml的格式),账户密码和数据库名等东西自己看着改,后面那一大段uesXX=xx的用翻译看一下就知道了,可加可不加,防bug而已
Entity (实体,一个javabean类):一个表对应一个实体类。
依靠注解实现对应:类成员---表的各列。这里直接转大佬博客
Jpa 实体类常用注解
个人JPA参考手册
可以偷懒不人工写这一大堆东西,直接使用idea的jpa工具生成代码(建议):
idea 从数据库快速生成Spring Data JPA实体类
DAO
写一个接口继承JpaRepository<T,ID>
,在service层用@Resource
注入这个DAO,然后直接使用这个DAO的对象来操作就行。其中T为实体类,ID为主键的类型(Entity中@ID
注解那个)
FAQ:
谁来实现这个接口?
获取注解后交由jpa进行处理实现,不信逐步调试跟踪看看。(有了注解就能够像元编程那样,对代码进行编程,即生成所需的代码,详情右转java注解)
JpaRepository<T,ID>
接口只有几个方法,我还需要额外的怎么办?
直接在你的接口中声明一个“规范的函数名”即可。
比如你想根据username来查询一个用户,那么接口写一个findByUsername()
方法即可。在idea里面看下自动补齐估计就能理解了,jpa能够根据这些方法名生成对应的操作。提醒一下,要是不按照规范写一些"toGetUsername"这些jpa不认的方法名,是没有效果的。
总结和坑
1.一个典型例子:spring-boot-jpa-thymeleaf-curd
2.在数据库弄好、必须的两三行jpa配置弄好后,和数据库打交道只需:
(1)写一个与表对应的类(可自动生成,贼爽)
(2)写一个接口继承jpa提供的接口,视需求再声明几个方法进去,jpa能够智能自动的实现你所声明的方法。(方法名靠idea自动补齐即可不用记忆细节)
3.关于骆驼峰与下划线的问题:
受spring.jpa.hibernate.naming.physical-strategy
设置的影响,默认ImprovedNamingStrategy
,会把@Column
由骆驼峰转换为下划线来对应数据库表的列名。如果数据库存在骆驼峰的字段,这个设置改为PhysicalNamingStrategyStandardImpl
即可(看idea自动补全,需要加一些前缀,这里不打了)