行业平台--推荐平台

问题:spring的注解功能@autowired,默认是以type也就是类型匹配的,但是同一个类对应不同名字对象的情况,会无法确定是哪个类的对象。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="tbhyJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="tbhyDataSource"/>
</bean>

  可以在@autowired后[email protected]("jdbcTemplate")

声明变量的时候,可以通过名字注入。

private JdbcTemplate jdbcTemplate;
private JdbcTemplate tbhyJdbcTemplate;

问题: transactionTemplate的用法。

package com.taobao.rrplatform.dao.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.taobao.rrplatform.dao.TbhyDAO;
import com.taobao.rrplatform.domain.TbhyScenarioSettingDomain;
import com.taobao.rrplatform.domain.TbhyTabSetingDomain;
import com.taobao.rrplatform.domain.TbhyTopicSettingDomain;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 淘宝行业平台场景数据访问DAO
 * Created by goofy on 2014/7/11.
 */
public class TbhyDAOImpl extends SqlMapClientDaoSupport implements TbhyDAO {

    @Resource
    private TransactionTemplate transactionTemplate;

    @Override
    public TbhyScenarioSettingDomain get(long sceneId) {
        TbhyScenarioSettingDomain query = new TbhyScenarioSettingDomain();
        query.setSceneId(sceneId);
        TbhyScenarioSettingDomain scene = (TbhyScenarioSettingDomain) getSqlMapClientTemplate().queryForObject("tbhyScenarioSetting.select", query);
        TbhyTopicSettingDomain topicQuery = new TbhyTopicSettingDomain();
        topicQuery.setScenarioId(scene.getId());
        List<TbhyTopicSettingDomain> topics = getSqlMapClientTemplate().queryForList("tbhyTopicSetting.select", topicQuery);
        scene.setTopicList(topics);
        for (TbhyTopicSettingDomain topic : topics) {
            TbhyTabSetingDomain tabQuery = new TbhyTabSetingDomain();
            tabQuery.setTopicId(topic.getId());
            List<TbhyTabSetingDomain> tabs = getSqlMapClientTemplate().queryForList("tbhyTabSeting.select", tabQuery);
            topic.setTabList(tabs);
        }
        return scene;
    }

    @Override
    public TbhyScenarioSettingDomain add(final TbhyScenarioSettingDomain domain) {
        return (TbhyScenarioSettingDomain) transactionTemplate.execute(new TransactionCallback() {
            @Override
            public Object doInTransaction(TransactionStatus status) {
                Long id = (Long) getSqlMapClientTemplate().insert("tbhyScenarioSetting.insert", domain);
                domain.setId(id);
                addSceneTopicsAndTabs(domain);
                return domain;
            }
        });
    }

    /**
     * 插入场景的小主题和小主题下的tab信息
     *
     * @param domain
     */
    private void addSceneTopicsAndTabs(TbhyScenarioSettingDomain domain) {
        for (TbhyTopicSettingDomain topic : domain.getTopicList()) {
            topic.setScenarioId(domain.getId());
            Long topicId = (Long) getSqlMapClientTemplate().insert("tbhyTopicSetting.insert", topic);
            topic.setId(topicId);
            for (TbhyTabSetingDomain tab : topic.getTabList()) {
                tab.setTopicId(topicId);
                tab.setId((Long) getSqlMapClientTemplate().insert("tbhyTabSeting.insert", tab));
            }
        }
    }

