<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    為SPRING DATA MONGODB REPOSITORY添加自定義方法

    自從用了SPRING DATA MONGODB后,增刪改查的實現方法都不用自己寫了,只需聲明方法名稱,SPRING會自動添加代碼,但用時候SPRING自帶的方法不夠,難免要添加的,因此如何在原有的方法上疊加自定義的方法呢?

    定義自定義的接口
    public interface VideoRepositoryCustom {
        
        public List<Cat1UpdateCount> getVideoWithUpdateFrag(List<String> importantCat1List);

    }


    添加自定義的實現
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.group;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.project;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.unwind;

    import java.util.Date;
    import java.util.List;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.aggregation.Aggregation;
    import org.springframework.data.mongodb.core.aggregation.AggregationResults;
    import org.springframework.data.mongodb.core.query.Criteria;

    import program.video.aggregation.valueobject.Cat1UpdateCount;
    import program.video.valueobject.Video;

    public class VideoRepositoryImpl implements VideoRepositoryCustom{
        
        private static Logger logger = LoggerFactory.getLogger(VideoRepositoryImpl.class);
        
        @Autowired
        private MongoTemplate mongoTemplate;
        

        public List<Cat1UpdateCount> getVideoWithUpdateFrag(List<String> importantCat1List) {
            
            logger.info(new Date().toString());
            
            /**
             * db.videos.aggregate(
                [
                   { $match: { "frags.isnew" : true } },
                   { $unwind: "$frags" },
                   { $match: { "frags.isnew" : true } },
                   { $group: { 
                               _id: {cat1:"$cat1"},
                               count: { $sum: 1 },
                               publishdate2: { $max: "$publishdate"}
                             }
                   }
                   
                ]
                )
             
    */
            Aggregation agg = newAggregation(
                    project("frags","cat1","publishdate"),
                    match(
                            Criteria.where("frags.isnew").is(Boolean.TRUE)
                            .and("cat1").in(importantCat1List)
                         ),
                    unwind("frags"),//展開子項LIST,且是內鏈接,即如果父和子的關聯ID沒有的就不會輸出
                    match(Criteria.where("frags.isnew").is(Boolean.TRUE)),
                    group("cat1")//設置分組字段
                        .count().as("updateCount")//增加COUNT為分組字段
                        .last("publishdate").as("publishDate"),//增加publishDate為分組字段
                    project("publishDate","cat1","updateCount")//重新挑選字段
                        .and("cat1").previousOperation()//為前一操作所產生的ID FIELD建立別名
                );

                AggregationResults<Cat1UpdateCount> results = mongoTemplate.aggregate(agg, Video.COLLECTION_NAME, Cat1UpdateCount.class);
                List<Cat1UpdateCount> cat1UpdateCountList = results.getMappedResults();
            
            return null;
        }

    }


    原先的接口實現多重繼承
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.mongodb.repository.Query;
    import org.springframework.data.repository.PagingAndSortingRepository;
    import org.springframework.data.repository.query.Param;

    import program.video.valueobject.Video;


    public interface VideoRepository extends PagingAndSortingRepository<Video, String>,VideoRepositoryCustom {

        @Query("{ title : {$regex : ?0 } }")
        public Page<Video> findVideosByKeyword(@Param("title") String keyword, Pageable page);
        
        @Query("{ pid : ?0 }") 
        public Video findByVideoId(String id); 
        
        @Query(value="{ pid : ?0 , ver: { $gt : ?1 }}")
        public Video findByIdAndVersion(String id, int ver);
        
        
        public Page<Video> findByTitleLike(String title, Pageable pageable);
        
        @Query("{ title : {$regex : ?0}, cat1 : ?1}")
        public Page<Video> findVideosByTitleAndCat1(String title, String cat1, Pageable pageable);
        
        @Query("{ cat1 : ?0}")
        public Page<Video> findVideosByCat1(String cat1, Pageable pageable);
        
        @Query("{ title : {$regex : ?0}, cat1 : ?1, status : ?2}")
        public Page<Video> findVideosByTitleAndCat1AndStatus(String title, String cat1, int status, Pageable pageable);
        
        @Query("{ title : {$regex : ?0}, cat1 : ?1, status : { $in : [ ?2, null]}}")
        public Page<Video> findVideosByTitleAndCat1AndStatusExist(String title, String cat1, int status, Pageable pageable);
        
        @Query("{ title : {$regex : ?0}, status : ?1}")
        public Page<Video> findVideosByTitleAndStatus(String title, int status, Pageable pageable);
        
        @Query("{ title : {$regex : ?0}, status : { $in : [ ?1, null]}}")
        public Page<Video> findVideosByTitleAndStatusExist(String title, int status, Pageable pageable);
        
        @Query("{ cat1 : ?0, status : ?1}")
        public Page<Video> findVideosByCat1AndStatus(String cat1, int status, Pageable pageable);
        
        @Query("{ cat1 : ?0, status : { $in : [ ?1, null]}}")
        public Page<Video> findVideosByCat1AndStatusExist(String cat1, int status, Pageable pageable);
        
        @Query("{ status : ?0}")
        public Page<Video> findVideosByStatus(int status, Pageable pageable);
        
        @Query("{status : { $in : [ ?0, null]}}")
        public Page<Video> findVidesByStatusExist(int status, Pageable pageable);
    }


    SPRING DATA 配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mongo
    ="http://www.springframework.org/schema/data/mongo"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd
              http://www.springframework.org/schema/data/mongo
              http://www.springframework.org/schema/data/mongo/spring-mongo-1.3.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
    >


        <!-- To translate any MongoExceptions thrown in @Repository annotated classes -->
        <context:annotation-config />
        
        <context:property-placeholder location="classpath*:/properties/mongodb/mongo.properties"/>

        <!-- Default bean name is 'mongo' -->
        <mongo:mongo host="${mongo.host}" port="${mongo.port}">
            <mongo:options connections-per-host="${mongo.connectionsPerHost}"
                threads-allowed-to-block-for-connection-multiplier
    ="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                connect-timeout
    ="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}"
                auto-connect-retry
    ="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}"
                socket-timeout
    ="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}"
                write-number
    ="1" write-timeout="0" write-fsync="true" />
        </mongo:mongo>

        <!-- <mongo:db-factory 
                            dbname="${mongo.dbname}" 
                            username="${mongo.username}"
                            password="${mongo.password}"
                            mongo-ref="mongo" /> 
    -->
                            
        <mongo:db-factory 
                            
    dbname="${mongo.dbname}" 
                            mongo-ref
    ="mongo" />

        <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
            <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        </bean>
        
        <mongo:repositories base-package="com.tcl.project7.boss.**.repository" />

    </beans>


    注意的是,自定義的實現類要以IMPL后綴,則SPRING可以自動識別的,無需再指定了。

    調用REPOSITORY
    @Autowired
    private VideoRepository videoRepository;

    posted on 2013-12-24 09:23 paulwong 閱讀(2170) 評論(1)  編輯  收藏 所屬分類: SPRINGMONGODB

    Feedback

    # re: 為SPRING DATA MONGODB REPOSITORY添加自定義方法 2015-11-17 16:36 李大破

    寫的很清楚很詳細,謝謝啊  回復  更多評論   


    主站蜘蛛池模板: 黑人粗长大战亚洲女2021国产精品成人免费视频 | 日本zzzzwww大片免费| 青青青亚洲精品国产| 亚洲一本一道一区二区三区| 亚洲国产午夜电影在线入口| 亚洲精品高清久久| 亚洲gv白嫩小受在线观看| 亚洲一区二区三区香蕉| 久久久久无码专区亚洲av| 亚洲人成亚洲人成在线观看| 亚洲熟妇av一区二区三区| 在线亚洲午夜理论AV大片| 亚洲伊人久久大香线蕉在观| 亚洲av再在线观看| 老司机在线免费视频| igao激情在线视频免费| 亚洲不卡在线观看| 亚洲免费观看视频| 国产免费黄色大片| 久久受www免费人成_看片中文| 国产精品极品美女自在线观看免费 | 亚洲五月午夜免费在线视频| 91亚洲精品第一综合不卡播放| 亚洲成A∨人片天堂网无码| 一色屋成人免费精品网站| 99在线热播精品免费99热| 亚洲av永久中文无码精品| 亚洲自偷精品视频自拍| 亚洲男人av香蕉爽爽爽爽| 最近中文字幕无吗免费高清 | 精品97国产免费人成视频| 亚洲男人的天堂网站| 亚洲视频在线观看视频| 超清首页国产亚洲丝袜| 日韩电影免费在线观看视频| 1000部禁片黄的免费看| a级成人免费毛片完整版| 一个人看的免费视频www在线高清动漫| 国产成人精品日本亚洲网址| 亚洲日本中文字幕区| 亚洲人精品午夜射精日韩|