美文网首页技术干货程序员SpringBoot精选
使用Springboot+Mybatis整合数据源Druid访问

使用Springboot+Mybatis整合数据源Druid访问

作者: Why__so_serious | 来源:发表于2018-11-02 18:10 被阅读100次

    首先创建出工程

    图片.png

    选择我们需要的模块

    图片.png

    然后选择工作空间命名完成即可

    我们选择了模块后Springboot会帮我们自动导入需要的依赖,但是我们还需要数据源

    Druid的依赖和日志log4j的依赖

      <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.15</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
    

    准备工作就算做好了,下面开始为我们的工程添加配置

    配置连接数据库需要的属性

    在application.properties中添加数据库信息

    图片.png

    然后我们需要配置我们导入的数据源

    配置这个数据源的细节我也不是非常了解,网上有很多,可以先当成一个固定写法

    //标注着是配置类
    @Configuration
    //这个代码可以复制,只需要修改这个注解的第一个参数,就是你的Mybatis的XML文件存放的路径
    @MapperScan(basePackages = "com.wy.*.*.SQL", sqlSessionTemplateRef = "pgSqlSessionTemplate")
    public class MybatisPgConfig {
    
    
        @Value("${jdbc.ds-pg.driverClassName}")
        private String driver;
        @Value("${jdbc.ds-pg.url}")
        private String url;
        @Value("${jdbc.ds-pg.username}")
        private String userName;
        @Value("${jdbc.ds-pg.password}")
        private String passWord;
    
        @Primary
        @Bean(name = "pgDataSource", initMethod = "init", destroyMethod = "close")
        public DataSource dataSource() throws SQLException {
    
            DruidXADataSource dataSource = new DruidXADataSource();
            //DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(userName);
            dataSource.setPassword(passWord);
            //配置最大连接
            dataSource.setMaxActive(100);
            //配置初始连接
            dataSource.setInitialSize(5);
            //配置最小连接
            dataSource.setMinIdle(10);
            //连接等待超时时间
            dataSource.setMaxWait(1000);
            //间隔多久进行检测,关闭空闲连接
            dataSource.setTimeBetweenEvictionRunsMillis(60000);
            //一个连接最小生存时间
            dataSource.setMinEvictableIdleTimeMillis(300000);
            //连接等待超时时间 单位为毫秒 缺省启用公平锁,
            //并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁
            dataSource.setUseUnfairLock(true);
            //用来检测是否有效的sql
            dataSource.setValidationQuery("select '1' as txt");
            dataSource.setTestWhileIdle(true);
            //申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能
            dataSource.setTestOnBorrow(true);
            //归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能
            dataSource.setTestOnReturn(true);
            //打开PSCache,并指定每个连接的PSCache大小启用poolPreparedStatements后,
            //PreparedStatements 和CallableStatements 都会被缓存起来复用,
            //即相同逻辑的SQL可以复用一个游标,这样可以减少创建游标的数量。
            dataSource.setPoolPreparedStatements(true);
            dataSource.setMaxOpenPreparedStatements(20);
            //配置sql监控的filter
            dataSource.setFilters("stat,wall,log4j");
            try {
                dataSource.init();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
            xaDataSource.setXaDataSource(dataSource);
            xaDataSource.setUniqueResourceName("pgDataSource");
    
            return xaDataSource;
        }
    
    
        @Bean(name = "pgSqlSessionFactory")
        public SqlSessionFactory pgSqlSessionFactory(@Qualifier("pgDataSource") DataSource dataSource)
                throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            Resource[] rs = new 
    //还有这里的读取地址也需要修改为你的路径,需要注意的是在测试时候,这个路径下不能有空的xml文件(也就是那种刚刚创建的那种,不能有否则报错为文件提前结束)
    PathMatchingResourcePatternResolver().getResources("classpath:SQL/*.xml");
            bean.setMapperLocations(rs);
            //pageHelper
            Interceptor interceptor = new PageInterceptor();
            Properties properties = new Properties();
            properties.setProperty("helperDialect", "postgresql");
            properties.setProperty("reasonable", "true");
            properties.setProperty("supportMethodsArguments", "true");
            properties.setProperty("pageSizeZero", "true");
            properties.setProperty("params", "count=countSql");
            interceptor.setProperties(properties);
            bean.setPlugins(new Interceptor[]{interceptor});
            org.apache.ibatis.session.Configuration configuration = bean.getObject().getConfiguration();
            configuration.setMapUnderscoreToCamelCase(true);
            bean.setConfiguration(configuration);
            return bean.getObject();
        }
    
    
        @Bean(name = "pgSqlSessionTemplate")
        public SqlSessionTemplate pgSqlSessionTemplate(
                @Qualifier("pgSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    
    }
    
    

    上面的代码需要修改两处路径,我已经注解上去,其他的都可以复制粘贴

    顺便说一句,如果你的代码没问题的话, @Value这个注解中可以显示你在application.properties配置的属性值,灰色的,如果没有的话就说明有问题,需要检查

       @Value("${jdbc.ds-pg.driverClassName}")
        private String driver;
        @Value("${jdbc.ds-pg.url}")
        private String url;
        @Value("${jdbc.ds-pg.username}")
        private String userName;
        @Value("${jdbc.ds-pg.password}")
        private String passWord;
    
    

    效果是这样的

    图片.png

    首先我们需要一个和数据库里面的表对应的一个java的实体类,这个很简单我就不贴代码出来占用篇幅了

    下面我们来编写Mybatis的代码,我们使用配置版的Mybatis

    首先我们创建一个接口,注解不懂的可以去百度,一般使用的是@Mapperscan标注在启动类上的可以声明多个包下的接口都是映射

    我们实现一个查询某张表的全部数据功能,返回值为该表实体类类型的list集合

    然后我们在我们之前配置数据源的时候写入的位置创建一个XML文件来写SQL语句

    图片.png

    好了,大功告成,我们只需要调用我们写的接口即可了

    图片.png

    如果注解有看不懂的可以去百度一下

    完成效果图

    图片.png

    至此完成使用Druid数据源和Springboot+Mybatis整合完成对数据库的操作

    相关文章

      网友评论

      本文标题:使用Springboot+Mybatis整合数据源Druid访问

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