jpa+jdbc

作者: hemingkung | 来源:发表于2019-11-17 23:57 被阅读0次

配置

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.dsuser")
    public DataSourceProperties userDataSourceProperties(){
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    public DataSource userDataSource(){
        return userDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }


    /***********************************************************************************************/

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.dsorder")
    public DataSourceProperties orderDataSourceProperties(){
        return new DataSourceProperties();
    }

    @Bean
    public DataSource orderDataSource(){
        return orderDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

    @Bean
    public JdbcTemplate orderJdbcTemplate(@Qualifier("orderDataSource") DataSource orderDataSource){
        return new JdbcTemplate(orderDataSource);
    }

    /***********************************************************************************************/

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(false);   //不自动生成表结构
        LocalContainerEntityManagerFactoryBean factoryBean =  new LocalContainerEntityManagerFactoryBean();
        factoryBean.setJpaVendorAdapter(vendorAdapter);
        factoryBean.setDataSource(userDataSource());
        factoryBean.setPackagesToScan("com.nick.example"); //在哪个包下面扫描实体
        return  factoryBean;
    }

    @Bean
    public PlatformTransactionManager transactionManager(){

        JpaTransactionManager userTM = new JpaTransactionManager();
        userTM.setEntityManagerFactory(entityManagerFactory().getObject());
        PlatformTransactionManager orderTM = new DataSourceTransactionManager(orderDataSource());
        ChainedTransactionManager tm = new ChainedTransactionManager(orderTM,userTM);//放在前面的后提交
        return tm;
    }

    @Autowired
    CustomerRepository customerRepository;

    @Autowired
    @Qualifier("orderJdbcTemplate")
    private JdbcTemplate orderJdbcTemplate;

    private static final String SQL_CREATE_ORDER = "INSERT INTO customer_order (customer_id, title,amount) VALUES (?,?,?)";

    @Transactional
    public void createOrder(Order order) {

        Customer customer = customerRepository.findById(order.getCustomerId()).orElse(null);
        customer.setDeposit(customer.getDeposit()-order.getAmount());
        customerRepository.save(customer);
        if(order.getTitle().contains("error1")){
            throw  new RuntimeException("Error1");
        }
        orderJdbcTemplate.update(SQL_CREATE_ORDER,order.getCustomerId(),order.getTitle(),order.getAmount());
        if(order.getTitle().contains("error2")){
            throw  new RuntimeException("Error2");
        }
    }

    public Map userInfo(Long id) {
        Customer customer = customerRepository.findById(id).orElse(null);
        List orders = orderJdbcTemplate.queryForList("select * from customer_order where customer_id=" + id);
        Map result = new HashMap();
        result.put("customer",customer);
        result.put("order",orders);
        return result;
    }

相关文章

网友评论

      本文标题:jpa+jdbc

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