热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

YogurtCatSimpleDemo

序一开始因为大项目权限原因源码拉不下来,后来下载的simple分支,看的是simpleDemo。下载源码后看了一下依赖,发现主要是使用

一开始因为大项目权限原因源码拉不下来,后来下载的simple分支,看的是simple Demo。

下载源码后看了一下依赖,发现主要是使用springboot-web,springboot-date-jpa,h2,还使用了freemarker模板引擎,以下是目录结构。


14899865-b185990537ebac83.png
目录结构

由于之前学过的是ssm,springboot和mybatis-plus的使用,并且数据库一直使用的是Mysql或sql server,没有学习过jpa+h2,所以我决定就从simple demo开始学习。

从配置文件开始,查看配置文件,发现只有短短的一行server.port=9990

那么先启动一下项目,发现是能启动成功的,访问/project/list接口查看结果。


14899865-cbf0fd4596b348f8.png
http://localhost:9990/project/list

发现结果能正常获取,在以我以前使用mysql的基础下思考,配置文件里没有配置数据源url应该是无法获取到数据源的,况且也没有给到数据表导入,这些数据是怎么获取的呢?


基本流程

所以进行了代码深入,点进了/project/list接口的实现方法中,再进入到对应服务实现类中发现,与之前编写的套路差不多,也是直接控制器->服务->仓储->数据源。但是仍然没有发现到有数据源的配置存在。


14899865-3c72fd91ff9af57d.png
接口的服务实现方法

只好继续往下走,看到仓储存在的两个继承接口RepositoryJpaSpecificationExecutory


14899865-675a07f45cd5b823.png
仓储接口类

查找资料并且到jpa的文档说明中发现,并以mybatis类比。

Repository相当于@Repository注解,生成一个repository bean供spring管理
JpaSpecificationExecutor与mybatis-plus中的BaseMapper接口差不多,属于JPA的标准查询方法接口

再回到list服务查看,他使用标准查询方法findAll中使用了两个参数,ProjectSpec和Pageable,这两个参数与控制器传进来的形参condition和pageable有关。回头查看控制器。


14899865-10eb8acfa0d678d3.png
list控制器

这里明显pageable是分页,而condition是访问时的条件,这个条件使用了一个Vo来接收了。所以可以判断到是使用了condition这个条件来构造ProjectSpec,我们查看ProjectSpec类的内部。


14899865-3fed70f37d5f9e9a.png
ProjectSpec

是实现了Specification接口,这个接口类似于mybatis-plus的条件构造器QueryWrapper,这里重写toPredicate后实现了条件构造器,查询资料发现,CriteriaBuilder是标准查询构造器,其中的构造链式方法也和QueryWrapper的极为相像,如下图。




14899865-6ddf4e0199d5a34d.png

发现其他的role,transaction,user结构都一样,就不再重复了。


了解domain层的注解

代码中出现的注解有:
有关lombok的@EqualsAndHashCode,@Accessors,@Data,@Setter @Getter
有关数据表映射的@Entity,@Table,@id,@SequenceGenerator,@GeneratedValue,@Column,@Enumerated,@Temporal。

值得注意的是,lombok中的@Date帮你编写了Getter,Setter,equals,hashCode,toString方法,也就是相当于代替了@Setter @Getter,@ToString,@EqualsAndHashCode。

一开始我不懂的两个注解参考资料如下:

@Enumerated枚举注解

@Temporal日期格式化注解

还有关于@EqualsAndHashCode的问题,@Accessors的参数意义


CodeGenerator与Commons

Commons中各包的意义就是如其包名,我仔细分析的地方就是在CodeGenerator中使用了constant中的枚举类来创建模板。

仔细看到是CodeGenerator中使用了codetemplate中的各个模板生成了我以上观看的所有代码。


抛出疑问

根据了解,h2内存数据库是不需要数据源就能连接的,由springboot能自动配置,但对有关h2数据库的问题依旧保留疑问。参考https://blog.csdn.net/zyhlwzy/article/details/78733644


推荐阅读
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
hobeson_861
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有