《Spring Data Jpa从入门到精通》知识点总结

以下内容纯属个人扯淡,仅供参考,建议拜读原著

目录

读后感

2020/8/18

第一部分:基础

第1章:整体认识JPA

第2章:JPA基础查询方法

第3章:定义查询方法

第4章:注解式查询方法

第5章:@Entity实例中常用注解详解

第二部分:高级

第6章:JpaRepository扩展详解

第7章:Spring Data JPA的扩展

第8章:DataSource的配置

第三部分:扩展

第9章:IDEA与Spring JPA

第10章:Spring Data Redis 详解

第11章:SpEL详解

第12章:Spring Data REST

附录

附录1:Repository Query Method 关键字列表

附录2:Repository Query Method 返回值类型

附录3:JPA注解大全

附录4:Spring中涉及的注解

附录5:application.properties中关于JPA的配置大全


 

读后感

2020/8/18

个人感觉这本书很不好。

第1:书名是:SpringDataJpa从入门到精通,作为工具书关于SpringDataJpa的广度又不够,深度方面更加是浅的离谱,其他的实战类的书是点到为止,但这里是点都不全。有关广度这个问题,书里又花了将近一半的文字在讲其他内容:SpringData、SpringDataRedis、SpEL表达式等,甚至IDEA部分的图片和描述占据了很大篇幅。

第2:之前看Spring实战,各个章节分的很清楚,而且基本整体都是总-分结构,先整体结构再局部描述。而这本书说实话章节安排有些乱

第3:博客有错别字我能理解,书上有些地方有错别字,而且有些地方行文逻辑都是难以看懂。例如下面这句话,逗号前一句和逗号后一句话,这两句话逻辑是这样:可以通过......。要创建.....

第4:书的文字部分,有些感觉是东拼西凑来的,所以总是读的一段一段,思路跳跃的厉害

总之一句话:看的很难受。所以,本人只是看了2-7章,个人观点,不喜勿喷。

倒不如参考一篇博客:Spring data jpa 复杂动态查询方式总结、QueryDSL:使用QueryDSL

这篇博客开篇就说:不太推荐使用jpa做ORM框架,因为对于复杂查询时是不太灵活的,而是建议使用mybatis框架自己写sql,jpa对于简单查询是十分方便的。
1、核心方法
    查询所有数据 findAll()
    修改 添加数据  S save(S entity)
    分页查询 Page<S> findAll(Example<S> example, Pageable pageable)
    根据id查询 findOne()
    根据实体类属性查询: findByProperty (type Property); 例如:findByAge(int age)
    删除 void delete(T entity)
    计数 查询 long count() 或者 根据某个属性的值查询总数 countByAge(int age)
    是否存在   boolean existsById(ID primaryKey)

2、查询关键字(方法命名方式)
    
3、注解
    @Modifying、@Query、@Transaction、@Async

4、继承JpaSpecificationExecutor接口进行复杂查询
    可以实现多条件分页

5、引入QueryDSL
    QueryDSL是基于各种ORM框架以及SQL之上的一个通用API的查询框架

第一部分:基础

第1章:整体认识JPA

概览

ORM框架对比
JPA规范
SpringData项目
SpringDataJPA
MySQL快速开发实例

1、ORM框架对比

1、MyBatis
    侧重于POJO与SQL之间的映射关系,可以进行更为细致的SQL,目前占有率最高,上手容易,适合互联网应用公司开发API场景
2、Hibernate
    侧重于对象与对象之间的关系
    对JDBC进行了非常轻量级的对象封装。有自己的HQL查询语言,数据库移植性很好
    符合JPA规范,上手难,适合企业级应用系统开发
3、Spring Data JPA
    JPA规范的再次封装,底层使用Hibernate+JPA实现
    引用JPQL查询语言,属于Spring生态一部分
    上手简单

2、JPA规范

全称Java Persistence API(Java持久层API),是JDK5.0注解/xml描述对象关系表的映射关系(关系型数据库),并将运行期实体对象持久化到数据库中,Sun引入JPA规范的原因:简化现有JavaEE和JavaSE应用开发;整合ORM技术,实现大一统(mybatis不符合JPA规范)。其内容包括3个部分:

1、一套API标准
    在javax.persistence包下
    用于操作实体对象,执行CRUD操作
2、面向对象查询语言(JPQL)
    避免程序的SQL紧密耦合
3、ORM元数据的映射
    JPA支持xml、注解两种元数据的方式(元数据描述着对象和表之间的映射关系)

3、SpringData项目

致力于提供一个一致的、基于Spring的数据访问编程模型,支持关系数据库、NoSQL、基于云的数据服务。SpringDataCommon是所有模块的公有部分,它提供了技术中立的库接口、一个坚持Java类的元数据模型,它的子项目有:

主要子项目:Commons、Gemfire、JPA、KeyValue、LDAP、MongoDB、REST、Redis、Apache Cassandra、Apache Solr
社区支持的子项目:Aerospike、Couchbase、DynamoDB、Elasticsearch、Hazelcast、Jest、Neo4j、Vault、JDBC Extensions、Hadoop、Spring Content

4、SpringDataJPA

主要类

7个Repository接口
    Repository
    CrudRepository
    PagingAndSortingRepository
    QueryByExampleExecutor
    JpaRepository
    JpaSpecificationExecutor
    QueryDslPredicateExecutor
2个实现类
    SimpleJpaRepository
    QueryDslJpaRepository
JPA底层封装类
    EntityManager(javax.persistence)
    EntityManagerImpl(org.hibernate.jpa.internal)

类结构

5、MySQL快速开发实例

(1)环境要求:JDK1.8+、Maven3.0+、IDEA

(2)数据库及表

数据库名=db_example,表名=user

CREATE TABLE `user` {
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) DEFAULT NULL,
    `email` varchar(200) DEFAULT NULL,
    PRIMARY KEY ('id')
}

(3)创建项目

IDEA中的Spring Initializr创建,选择Web、JPA、MySQL模块

(4)application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=xxxx
spring.datasource.password=xxxx

(5)创建User实体

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private String name;

    private String email;

    getter/setter
}

(6)UserRepository

public class UserRepository extends CrudRepository<User,Long> {
}

(7)UserController

@Controller
@RequestMapping(path = "/demo")
public class UserController{
    
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/add")
    public void addUser( @RequestParam String name, @RequestParam String email ){
        User n = new User();
        n.setName(name);
        n.setEmail (email);
        userRepository.save(n);
    }

    @GetMapping("/all")
    public Iterable<User> getAllUsers(){
        return userRepository.findAll();
    }
}

 

第2章:JPA

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值