本文共 6843 字,大约阅读时间需要 22 分钟。
对象关系映射(Obiect Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射;
有哪些经典的ORM框架
接口层:接口层主要定义的是与数据库进行交互的方式。
数据处理层:这是Mybatis的核心,负责参数映射和动态SQL生成,生成之后Mybatis执行SQL语句,并将返回的结果映射成自定义的类型。数据处理层主要负责: 参数映射(ParameterHandler)——>SQL解析(SqlSource)——>SQL执行(Executor)——>结果处理和映射(ResultSetHandler)
框架支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
引导层:基于XML配置方式和基于Java API方式。
配置方面——Configuration:Mybatis的所有的配置信息都保存在这里面,分成全局配置文件以及映射的配置文件,而映射的配置文件当中又存储了相关的SQL操作。所以在MappedStatement里面,封装了mapper配置文件里面的相关的SQL操作,通过SqlSource来生成动态SQL语句,并且把他封装到BoundSql里面。而ResultMap就是Map里面定义的自定义结果集。
结构层次:
mysql的配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true#用户名、密码由自己设置spring.datasource.username=rootspring.datasource.password=root#在 Spring Boot 2.1.0 中,com.mysql.jdbc.Driver已经过期,推荐使用 com.mysql.cj.jdbc.Driverspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Mybatis的配置:
#设置mybatis的配置文件路径,默认是在resources的目录mybatis.config-location=classpath:mybatis/mybatis-config.xml#设置mybatis下面的mapper映射文件路径,默认是在resources的目录mybatis.mapper-locations=classpath:mybatis/mapper/*.xml#设置项目中实体类包路径;com.study.springboot_mybatis01.entity根据项目而定mybatis.type-aliases-package=com.study.springboot_mybatis01.entity#展示sql语句,com.study.springboot_mybatis01.repository.UsersDao根据项目而定logging.level.com.study.springboot_mybatis01.repository.UsersDao=debug
Spring Data是为了简化构建基于Sprng框架应用的数据访问技术,包括对关系数据库、非关系数据库、Map-Reduce框架、云数据服务等访问支持。它为我们提供使用统一的API标准来对数据访问层进行操作,这套标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。
支持对象关系映射
统一的Repository接口
Repository<T,ID extends Serializable>:统一接口
CrudRepository<T,ID extends Serializable>:基本的CRUD操作
PagingAndSortingRepository<T,ID extends Serializable>:基本CRUD及分页
统一的数据访问模板类 xxxTemplate
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。主要为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是一套规范,不是一套产品,比如Hibernate、TopLink、JDO是一套产品,如果这些产品实现了JPA规范,那么就可以称之为JPA的实现产品。
JPA的配置信息:
# 支持SQL输出spring.jpa.show-sql=true# format 一下 SQL 进行输出spring.jpa.properties.hibernate.format_sql=true# 自动生成开启,让表数据会自动跟随entity类的变化而变化spring.jpa.properties.hibernate.hbm2ddl.auto = update# 开启自动更新,若数据库没有对应的表,则生成;若有,则检查是否需要更改spring.jpa.hibernate.ddl-auto = update
Keyword | Sample | JPQL snippet |
---|---|---|
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstnameIs ,findByFirstnameEquals | … where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended % ) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended % ) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in % ) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection<Age> age) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |
注意事项:
is_married
**,这样容易导致找不到值。无法解决的问题:
注意事项:
@Modifying
(你对表进行了删改操作)和@Transactional
(他会支持事务的操作)@Query
注解上加上NativeQuery = true
的属性,如果不加,就会默认为HQL语句@Param
注解一起使用。getXXX
的抽象方法。注意事项:
什么是QueryDSL:
QueryDSL仅仅是一个通用的查询框架,专注于通过JavaAPI构建类型安全的Sql查询,也可以说QueryDSL是基于各种ORM框架以及Sql之上的一个通用查询框架,QueryDSL的查询,类似于SQL查询,只不过一个使用SQL一个使用代码来代替SQL。
注意:单表乃至简单的多表操作,都不推荐使用QueryDSL,使用JPA自带API简洁又效率,但是设计太复杂的查询,还是推荐使用QueryDSL。
官方学习文档:http://www.querydsl.com/static/querydsl/latest/reference/html/
Pageable分页是Spring Data JPA默认提供的分页功能,直接继承JpaRepository就获得了该分页功能;
参考网址:
配置:
#pagehelperpagehelper.helperDialect=mysqlpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.params=count=countSql
转载地址:http://jmugn.baihongyu.com/