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

首先创建出工程

图片.png

选择我们需要的模块

图片.png

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

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

Druid的依赖和日志log4j的依赖

  
            com.alibaba
            druid
            1.0.15
        
        
            log4j
            log4j
            1.2.17
        

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

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

在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访问数据库)