IDEA Springboot 整合Mybatis 完整教程系列 03

03 设置sqlsession,datasource


直接用mybatis 自动生成的mapper接口和xml文件,是会出现sqlsession not found 这个错误的。

查找了网上的资料,说是mybatis1.2 及之后的版本就没有sqlsession 自动注入了,需要我们手动编写注入。

这个问题困扰了好几天时间,不停的查找网上教程,都说的不清不楚的,根本没有解决办法。

最后是看了慕课网上面的一个springboot+mybatis 教学视频,才得到解决办法的。

这里贴出视频地址,也算是感谢这个视频,做一个宣传吧。

springboot+mybatis 搭建迷你小程序


请和前面所写的系列教程配合学习

项目的结构图如下

IDEA Springboot 整合Mybatis 完整教程系列 03_第1张图片


请看到com.example.demo.config包目录下,包含dao,和service:

(1)dao里,设置sqlsession,代码如下:

package com.example.demo.config.dao;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;


import javax.sql.DataSource;
import java.io.IOException;

@Configuration
public class SessionFactoryConfiguration {


    @Value("${mybatis.config_file}")
    private String mybatisConfigFilePath;

    @Value("${mapper_path}")
    private String mapperpath;
    @Value("${entity_package}")
    private String entityPackage;

    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactoryBean createSQlSessionFactoryBean() throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean =new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath));
        PathMatchingResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
        String packageSearchPath=PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX+mapperpath;
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath));
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
        return sqlSessionFactoryBean;


    }


}

(2)dao里,设置datasource,代码如下:

package com.example.demo.config.dao;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.beans.PropertyVetoException;

@Configuration
@MapperScan("com.example.demo.mapper")
public class DataSourceConfiguration {

    @Value("${jdbc.driver}")
    private String jdbcDriver;
    @Value("${jdbc.url}")
    private String jdbcUrl;
    @Value("${jdbc.username}")
    private String jdbcUsername;
    @Value("${jdbc.password}")
    private String jdbcPassword;

   @Bean(name="dataSource")
    public ComboPooledDataSource createDataSource() throws PropertyVetoException {

        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        dataSource.setDriverClass(jdbcDriver);
        dataSource.setJdbcUrl(jdbcUrl);
        dataSource.setUser(jdbcUsername);
        dataSource.setPassword(jdbcPassword);

        dataSource.setAutoCommitOnClose(false);
        return dataSource;


    }



}


(3)service里,设置transactionManager,代码如下:

package com.example.demo.config.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import javax.sql.DataSource;


@Configuration
@EnableTransactionManagement
public class TransactionManagementConfiguration implements TransactionManagementConfigurer {

    @Autowired
    private DataSource dataSource;

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}



你可能感兴趣的:(JavaEE学习,Srpingboot,mybatis)