Java中Spring的JdbcTemplate连接常用数据库(SQL Server、Mysql、PostgreSQL、Oracle等)

  很久没写文章了,一方面是最近几个月比较忙,没太多时间,另一方面是最近拖延症严重,写文章的想法总是一拖再拖。今天找一个小案例写一下,与懒惰对抗一下。

  首先说一下背景,我们在项目中做数据持久化一般都是用mybatis或者hibernate开发框架,进行数据库连接和操作,最近做GIS仿真产品研发,根据需求需要保存三部分数据:1、业务数据,数据量比较小;2、GIS数据,需要用到空间关系;3、物联数据,数据量大,在我们开发自测阶段数据量就可以达到每天百万以上。根据以上数据特点,我们使用了传统的MySQL数据库、空间数据库PostgreSQL、TD engine时序数据库,项目中做了spring boot多数据源动态切换。今天的重点不是多数据源的实现,这个应用以后会在另外一篇文章中介绍;在研发过程中我们需要与其他系统对接的场景,连接SQLServer拉取数据,项目本身已经做了多数据源,如果继续添加数据源就加大了系统的难度,所以就用jdbc连接数据库的方式连接外部数据源,比如SQL Server、Mysql、PostgreSQL、Oracle等都用JDBCTemplate连接,这里以SQLServer为例,下面看代码。

一、引入依赖jar包

  项目用的是Spring Boot,创建好项目以后,引入下面依赖:

<dependencies>
        
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

  二、Utils开发

  1、创建实体类,实现org.springframework.jdbc.core.RowMappe接口的mapRow(ResultSet rs, int rowNum)方法。

package com.johan.handler.task.iotSync.bean;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author: Johan
 * @date: 2021/10/18
 * @desc: IOT信息
 */
@Data
public class IotDG implements RowMapper {
    /**
     * 标签名称
     */
    private String tagName;

    /**
     * 标签描述
     */
    private String tagDesc;

    /**
     * 标签值
     */
    private Double tagVal;

    /**
     * 标签单位
     */
    private String tagUnit;

    /**
     * 类型,0 压力,1 流量
     */
    private String type;


    @Override
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        IotDG iotDG = new IotDG();
        iotDG.setTagName(rs.getString("TagName"));
        iotDG.setTagDesc(rs.getString("TagDesc"));
        iotDG.setTagVal(rs.getDouble("Value"));
        iotDG.setTagUnit(rs.getString("TagUnit"));
        iotDG.setType(rs.getString("Type"));

        return iotDG;
    }
}

  2、连接数据库,读取表数据

package com.johan.handler.task.iotSync.iotConvert;

import com.johan.handler.task.iotSync.bean.IotDG;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.sql.*;
import java.util.List;

/**
 * @author johan
 * @Description SQL server
 * @time 2021/10/18 18:26
 */
public class JDBCUtils {

    private static JdbcTemplate jdbcTemplate;
    static {
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String url ="jdbc:sqlserver://10.25.23.172:1433;databaseName=SCADA_Data_3040";//连接地址
        String user ="SLSL";//用户
        String password ="Admin@3040";//密码

        DriverManagerDataSource dataSource=new DriverManagerDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driver);
        dataSource.setUsername(user);
        dataSource.setPassword(password);

        jdbcTemplate=new JdbcTemplate(dataSource);
    }


    public static List<IotDG> listAll(int type){
        String sql = "SELECT * FROM RealData where Type=" + type;

//        System.out.println(iotDGList);
        return jdbcTemplate.query(sql,new IotDG());
    }


}

  3、测试

  方法是静态的,直接调用即可。

package com.johan.domain.iot;

import com.johan.handler.task.iotSync.bean.IotDG;
import com.johan.handler.task.iotSync.iotConvert.JDBCUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * @author johan
 * @time 2021/10/22 17:57
 */
@SpringBootTest
@Slf4j
public class IotDomainTest {

    @Test
    public void jdbcTest(){
        List<IotDG> iotDGList = JDBCUtils.listAll(0);
        System.out.println(iotDGList);
    }

}

  不只是SQLServer,我们常用的MySQL、Oracle等都可以用JdbcTemplate连接。

 

posted @ 2021-10-27 10:44  胜金  阅读(2082)  评论(0编辑  收藏  举报