SpringBoot 整合Mybatis Plus + Oracle


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM