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

泛型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. DataGrid列显示隐藏配置

    1.列右键事件 private void data1_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { ContextMenu ...

  2. (2)用 if语句 区间判断

    1 /*此例子只作为演示*/ 2 3 #include <stdio.h> 4 int main() 5 { 6 printf("请问贵公司给出的薪资是:\n"); 7 ...

  3. java使用Selenium操作谷歌浏览器学习笔记(一)

    下载安装 在淘宝镜像https://npm.taobao.org/mirrors/chromedriver/中下载与浏览器对应的版本 查看浏览器版本 点击查看谷歌浏览器版本 在IDEA项目中导入相关j ...

  4. 4 剑指Offer53-在排序数组中查找数字

    统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2  示例 2: 输入: nums = [5,7,7,8,8,10 ...

  5. webpack 配置文件外置

    转自:https://www.jianshu.com/p/377bfd2d9034 1.问题初衷 解决问题的初衷,源于vue项目中公共路径在打包之后一旦遇到整体的路径更改就需要再次build一下. 如 ...

  6. Python - typing 模块 —— TypeVar 泛型

    前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...

  7. BeautifulSoup4的使用

    一.介绍 Beautiful Soup 主要是用来解析提取 HTML 和 XML 文件中的数据. 现在官网推荐使用 Beautiful Soup 4 ,已经被移植到了BS4中. 安装 Beautifu ...

  8. IM敏感词算法原理和实现

    效果 C++实现的代码请移步: Github-cpp-dirtyfilter 用法和效果: int main() { std::vector<std::string> words = { ...

  9. maven打jar包,导入本地jar

    本地jar包存放目录 项目目录/lib/*.jar 导入jar包配置 <resources> <!--扫描到的配置yml--> <resource> <dir ...

  10. SQLFlow:用户注册

    #### 一.SQLFlow是什么 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,今天推荐一款专业且易用的血缘分析工具--SQLFlow.据 ...