springboot + mybatis 自定义数据库的数据源

1.pom依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

 

2.编写Mapper

@Mapper
public interface TestMapper {

    public JSONObject getTest(@Param("sql") String sql);
}

3. 编写xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xx.xx.areatest.ttt.conf.TestMapper">

    <select id="getTest">
        #{sql}
    </select>

</mapper>

4. 数据源的自定义

import xx.xx.areatest.ttt.conf.TestMapper;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin
@RequestMapping("/db")
public class DbTestFacade {

    @GetMapping("executeSql")
    public String executeSql(/*String url , String port,  String dbName ,String username, String password, String sql*/) throws Exception {
        String url = "localhost";
        String port = "3306";
        String dbName = "dn1";
        String username = "root";
        String password = "root";
        String sql = "select * from test1";
        HikariDataSource ds0 = DataSourceBuilder.create()
                .type(HikariDataSource.class)
                .driverClassName("com.mysql.jdbc.Driver")
                .url("jdbc:mysql://"+url+":"+port+"/"+dbName+"?useUnicode=true&useSSL=false&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true")
                .username(username)
                .password(password)
                .build();
        ds0.setMinimumIdle(2);
        ds0.setMaximumPoolSize(2);
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(ds0);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        SqlSessionFactory sqlSessionFactory =  bean.getObject();
        SqlSessionTemplate sqlSessionTemplate =  new SqlSessionTemplate(sqlSessionFactory);
        TestMapper mapper = sqlSessionTemplate.getMapper(TestMapper.class);
        System.out.println(mapper.getTest(sql));
        return "ok";
    }

}

 

posted @ 2021-08-26 15:11  cxylm  阅读(562)  评论(0)    收藏  举报