    @Override
    public boolean delete(final long sceneId) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                TbhyScenarioSettingDomain scene = get(sceneId);
                getSqlMapClientTemplate().delete("tbhyScenarioSetting.delete", scene.getId());
                deleteSceneTopicsAndTabs(scene);
            }
        });
        return true;
    }

    /**
     * 删除场景的小主题和小主题下的tab信息
     *
     * @param scene
     */
    private void deleteSceneTopicsAndTabs(TbhyScenarioSettingDomain scene) {
        for (TbhyTopicSettingDomain topic : scene.getTopicList()) {
            getSqlMapClientTemplate().delete("tbhyTopicSetting.delete", topic);
            for (TbhyTabSetingDomain tab : topic.getTabList()) {
                getSqlMapClientTemplate().delete("tbhyTabSeting.delete", tab);
            }
        }
    }

    @Override
    public TbhyScenarioSettingDomain update(final TbhyScenarioSettingDomain domain) {
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                getSqlMapClientTemplate().update("tbhyScenarioSetting.update", domain);
                deleteSceneTopicsAndTabs(domain);
                addSceneTopicsAndTabs(domain);
            }
        });
        return get(domain.getId());
    }

    public static void main(String[] args) {
        TbhyScenarioSettingDomain scene = new TbhyScenarioSettingDomain();
        scene.setCreator("古飞");
        scene.setGmtCreate(new Date());
        scene.setGmtModified(new Date());
        scene.setId(12l);
        scene.setIndustryId(12l);
        scene.setLayoutType(1);
        scene.setMaxItemPerBrand(5);
        scene.setScenarioName("测试场景");
        List<TbhyTopicSettingDomain> topicList = new ArrayList<TbhyTopicSettingDomain>(2);
        scene.setTopicList(topicList);

        for (int i = 0; i < 2; i++) {
            TbhyTopicSettingDomain topic = new TbhyTopicSettingDomain();
            topic.setCreator("gufei");
            topic.setDatasourceGroup(13l + 100 * i);
            topic.setDisplayOrder(i);
            topic.setGmtCreate(new Date());
            topic.setGmtModified(new Date());
            topic.setId((long) i);
            topic.setPictureUrl("http://baidu.com");
            topic.setRankOption(2);
            topic.setScenarioId(12l);
            topic.setTabNum(3);
            topic.setTopicName("测试topic" + i);
            List<TbhyTabSetingDomain> tabList = new ArrayList<TbhyTabSetingDomain>(2);
            topic.setTabList(tabList);
            for (int j = 0; j < 2; j++) {
                TbhyTabSetingDomain tab = new TbhyTabSetingDomain();
                tab.setCreator("gufei");
                tab.setDatasourceId((long) (15 + 20 * j));
                tab.setDisplayOrder(j);
                tab.setGmtCreate(new Date());
                tab.setGmtModified(new Date());
                tab.setId((long) j);
                tab.setPictureUrl("http://xxx.com/p/i" + j);
                tab.setTabName("测试tab" + i * 100 + j);
                tab.setTopicId((long) i);
                tabList.add(tab);
            }
            topicList.add(topic);
        }

        System.err.print(JSON.toJSONString(scene, SerializerFeature.PrettyFormat));
    }
}

行业平台--推荐平台

时间: 2024-08-09 08:53:53

行业平台--推荐平台的相关文章

互联网广告的个性化推荐平台设计--相关知识

人群分类模型 根据用户人群数据记录,建立人群属性分类模型,根绝用户特点,将用户标记为特定类别.据此进行精准定向服务,并进行效果评估.主要分类方法: 1.采用模糊数学综合判定理论,构建关系矩阵,判定类别属性的映射关系.采样真实数据,模拟真实数据分布,统计属性取值的概率分布,作为概率的估计值,另外,将广告类别的点击次数作为权重矩阵R.构建映射关系公式: R是关系矩阵,W是出现次数矩阵,C是计算结果的类别判定矩阵. 2. 采用分类器算法构建分类模型.根据数据特点,利用数据挖掘和机器学习 相关的分类器算

倪江利:魅族推荐平台的架构演进之路

摘要:魅族拥有超大规模的用户量及海量数据,魅族推荐平台实现了在海量的数据中对算法模型进行在线及离线训练,在高并发的场景下实时进行预测为用户推荐更感兴趣的信息.同时支撑多算法组合A/B测试,以供算法进行在线实验,并能在线进行动态机器资源分配以达到资源的最大化利用. 魅族整个产品线都有用到推荐,包括资讯.视频.应用中心.个性化中心.广告等业务,魅族的推荐平台在其中起到了关键的作用,下文将会全面分析从开始到现在的架构演进,以及其中涉及的技术难点分析,以期给读者带来更多的思考. 一.魅族推荐平台架构演进

