idea 建MySQL_利用IDEA构建springboot应用-数据库操作(Mysql)

Spring-Date-Jpa

定义了一系列对象持久化的标准 例如Hibernate,TopLink等   spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现

注意:JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品

(一)预先生成方法

spring data jpa 默认预先生成了一些基本的CURD的方法,例如:增、删、改等等

1 继承JpaRepository

6804fb1c9134f4b935eb5dbe8d484a52.png

2 使用默认方法

d953490765f689fd58caa6b711bd28c1.png

(二)自定义简单查询

自定义的简单查询就是根据方法名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy,getXXBy后面跟属性名称:

dc3b059528deaf2403dae256b8fa6bdd.png

也使用一些加一些关键字And、Or

481139182f2be8a1b9a0d4bce89d66a9.png

修改、删除、统计也是类似语法

17337bb4d838e9c8706c36f4aca25c82.png

基本上SQL体系中的关键词都可以使用,例如:LIKE、IgnoreCase、OrderBy。

212c004958dce4222a2ab5d5ff43c4c1.png

(三)复杂查询

分页查询

分页查询在实际使用中非常普遍了,spring data jpa已经帮我们实现了分页的功能,在查询的方法中,需要传入参数Pageable

,当查询中有多个参数的时候Pageable建议做为最后一个参数传入

ece8e8ba8a8e056257794e3b2427bb04.png

Pageable是spring封装的分页实现类,使用的时候需要传入页数、每页条数和排序规则

bc0d1be34457091b0300ebc9c4a5b2c6.png

限制查询

有时候我们只需要查询前N个元素,或者支取前一个实体。

296c71d2fc528654a281bb589fe2e941.png

自定义SQL查询

其实Spring data 觉大部分的SQL都可以根据方法名定义的方式来实现,但是由于某些原因我们想使用自定义的SQL来查询,spring data也是完美支持的;在SQL的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying.也可以根据需要添加@Transactional对事物的支持,查询超时的设置等

f827a5e9ea14405127a4e1ff92af5d5e.png

多表查询

多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果,这里主要第二种方式。

首先需要定义一个结果集的接口类。

72cb981e2493dd2d935c4ec4c912e431.png

查询的方法返回类型设置为新创建的接口

8196696e86ea6675408ba8b43e905174.png

使用

55666998c3a4f743173d3ff29da64970.png

在运行中Spring会给接口(HotelSummary)自动生产一个代理类来接收返回的结果,代码汇总使用getXX的形式来获取

(四)多数据源的支持

同源数据库的多源支持

日常项目中因为使用的分布式开发模式,不同的服务有不同的数据源,常常需要在一个项目中使用多个数据源,因此需要配置sping data jpa对多数据源的使用,一般分一下为三步:

1 配置多数据源

2 不同源的实体类放入不同包路径

3 声明不同的包路径下使用不同的数据源、事务支持

异构数据库多源支持

比如我们的项目中,即需要对mysql的支持,也需要对mongodb的查询等。

实体类声明@Entity关系型数据库支持类型、声明@Document为mongodb支持类型,不同的数据源使用不同的实体就可以了

1b726e0cc04e71a2888439de16d8e340.png

但是,如果User用户既使用mysql也使用mongodb呢,也可以做混合使用

3f347e11ce77e65908799e4382b52936.png

也可以通过对不同的包路径进行声明,比如A包路径下使用mysql,B包路径下使用mongoDB

49341556eee5d2be2081afb930dc0795.png

其它

使用枚举

使用枚举的时候,我们希望数据库中存储的是枚举对应的String类型,而不是枚举的索引值,需要在属性上面添加@Enumerated(EnumType.STRING)注解

a97366642964418a973be9cd5cd69283.png

不需要和数据库映射的属性

正常情况下我们在实体类上加入注解@Entity,就会让实体类和表相关连如果其中某个属性我们不需要和数据库来关联只是在展示的时候做计算,只需要加上@Transient属性既可。

d2933dded54a81311d50adc403ed378e.png

源码案例

这里有一个开源项目几乎使用了这里介绍的所有标签和布局,大家可以参考:https://github.com/cloudfavorites/favorites-web

RESTful API设计

请求类型

请求路径

功能

GET

/girls

获取女生列表

POST

/girls

创建一个女生

GET

/girls/id

通过id查询一个女生

PUT

/girls/id

通过id更新一个女生

DELETE

/girls/id

通过id删除一个女生

@Entity 表示对应数据库那张表

@Id

@GeneratedValue 表示自增

8b5d1f98a1b1027994ee4df48a612f1b.png

create //删除表创建新表

update //更新当前表的内容

create-drop //应用停下来 删除表

validate //验证表中数据是否一致

none //什么都不干

1eb04907881f9139da4df8069a9b1345.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值