美文网首页
YogurtCat Simple Demo

YogurtCat Simple Demo

作者: 鸡龙 | 来源:发表于2020-02-19 16:52 被阅读0次

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

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

    目录结构

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

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

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

    http://localhost:9990/project/list

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

    基本流程

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

    接口的服务实现方法

    只好继续往下走,看到仓储存在的两个继承接口Repository<T,ID>JpaSpecificationExecutory<T>

    仓储接口类

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

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

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

    list控制器

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

    ProjectSpec

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


    发现其他的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

    相关文章

      网友评论

          本文标题:YogurtCat Simple Demo

          本文链接:https://www.haomeiwen.com/subject/bqpafhtx.html