美文网首页
一些技术总结

一些技术总结

作者: dotff | 来源:发表于2018-02-09 13:48 被阅读0次

一.Mybatis

1.Integer类型传值为0时

在mybatis中会自动把0当成null,所以if判断为false,如果要传值为0时判断为true,只要将判断为空串的判断去掉即可 <if test="id != null and id !=''">

2.在java中拼sql

<select id="execSql" parameterType="String" resultType="?">
      ${_parameter}
</select> 

二.多事务手动提交

// 1.1 配置类
@Configuration 
public class TransactionManagementConfig implements TransactionManagementConfigurer{
    
    @Resource(name="selfErpTransactionManager")
    private PlatformTransactionManager selfErpTransactionManager;

    @Bean(name = "selfErpTransactionManager")
    public PlatformTransactionManager selfTesttransactionManager(@Qualifier("erpDataSource")DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    
    // 实现接口 TransactionManagementConfigurer 方法,其返回值代表在拥有多个事务管理器的情况下默认使用的事务管理器
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return selfErpTransactionManager;
    }

}
// 1.2 service 里
@Service
public class ErpFileTaskServiceImpl {
    @Resource(name = "selfErpTransactionManager")
    private PlatformTransactionManager transactionManager;

    public void updateStatus(List<ErpImportFile> taskList){  // 具体的方法
        //DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) SpringContextHolder.getBean("transactionManager");
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
        TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
        erpTaskMapper.batchUpdateFileStatus(taskList); // TODO sth.
        transactionManager.commit(status);
    }
        
}

三:静态方法依赖注入

@Component
@Lazy(false)
public class FileUtils {

    @Autowired 
    private ErpUtilMapper erpUtilMapper; 

    private static FileUtils fileUtils; 

    @PostConstruct 
    public void init() { 
        fileUtils = this; 
        fileUtils.erpUtilMapper = this.erpUtilMapper; 
    } 

    public static void doSth(){

        fileUtils.erpUtilMapper.insert(Bean);
    }

}

四 配置 : druid支持多条sql执行在一个方法里

@Configuration 
@MapperScan(basePackages = { "com.diditech.bigdata.datasync.erp.dao.erp" }, sqlSessionFactoryRef = "erpSqlSessionFactoryBean")
public class ErpDruidDBConfig {  

    @Bean(name = "wallConfig")
    WallConfig wallFilterConfig(){
        WallConfig wc = new WallConfig ();
        wc.setMultiStatementAllow(true);
        return wc;
    }

    @Autowired
    WallFilter wallFilter;

    @Bean(name = "wallFilter")
    @DependsOn("wallConfig")
    WallFilter wallFilter(WallConfig wallConfig){
        WallFilter wfilter = new WallFilter ();
        wfilter.setConfig(wallConfig);
        return wfilter;
    }

    @Bean(name = "erpDataSource")
    public DataSource accTestdataSource(){  
        DruidDataSource datasource = new DruidDataSource();  
        datasource.setUrl(dbUrl);  
        datasource.setUsername(username);  
        datasource.setPassword(password);  
        datasource.setDriverClassName(driverClassName);  
        //configuration  
        datasource.setInitialSize(initialSize);  
        datasource.setMinIdle(minIdle);  
        datasource.setMaxActive(maxActive);  
        datasource.setMaxWait(maxWait);  
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);  
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);  
        datasource.setValidationQuery(validationQuery);  
        datasource.setTestWhileIdle(testWhileIdle);  
        datasource.setTestOnBorrow(testOnBorrow);  
        datasource.setTestOnReturn(testOnReturn);  
        datasource.setPoolPreparedStatements(poolPreparedStatements);  
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); 
        datasource.setDefaultAutoCommit(false);
        /**  modify by ff 20171102 为了多条sql执行   BEGIN
        try {
            datasource.setFilters(filters);  
        } catch (SQLException e) {  
        }
         */
        List<Filter> filters = new ArrayList<>();
        StatFilter statFilter = new StatFilter();
        filters.add(statFilter);
        filters.add(wallFilter);
        datasource.setProxyFilters(filters);
        // modify by ff 20171102 为了多条sql执行   END
        datasource.setConnectionProperties(connectionProperties);
        return datasource;  
    }  
}

五 未整理 : static 里 线程安全的配置

相关文章

  • 一些技术总结

    一.Mybatis 1.Integer类型传值为0时 在mybatis中会自动把0当成null,所以if判断为fa...

  • JAVA技能树

    JAVA核心技术总结 J2EE技术总结 工作和学习总结 大数据相关技术总结

  • drf Web API运用(一)--TokenAuthentic

    前言 最近在研究学习django rest framework中,对于运用过的一些技术点进行总结,因此设置相关技术...

  • 技术述职的一些总结

    作为一名职场人,每个人难免都会取述职,其实就是去“吹牛逼”,去委婉的表达自己的业务、团队做的还很,技术很牛逼,但其...

  • Android 技术文档目录

    技术周报[https://androidweekly.io] Android技术文档总结 技术文档总结[https...

  • Hacking with iOS: SwiftUI Editio

    该技术项目将更详细地研究Core Data,首先是对一些基本技术的总结,然后逐步解决一些更复杂的问题。 当您使用 ...

  • Docker基础技术-Linux Namespace

    写这个系列文章主要是对之前做项目用到的docker相关技术做一些总结,包括docker基础技术Linux命名空间,...

  • 机器学习算法总结

    根据自己看的一些书籍及技术博客等内容,对机器学习算法进行一些总结,供大家参考

  • 绘图强化篇

    本篇文章是对绘图技术的一些技术点进行总结 1.设置线条颜色,宽度,样式 // 上下文let ctx = UIGra...

  • 技术栈总结

    最近总结了下自己所了解的一些技术,做了一个脑图(Xmind),这样直观的一张图中,技术点的体系结构清晰。不同技术点...

网友评论

      本文标题:一些技术总结

      本文链接:https://www.haomeiwen.com/subject/zjvftftx.html