008-JPA&MySQL

单独建一个项目,加入测试和热部署依赖,其它全部去掉,然后加入下面两个依赖:


这样jps和mysql就加入并自动配置进来了,可以进行数据库开发。


在配置文件里加入数据库基本连接配置:


基本的内容都配置好和加进来就可以写代码了,下面是一个JPA风格的实体类,以用过的 SYS_USER 表为例,实体类如下:


@Entity注解说明是个实体类

@Table注解表名实体类对应的表名,表名为name值

@Id定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成



接下来使用JPA持久化,定义一个接口,继承于JPA资源库JpaRepository接口,使用@Repository注解将这个接口也定义为一个资源库,使它能被其它资源使用,并为其它程序提供存取数据库的功能。代码如下:



关于SYS_USER的持久化代码已经完成了,可以看到过程很简单,接下来进行测试,进入测试类,调用接口的方法,首先测试一个新增方法:


执行,可以看到如下结果:


原因是,MySQL对lower_case_table_names使用区分大小写的表名比较设置  (可能值为'0')。但是,FishEye在表名  FE-4276中不一致-数据库表OPEN的大小写不一致。

我的解决办法是,在配置文件中加入一行配置:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl



然后执行测试代码,可以看到执行成功,然后看下一下数据库,发现新增成功:


在spirngboot中,使用JPA加数据库,可以很容易实现持久化,几乎不需要什么代码。增删改查的写法都与这个例子类似。


看一下分页查询的写法,首先数据库准备九条数据:


然后每页设置为3条,分别查询第一页和第二页,先查询第二页,如下:


控制台日志为:


查询第一页,如下:


控制台日志为:

观察可以得出,JPA页码从0开始,使用要注意!!!





进入父接口JpaRepository,可以看到已经定义好的可以直接使用的很多方法,如下:


这些都是可以在上面及其简单的配置基础上直接使用的。


JPA还提供了一些自定义声明方法的规则,例如,在接口中使用关键字findBy,readBy,getBy,作为方法名的前缀,拼接实体类中的属性字段(首个字母大写),并可以选择拼接一些SQL查询关键字来组合成一个查询方法,例如,对于用户实体,下列查询关键字可以这样使用:

And, 例如:findByIdAndName(Long id, String name)

Or,例如:findByIdOrName(Long id, String name)

Between,例如:findByIdBetween(Long startId, Long endId)

LessThan,例如:findByIdLessThan(Long endId)

GreaterThan,例如:findByIdGreaterThan(Long startId)

IsNull,例如:findByNameIsNull()

IsNotNull,例如:findByNameIsNotNull()

NotNull,例如:与IsNotNull等价

Like,例如:findByNameLike(String name)

NotLike,例如:findByNameNotLike(String name)

OrderBy,例如:findByNameOrderByIdAsc(String name)

Not,例如:findByNameNot(String name)

In,例如:findByNameIn(Collection<String>  nameList)

NotIn,例如:findByNameNotIn(Collection  nameList)


又如,下面对用户实体类自定义的方法声明,它们都是符合JPA规则的,这些方法也不用实现,JPA将会代理实现这些方法:

SysUser findByNameLike(String name);

SysUser readByName(String name);

List<User> getByIdLessThan(Long id);


在多个实体类中,可以使用@ManyToOne   @ManyToMany  等注释在实体中实现关系对应和级联操作,如果数据库中没有物理外键等内容,可以不写这类注解。


spirngboot中,整合JPA与mysql就是这么简单,可以用JDBC连接的都可以使用这种方式持久化。


在自己定义的接口中,可以使用@Query注解来自定义SQL语句。注意使用的都是类名和属性名,例如:



在自己的项目中,可以根据项目组的规范,自定义接口来扩展JPA的接口。定义一些新的通用方法。


所有支持JDBC和JPA的关系型数据库都可以按照上面的例子进行操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容