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

泛型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.

最新文章

  1. 使用ssh正向连接、反向连接、做socks代理的方法
  2. Find the equipment indices
  3. MySQL占用内存过大的问题解决
  4. NOIP 2015提高组复赛
  5. Apache Spark Streaming的优点
  6. JavaScript 常用方法总结
  7. http 与https 安全链接
  8. css 中 的 float :left 和 clear :both
  9. 温故知新 javascript 正则表达式
  10. Laravel踩坑笔记——illuminate/html被抛弃
  11. 【Jquery系列】详解Jquery对象和Dom对象
  12. Linux系列教程(十六)——Linux权限管理之ACL权限
  13. IntelliJ IDEA Cannot resolve symbol &#39;&#39;
  14. elasticsearch 动态增加副本
  15. @interface注释用法
  16. SpringBoot(三)-- 整合FreeMarker模板
  17. 导入贴图操作:处理贴图MaxSize和Format
  18. scrapy使用PhantomJS和selenium爬取数据
  19. QT分析之消息事件机制
  20. 【Android开发】范例1-绘制Android的机器人

热门文章

  1. 查看Android 系统发送的广播
  2. RAID磁盘阵列和RAID配置
  3. Java练习——加减乘除计算器实现
  4. Upload-labs 文件上传靶场通关攻略(下)
  5. 2021年最新字节跳动Android面试真题解析
  6. Ubuntu安装ssh,及失败解决方案
  7. Create Shortcut for SSH Hosts
  8. 使用 C# 下载文件的十八般武艺
  9. NOIP 模拟 $27\; \rm 牛半仙的妹子序列$
  10. NOIP 模拟 $16\; \rm Lost My Music$