在开发的过程中,我们总无法避免不同的实体类会去实现相同的操作(增删查改,分页查询等),因此在开发时,我们期望泛型将通用的方法进行包装,使我们能够专注于实体类自身的独特方法,而非一般性常用且重复性高的方法。

泛型Base<T,V>我们通过继承jparepository<T,V >进行实现。通过jpa的部分封装方法,能使我们减少重复性代码的编写,并且我们可以在泛型接口中加入我们自己想定义的方法。

@NoRepositoryBean       //注解 不实例化该类,否则启动报错
public interface BaseRepository<T,V> extends JpaRepository<T, V>,JpaSpecificationExecutor<T> { //public void update(T t);
List<T> list(PageRequestForm form); Page<T> find(PageRequestForm form); }

之后对于实体类单独的方法,因为我在与小伙伴协作开发,所以公共约定使用Mybatis进行编写。

@Mapper
public interface ArticleDao {
@Select("SELECT c.id, u.name, u.portrait, c.content, c.create_date" +
" FROM goods_comment AS c" +
" LEFT JOIN user AS u ON u.id = c.user_id" +
" WHERE c.type = #{type} AND c.type_id = #{typeId}" +
" ORDER BY c.create_date DESC LIMIT #{current}, #{count}")
List<Map<String,Object>> getComment(@Param("type") Integer type, @Param("typeId") Long typeId,
@Param("current") int current, @Param("count") int count); }

这么做的好处就在于:我们只需要关注某些实体类所特有的方法,基础的操作交给jpa和我们之前自定义实现的方法完成就行。比如我在对Article的公共类实现时,只需要将对应的Article注入到泛型中,

之后如果有其他的实体类,比如Address,同样注入相应的接口即可。在controller层,我们只需要自动装配@Autowirse ArticleBase(AddressBase),即可使用实体类对应的公共方法。

/*
这里是Article实体类公共方法,继承了泛型BaseRepository<T,V>,其中T是实体类,V是主键 如果是其他类,比如Address就是:
@Repository
interface ArticleBase extends com.framework.jpa.BaseRepository<Address,Integer> {} */
@Repository
interface ArticleBase extends com.framework.jpa.BaseRepository<Article,Integer> {} //@Repository
//interface AddreseBase extends com.framework.jpa.BaseRepository<Address,Integer> {}

具体可见我的gtihub: https://github.com/LZKZD/JPA-base-Mybatis .

欢迎交流和star.

JPA实现泛型baseServcie+Mybatis的更多相关文章

  1. 对比JPA 和Hibernate 和 Mybatis的区别

    1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...

  2. JPA的泛型DAO设计及使用

    使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作.由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来 ...

  3. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

    基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...

  4. JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系

    一.JPA 概述 1. Java Persistence API(Java 持久层 API):用于对象持久化的 API 2. 作用:使得应用程序以统一的方式访问持久层 3. 前言中提到了 Hibern ...

  5. jpa,jdbc,hibernate/mybatis,数据库驱动

    JPA是规范,hibernate/mybatis是对规范的实现,hibernate/mybatis是对jdbc的封装,也就是说hibernate/mybatis还是会调用jdbc.    我们平时使用 ...

  6. Spring同时集成JPA与Mybatis

    @ 目录 ORM Spring ORM Spring ORM 同时集成JPA与Mybatis 一.创建一个SpringBoot项目 二.建立用户信息登记表 三.Web应用项目集成mysql 四.添加S ...

  7. 从JDBC到hibernate再到mybatis之路

    一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mappin ...

  8. Mybatis老手复习文档

    Mybatis学习笔记 再次学习Mybatis,日后,有时间会把这个文档更新,改的越来越好,然后,改成新手老手通用的文档 1.我的认识 Mybatis 是一个持久层框架,(之前 我虽然学了这个myba ...

  9. spring boot(六):如何优雅的使用mybatis

    *:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ...

随机推荐

  1. Vue 脚手架学习

    首先就是安装脚手架 npm install @vue/cil -g 全局安装 在这里我遇到一个问题:安装不了脚手架,报错显示: 通过苦逼的查找原因就是 以前使用的taobao镜像 导致的,删除镜像换成 ...

  2. 关于c++ STL map 和 unordered_map 的效率的对比测试

    本文采用在随机读取和插入的情况下测试map和unordered_map的效率 笔者的电脑是台渣机,现给出配置信息 处理器 : Intel Pentium(R) CPU G850 @ 2.90GHz × ...

  3. 数据增广imgaug库的使用

    记录一下这两天用imgaug库做数据增广的代码,由于是算用算学的,所以只能把代码写出来,具体每种增广算法的原理和一些参数就不得而知了,不过我觉得也没必要把这么些个算法搜搞懂,毕竟重点是扩种数据.所以, ...

  4. 嵌入式linux启动过程详解

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  5. SpringBoot开发十二-账号设置

    需求介绍-账号设置 账号设置里面的上传头像(文件) 首先请求必须是一个 POST 请求,其次表单的属性 enctype = "multipart/form-data" 然后就是利用 ...

  6. Android WorkManager使用入门

    WorkManager使用入门 WorkManager提供了任务调度功能,我们可以对工作进行标记或命名. 我们用一个示例来演示如何使用WorkManager.本文使用Kotlin. 入门示例 grad ...

  7. unserialize反序列化 安鸾 Writeup

    关于php反序列化漏洞原理什么,可以看看前辈的文章: https://xz.aliyun.com/t/3674 https://chybeta.github.io/2017/06/17/浅谈php反序 ...

  8. CPU 指令环 ring0,ring1,ring2,ring3

    Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3. Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果 ...

  9. Clusternet - 新一代开源多集群管理与应用治理项目

    作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公 ...

  10. 【springboot】自动装配原理

    摘自:https://mp.weixin.qq.com/s/ZxY_AiJ1m3z1kH6juh2XHw 前言 Spring翻译为中文是"春天",的确,在某段时间内,它给Java开 ...