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

首先创建出工程

图片.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整合完成对数据库的操作

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容