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连接。