JPA实现泛型baseServcie+Mybatis
在开发的过程中,我们总无法避免不同的实体类会去实现相同的操作(增删查改,分页查询等),因此在开发时,我们期望泛型将通用的方法进行包装,使我们能够专注于实体类自身的独特方法,而非一般性常用且重复性高的方法。
泛型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的更多相关文章
- 对比JPA 和Hibernate 和 Mybatis的区别
1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...
- JPA的泛型DAO设计及使用
使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作.由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来 ...
- jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...
- JPA、SpringData JPA 、Hibernate和Mybatis 的区别和联系
一.JPA 概述 1. Java Persistence API(Java 持久层 API):用于对象持久化的 API 2. 作用:使得应用程序以统一的方式访问持久层 3. 前言中提到了 Hibern ...
- jpa,jdbc,hibernate/mybatis,数据库驱动
JPA是规范,hibernate/mybatis是对规范的实现,hibernate/mybatis是对jdbc的封装,也就是说hibernate/mybatis还是会调用jdbc. 我们平时使用 ...
- Spring同时集成JPA与Mybatis
@ 目录 ORM Spring ORM Spring ORM 同时集成JPA与Mybatis 一.创建一个SpringBoot项目 二.建立用户信息登记表 三.Web应用项目集成mysql 四.添加S ...
- 从JDBC到hibernate再到mybatis之路
一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mappin ...
- Mybatis老手复习文档
Mybatis学习笔记 再次学习Mybatis,日后,有时间会把这个文档更新,改的越来越好,然后,改成新手老手通用的文档 1.我的认识 Mybatis 是一个持久层框架,(之前 我虽然学了这个myba ...
- spring boot(六):如何优雅的使用mybatis
*:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ...
随机推荐
- 那些 Unix 命令替代品们「GitHub 热点速览 v.21.32」
作者:HelloGitHub-小鱼干 好用的 Unix 命令替代工具能让你事半功倍,例如,bat 便是个带着高亮特性的加强版 cat,就像你用了 oh my zsh 之后便会感受到它的强大.同样好用的 ...
- shell的if语句
目录 一.基础测试 1 test命令 2 文件测试 一.基础测试 1 test命令 测试表达式是否成立 ,若不成立返回0,否则返回其他数值 格式1:test 条件表达式 格式2:[条件表达式] 2 文 ...
- Python中input()函数用法
input()函数获取用户输入数据,实现用户交互 语法格式: 变量 = input("提示信息") input()返回的是字符串,无论输入的是数字还是字符串,默认的输入结束键是回车 ...
- 安装CDH6.2 agent报错
界面报错信息提示如下: file /opt/cloudera/parcels/.flood/CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel...does not e ...
- 前端 | Nuxt.js axios baseURL,proxy 代理
平时用 Vue 写前端时,对于 axios 请求的常规操作一般是 统一定义好一个 axios 对象,使用 axios.defaults.baseURL 设置 baseURL 也不是不能直接把服务器地址 ...
- MySQL学习06(事务和索引)
事务 概述 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACI ...
- Docker与k8s的恩怨情仇(八)——蓦然回首总览Kubernetes
在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结. Kubernetes总览 下图是一个k8s的总览结 ...
- 使用Netcat实现通信和反弹Shell
一.概述 nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 -u 则调整为udP,默认为tcp -v 参数,详细输出 -n参数,net ...
- MATLAB批量存储图像和显示算法处理的图像不留空白
一 前言 最近收到审稿人的修改意见,其中一条为<RC: There were only five images evaluated in the experiment, and I recomm ...
- MATLAB—常用控制流
文章目录 一.MATLAB控制流与C语言的区别 二.if-else-end 判断 1.使用方法 2.例题 三.switch-case 分支 1.使用方法 2.例题 四.for.while循环 1.使用 ...