jpa jql 时间范围查询_SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库...

v2-8cc086a1e5ab9d9bcad56133113ef36e_1440w.jpg?source=172ae18b

SpringBoot入门建站全系列(五)使用Spring-data-jpa操作数据库

SpringBoot操作数据库有多种方式,如

JDBC直接操作:太古老了,没人愿意这样玩

Mybatis插件:比较时髦,比较适合sql复杂,或者对性能要求高的应用,因为sql都是自己写的。

Spring-data-jpa: 使用hibernate作为实现,基本上不需要写sql,因为sql都是统计的,总是会产生多余的查询,性能上相对而言会低,但不绝对,影响性能的因素是多种的,这里说的性能是 从最终的查询的sql来对比的,毕竟生成的sql没有经过深思熟虑写出来的性能好。

JdbcTemplate:spring在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。Spring-data-jpa引入的时候,JdbcTemplate必然会被引入的。

当然还有其他中间件,主流使用的就是Mybatis和Spring-data-jpa。

品茗IT-SpringBoot专题-同步发布

品茗IT 提供在线支持:

一键快速构建Spring项目工具

一键快速构建SpringBoot项目工具

一键快速构建SpringCloud项目工具

一站式Springboot项目生成

如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。

一、引入依赖

需要同时引入数据库的connector和数据源datasource。和使用mybatis一样,只需要替换Mybatis引入的jar依赖即可。

依赖如下:

<dependency>
    

完整的依赖如下所示:

<project 

二、配置数据库连接信息

server.port=8080

spring.application.name=pomit

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=cff
spring.datasource.password=123456

spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.dbcp2.max-wait-millis=60000
spring.datasource.dbcp2.min-idle=20
spring.datasource.dbcp2.initial-size=2
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.connection-properties=characterEncoding=utf8
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.test-while-idle=true
spring.datasource.dbcp2.test-on-borrow=true
spring.datasource.dbcp2.test-on-return=false

#JPA Configuration:  
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

这里面,包含了数据库连接信息、数据源的连接池配置信息、jpa配置信息。

spring.jpa.hibernate.ddl-auto属性,是对表的操作: - create 启动时删数据库中的表,然后创建,退出时不删除数据表 - create-drop 启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错 - update 如果启动时表格式不一致则更新表,原有数据保留 - validate 项目启动表结构进行校验 如果不一致则报错 - none 啥都不做

spring.jpa.hibernate.naming.implicit-strategy和spring.jpa.hibernate.naming.physical-strategy是对表和实体字段映射的默认处理方式。

实体名称映射到数据库中时,分成两个步骤:

  • 第一个阶段是从对象模型中提取一个合适的逻辑名称,这个逻辑名称可以由用户指定,通过@Column和@Table等注解完成,也可以通过被Hibernate的ImplicitNamingStrategy指定;
  • 第二个阶段是将上述的逻辑名称解析成物理名称,物理名称是由Hibernate中的PhysicalNamingStrategy决定;

PhysicalNamingStrategy和ImplicitNamingStrategy的区别:

  • 从处理的效果上来看,其实没有什么区别,但是从程序设计分层的角度来看,类似于MVC的分层,ImplicitNamingStrategy只管模型对象层次的处理,PhysicalNamingStrategy只管映射成真实的数据名称的处理,但是为了达到相同的效果,比如将userName映射城数据列时,在PhysicalNamingStrategy决定映射成user_name,但是在ImplicitNamingStrategy也可以做到;
  • 从处理的场景来看, 无论对象模型中是否显式地指定列名或者已经被隐式决定,PhysicalNamingStrategy都会应用; 但是对于ImplicitNamingStrategy,仅仅只有当没有显式地提供名称时才会使用,也就是说当对象模型中已经指定了@Table或者@Entity等name时,设置的ImplicitNamingStrategy并不会起作用。

所以,这里的配置,映射到表字段时,所有点都被下划线替换,骆驼情况也被下划线替换。默认情况下,所有表名都以小写生成

三、使用Spring-data-Jpa

3.1 表与Java实体

假设我们有一张这个表user_role :

v2-8514a07da1a405eb3f0b7cbb3da2a4cf_b.jpg

实体:

package 

3.2 建立Dao层进行数据库访问

UserRoleDao:

import 

可以看到,使用Spring-data-jpa就是就这么简单,只需要继承CrudRepository即可。

同时,Spring-data-jpa还支持findBy + 字段(And 字段)进行查询。deleteBy + 字段(And 字段)进行删除。

分页等其他操作后续再讲。

四、service逻辑调用Dao。

UserRoleService:

import 

五、开放接口调用service

MybatisRest:

import 

六、启动

package 

喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot技术吧!

v2-49b2e5bf337f7ecd52a09a46bd7f4fab_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值