Springboot+druid+mybatis+oracle 批处理:

1.设置spring.datasource.filters=stat,log4j,去掉wall


2. DruidDBConfig中设置可以执行多条语句


import java.sql.SQLException;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;

@Configuration
public class DruidDBConfig {

	private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);

	@Value("${spring.datasource.url}")
	private String dbUrl;

	@Value("${spring.datasource.username}")
	private String username;

	@Value("${spring.datasource.password}")
	private String password;

	@Value("${spring.datasource.driverClassName}")
	private String driverClassName;

	@Value("${spring.datasource.initialSize}")
	private int initialSize;

	@Value("${spring.datasource.minIdle}")
	private int minIdle;

	@Value("${spring.datasource.maxActive}")
	private int maxActive;

	@Value("${spring.datasource.maxWait}")
	private int maxWait;

	@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
	private int timeBetweenEvictionRunsMillis;

	@Value("${spring.datasource.minEvictableIdleTimeMillis}")
	private int minEvictableIdleTimeMillis;

	@Value("${spring.datasource.validationQuery}")
	private String validationQuery;

	@Value("${spring.datasource.testWhileIdle}")
	private boolean testWhileIdle;

	@Value("${spring.datasource.testOnBorrow}")
	private boolean testOnBorrow;

	@Value("${spring.datasource.testOnReturn}")
	private boolean testOnReturn;

	@Value("${spring.datasource.poolPreparedStatements}")
	private boolean poolPreparedStatements;

	@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
	private int maxPoolPreparedStatementPerConnectionSize;

	@Value("${spring.datasource.filters}")
	private String filters;

	@Value("{spring.datasource.connectionProperties}")
	private String connectionProperties;

	@Bean 
	@Primary // 在同样的DataSource中,会被首先注入
	public DataSource dataSource() {
		DruidDataSource datasource = new DruidDataSource();

		datasource.setUrl(this.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);
		try {
			datasource.setFilters(filters);
			logger.info("druid configuration initialization success! ");
		} catch (SQLException e) {
			logger.error("druid configuration initialization filter", e);
		}
		datasource.setConnectionProperties(connectionProperties);
		return datasource;
	}

	@Autowired
	WallFilter wallFilter;

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

	@Bean(name = "wallConfig")
	public WallConfig wallConfig() {
		WallConfig wallConfig = new WallConfig();
		wallConfig.setMultiStatementAllow(true); // 允许一次执行多条语句
		wallConfig.setNoneBaseStatementAllow(true); // 允许一次执行多条语句
		return wallConfig;
	}
}
1. 批量新增配置

DAO:

 void insertBetch(List<TABLE> txtLogs);

Mapping:

<insert id="insertBetch" parameterType="java.util.List">
	insert into TABLE (ID, name, sex,ip, age,sss,updatedate)
	select  SEQ_XX.NEXTVAL,cd.* from(
		<foreach collection="list" item="list" close=")" open="(" index="index" separator="UNION ALL">
			select 
				#{list.name,jdbcType=VARCHAR},
				#{list.sex,jdbcType=DATE}, #{list.ip,sex=VARCHAR},
				#{list.age,jdbcType=VARCHAR}, #{list.sss,jdbcType=VARCHAR},
				#{list.updatedate,jdbcType=DATE}
			from dual
		</foreach>
	) cd
</insert>

SQL:

insert into TABLE (ID, name, sex, IP, age, sss, updatedate) select SEQ_XX.NEXTVAL,cd.* from( ( select ?, ?, ?, ?, ?, ? from dual ) ) UNION ALL select SEQ_XX.NEXTVAL,cd.* from( ( select ?, ?, ?, ?, ?, ? from dual ) )  cd 

2. 批量更新配置

DAO:

void updateBetch4Return(List<TABLE> list);

Mapping:

update id="updateBetch4Return" parameterType="java.util.List">
	<foreach collection="list" item="record" index="index"
		open="begin" close=";end;" separator=";">
		update TABLE
		<set>
			ZT = #{record.zt,jdbcType=VARCHAR},
			BZ = #{record.bz,jdbcType=VARCHAR}
		</set>
		where ID like '%'||#{record.ID,jdbcType=VARCHAR}||'%'
	</foreach>
</update>

SQL:

begin update TABLE SET ZT = ?, BZ = ? where id like '%'||?||'%' ;update TABLE SET ZT = ?, BZ = ? where id like '%'||?||'%' ;end;

猜你喜欢

转载自blog.csdn.net/qq_35814269/article/details/80540834
今日推荐