最好的七大网络信息安全在线学习平台推荐

近几年互联网的高速发展,电子商务的高速发展,互联网已经成为我们日常生活照密不可分的一部分,和我们的日常生活息息相关,我们在京.宝上网购商品,网上付款,这些都是有风险,同时也担心我们的账号会不会被盗,这些都和网络信息安全密不可分的.通过国家也渐渐的对网络信息安全有了高度的重视.所以在这里推荐最好的七大网络信息安全在线学习平台推荐,对这些感兴趣的可以了解一下哦. 第一家信息安全在线学习平台-----西普学院 西普学院是国内信息安全在线学习实验的免费学习平台,提供Windows安全.逆向工程.网络攻防

&lt;zz&gt;通用精准化推荐平台

通用精准化推荐平台 平台结构 以下为推荐流程可视化系统设计图 以下为推荐结果可追溯系统设计图 通过推荐流程可视化系统以及推荐结果可追溯系统,我们可以解决原有推荐系统架构的问题 推荐流程可视化系统 --------------------------------------------------------------------------------------------------------------------------------------------------------

通用精准化推荐平台

通用精准化推荐平台 平台结构 以下为推荐流程可视化系统设计图 以下为推荐结果可追溯系统设计图 通过推荐流程可视化系统以及推荐结果可追溯系统,我们可以解决原有推荐系统架构的问题 推荐流程可视化系统   ------------------------------------------------------------------------------------------------------------------------------------------------------

深度学习在美团点评推荐平台排序中的应用--学习笔记

写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运用 原创 2017-07-28 潘晖 美团点评技术团队 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户

专业C2C电子商务平台推荐

在过去的几年中,中国的电子商务正以前所未有的速度迅猛发展着.不仅改变着我们的传统生产方式,而且也对经济结构的调整产生深刻的影响.在电子商务的运营模式中, C2C模式由于其用户参与性强.灵活方便等特点,逐渐表现出较强的发展潜力.C2C电子商务平台就是通过为买卖双方提供一个在线交易平台,其中,客户是C2C电子商务平台获得企业利润和竞争优势的重要资源,C2C模式成功的关键在于分析客户的个性需求,进行有效地客户管理关系,从而提高客户的满意度和忠诚度. C2C电子商务平台的分类有综合型C2C.垂直型C2C

深度学习在美团点评推荐平台排序中的运用

深度学习在美团点评推荐平台排序中的运用 原文地址:https://tech.meituan.com/dl.html 潘晖 美团点评搜索推荐团队 ·2017-07-28 14:33 美团点评作为国内最大的生活服务平台,业务种类涉及食.住.行.玩.乐等领域,致力于让大家吃得更好,活得更好,有数亿用户以及丰富的用户行为.随着业务的飞速发展,美团点评的用户和商户数在快速增长.在这样的背景下,通过对推荐算法的优化,可以更好的给用户提供感兴趣的内容,帮用户更快速方便的找到所求.我们目标是根据用户的兴趣及行为

基于OneMap的水利行业共享服务平台搭建步骤

今天上午再次学习Esri技术培训中心的“GIS服务共享与运维管理——之OneMap解决方案”课程,从中学习了OneMap的产品架构以及基于OneMap共享服务平台的搭建步骤.下面把其中水利行业的共享服务平台的搭建主要步骤整理如下: 搭建水利共享服务平台主要为水利行业各个不同业务领域.不同业务部门共同使用, 主要的搭建步骤有, 一.平台数据资源组织 (1)建立数据中心,汇集之前“各自为政”的各个业务系统的业务数据.建设数据模型和数据仓库,对汇集好的所有数据进行统一的管理.通过行业共享服务平台,将收