乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      spring data jpa 定義全局接口BaseDao

       aaie_ 2016-11-23

      好,現在我要搭一個項目,我想定義一個BaseDao,然后直接讓其他模塊的dao直接繼承我這個BaseDao,BaseDao有通用的方法也有spring data jpa提供的便捷方法

      那就新建一個BaseDao唄,這個BaseDao應該是繼承JpaRepository,JpaSpecificationExecutor因為我們想用spring data jpa,然后你再定義自己一些常用方法,例如myMethod

      @NoRepositoryBean
      public interface BaseDao<T,ID extends Serializable> extends JpaRepository<T, ID>,JpaSpecificationExecutor<T> {
      
          void myMethod();
      
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      接下來應該就是實現了

      public class BaseDaoImpl<T,ID extends Serializable> extends SimpleJpaRepository<T, ID> implements BaseDao<T,ID>{
      
          private final EntityManager em; 
      
          public BaseDaoImpl(Class<T> domainClass, EntityManager em) {
              super(domainClass, em);
              this.em = em; 
          }
      
      
          @Override
          public void myMethod() {
      
      
      
          }
      
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      繼承于SimpleJpaRepository不單可以讓我們獲取操作數據庫的EntityManager ,還可以實現JpaRepository,JpaSpecificationExecutor的方法,這樣我們就可以只寫我們自己方法的實現

      接下來再定義下factory,他的作用是將我們的basedao的實現類扔給factorybean

      public class BaseDaoFactory<S, ID extends Serializable> extends JpaRepositoryFactory {
      
          public BaseDaoFactory(EntityManager entityManager) {
              super(entityManager);
          }
      
          @SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
          @Override
          protected <T, ID extends Serializable> SimpleJpaRepository<?, ?> getTargetRepository(RepositoryMetadata metadata,
                  EntityManager entityManager) {
              // TODO Auto-generated method stub
              return new BaseDaoImpl(metadata.getDomainType(), entityManager);
          }
      
          @Override
          protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
              // TODO Auto-generated method stub
              return BaseDao.class;
          }
      
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22

      然后再定義一個factorybean,接到factory之后,把factory扔了spring data jpa

      public class BaseDaoFactoryBean<R extends JpaRepository<S, ID>, S, ID extends Serializable>
              extends JpaRepositoryFactoryBean<R, S, ID> {
      
          @SuppressWarnings("rawtypes")
          @Override
          protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
              // TODO Auto-generated method stub
              return new BaseDaoFactory(entityManager);
          }
      
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      spring data jpa來接了,在配置文件配置自己定義的FactoryBean,這樣就可以直接使用你的baseDao了

      <jpa:repositories base-package="com.liuxg.**.dao"
              repository-impl-postfix="Impl" 
              query-lookup-strategy = "create-if-not-found"
              factory-class="com.liuxg.base.dao.BaseDaoFactoryBean"
              entity-manager-factory-ref="entityManagerFactory"
              transaction-manager-ref="transactionManager" >
          </jpa:repositories>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      然后下次我們要用,就這樣子用

      public interface TaskDao extends BaseDao<Task,Long>{
      
      }
      • 1
      • 2
      • 3
      • 1
      • 2
      • 3

      在service層,你就可以用spring data jpa的方法和自己定義的一些通用方法了,如果你還想在自己模塊再定義一些方法,那參考
      http://blog.csdn.net/yingxiake/article/details/51017699
      然后我們就這么寫

      public interface TaskDao extends BaseDao<Task,Long>,TaskDaoCustom<Task, Long>{
      
      }
      
      • 1
      • 2
      • 3
      • 4
      • 1
      • 2
      • 3
      • 4

      然后,畢竟有一些東西,框架還是幫我們不了啊,太復雜的業(yè)務,想自己寫操作數據庫,想自己寫sql原生語句,那咋辦啊,親,那就只能利用EntityManager了,利用jpa api直接自己干了,下次看看怎么用EntityManager自己干活了

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多