1、引入mybatis plus 依賴。
<!—配置事務管理--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
<!--mybatis-plus 依賴--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.0.6</version> </dependency>
<!--oracle 驅動--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc8</artifactId> <version>1.0</version> </dependency>
<!-- druid 連接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> |
2、配置application.yml文件。
spring: # 配置oracle連接數據 datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:oracle:thin:@192.168.2.128:1521:abc username: jarisignal password: jarisignal #配置連接池 driverClassName: oracle.jdbc.driver.OracleDriver
# 配置初始化大小、最小、最大,通常來說,只需要修改initialSize、minIdle、maxActive initialSize: 5 minIdle: 5 maxActive: 20 # 配置獲取連接等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打開PSCache,並且指定每個連接上PSCache的大小,如果用Oracle,則把poolPreparedStatements配置為true,mysql可以配置為false。分庫分表較多的數據庫,建議配置為false poolPreparedStatements: false maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆 filters: stat,log4j,config |
3、編寫@Configuration配置文件。
在ssm中我們需要在application.xml文件中編寫 <bean> 來生成 SqlSessionFactory 被spring管理 和 掃描路徑下的mapper文件。
/** * 版 權 : lyg.com * 包 名 : com.lyg.config * 描 述 : MybatisConfig * 創建 時 間: 1970/01/01 * <p> * * @author : */ @Configuration//聲明為配置類 @MapperScan(basePackages = {"com.lyg.rtt.dao"})//掃描該包下的文件 @EnableTransactionManagement//開啟事務管理 @Slf4j//日志 public class MyBatisConfig { //DataSourceConfig類讀取application.yml文件總的 dataSource 配置 @javax.annotation.Resource private DataSourceConfig dataSourceConfig; //讀取 application.yml文件總的 Druid連接池 配置 private DruidDataSource dataSource = null;
/** * 初始化數據源 * <p> * 創建人: * 創建日期: 1970-01-01 * 描述 : 初始化數據源 * * @param * @return DataSource * @throws Exception */ @Bean(name = "dataSource") public DataSource dataSource() throws Exception {
log.info("初始化數據源 dataSourceConfig = {}", dataSourceConfig);
dataSource = new DruidDataSource(); //鏈接地址 dataSource.setUrl(dataSourceConfig.getUrl()); //數據庫用戶名 dataSource.setUsername(dataSourceConfig.getUsername()); //數據庫密碼 dataSource.setPassword(dataSourceConfig.getPassword()); //配置初始化 dataSource.setInitialSize(dataSourceConfig.getInitialSize()); dataSource.setMinIdle(dataSourceConfig.getMinIdle()); dataSource.setMaxActive(dataSourceConfig.getMaxActive()); //獲取連接等待超時的時間 dataSource.setMaxWait(dataSourceConfig.getMaxWait()); //間隔多久才進行一次檢測 dataSource.setTimeBetweenEvictionRunsMillis(dataSourceConfig.getTimeBetweenEvictionRunsMillis()); //接在池中最小生存的時間 dataSource.setMinEvictableIdleTimeMillis(dataSourceConfig.getMinEvictableIdleTimeMillis()); //validationQuery String validationQuery = dataSourceConfig.getValidationQuery(); if (null != validationQuery && !"".equals(validationQuery)) { dataSource.setValidationQuery(validationQuery); } //testWhileIdle dataSource.setTestWhileIdle(dataSourceConfig.isTestWhileIdle()); //testOnBorrow dataSource.setTestOnBorrow(dataSourceConfig.isTestOnBorrow()); //testOnReturn dataSource.setTestOnReturn(dataSourceConfig.isTestOnReturn()); //分庫分表較多的數據庫,建議配置為false if (dataSourceConfig.isPoolPreparedStatements()) { dataSource.setMaxPoolPreparedStatementPerConnectionSize(dataSourceConfig.getMaxPoolPreparedStatementPerConnectionSize()); } log.info("成功創建dataSource,dataSource = {}", dataSource); return dataSource; }
/** * 關閉數據源 * <p> * 創建人: * 創建日期: 1970-01-01 * 描述 : 關閉數據源 * * @param * @return * @throws */ //@PreDestroy 關閉spring容器后釋放一些資源 @PreDestroy public void close() { if (dataSource != null) { dataSource.close(); log.info("成功關閉數據源"); } }
/** * 創建sqlSessionFactory * <p> * 創建人: * 創建日期: 1970-01-01 * 描述 : 創建sqlSessionFactory * * @param * @return SqlSessionFactory * @throws Exception */ @Bean public SqlSessionFactory sqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
// mybatisPlus相關配置 GlobalConfig globalConfig = new GlobalConfig(); // 配置邏輯刪除參數 GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig(); // 已刪除標識 dbConfig.setLogicDeleteValue("0"); // 正常 dbConfig.setLogicNotDeleteValue("1"); globalConfig.setDbConfig(dbConfig); // 邏輯刪除組件 =>>>tyq globalConfig.setSqlInjector(new LogicSqlInjector()); sqlSessionFactoryBean.setGlobalConfig(globalConfig); //數據源 sqlSessionFactoryBean.setDataSource(dataSource());
//設置SQL打印 sqlSessionFactoryBean.setPlugins(new Interceptor[]{ new PerformanceInterceptor().setFormat(Boolean.TRUE), // 配置樂觀鎖插件 =>>> tyq new OptimisticLockerInterceptor() });
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//加載 指定包下的源文件,主要是掃描mapper.xml Resource[] resources_core = resolver.getResources("classpath*:com/lyg/rtt/dao/mapper/*Mapper.xml");
Resource[] resources = ArrayUtils.addAll(resources_core);
//設置mapperLocations sqlSessionFactoryBean.setMapperLocations(resources);
//駝峰 sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
log.info("成功創建sqlSessionFactory,sqlSessionFactoryBean = {}", sqlSessionFactoryBean);
return sqlSessionFactoryBean.getObject();
}
/** * 配置事務管理器 * <p> * 創建人: * 創建日期: 1970-01-01 * 描述 : 配置事務管理器 * * @param * @return DataSourceTransactionManager * @throws Exception */ @Bean(name = "transactionManager") @Primary public DataSourceTransactionManager transactionManager() throws Exception { log.info("開始配置事務管理器"); return new DataSourceTransactionManager(dataSource); }
} |
PS:
①DataSourceConfig.class的配置
/** * 版 權 : lyg.com * 包 名 : com.lyg.config * 描 述 : DataSourceConfig * 創建 時 間: 1970/01/01 * <p> * * @author : */ @Getter @Setter @ToString @Configuration @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceConfig {
/** * 數據源類型 **/ private String type; /** * 數據庫驅動 **/ private String driverClassName; /** * 鏈接地址 **/ private String url; /** * 數據庫用戶名 **/ private String username; /** * 數據庫密碼 **/ private String password; /** * 配置初始化 **/ private Integer initialSize ; /** * 配置初始化 **/ private Integer minIdle ; /** * 配置初始化 **/ private Integer maxActive; /** * 獲取連接等待超時的時間 **/ private Long maxWait; /** * 間隔多久才進行一次檢測 **/ private Long timeBetweenEvictionRunsMillis; /** * 接在池中最小生存的時間 **/ private Long minEvictableIdleTimeMillis; /** * validationQuery **/ private String validationQuery; /** * testWhileIdle **/ private boolean testWhileIdle; /** * testOnBorrow **/ private boolean testOnBorrow; /** * testOnReturn **/ private boolean testOnReturn; /** * poolPreparedStatements **/ private boolean poolPreparedStatements; /** * 分庫分表較多的數據庫,建議配置為false **/ private Integer maxPoolPreparedStatementPerConnectionSize; /** * 監控統計攔截的filters **/ private String filters;
/** * connectionProperties **/ private String connectionProperties;
} |
②如果只是 如上 配置 ,可能會出現項目能啟動,但是sql語句執行報錯。原因:編譯過程中mapper.xml文件沒有編譯進去。所以還需要在pom.xml文件中加入下配置:
<build> <resources>
<resource> <directory>src/main/java/</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yml</include> </includes> <excludes> <exclude>**/.git/*</exclude> <exclude>**/.svn/*</exclude> </excludes> </resource> <resource> <directory>src/main/resources/</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.css</include> <include>**/*.js</include> <include>**/*.yml</include> <include>**/*.ftl</include> <include>**/**</include> </includes> <excludes> <exclude>**/.git/*</exclude> <exclude>**/.svn/*</exclude> </excludes> </resource> </resources> </build> |