JdbcTemplate

JdbcTemplate简介

  • Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

 

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

 

Spring boot结合使用

 

1、在pom文件中添加依赖


<dependencies>

        <!--jdbc -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jdbc</artifactId>

        </dependency>



        <!-- mysql驱动 -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

        </dependency>

    </dependencies>

 

2、配置文件

# 数据库访问配置

#默认数据源mySql

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/modulesandutils?serverTimezone=GMT%2B8&useSSL=false

spring.datasource.username=root

spring.datasource.password=root

 

3、简单实现

 

在类中注入JdbcTemplate即可通过query方法获取数据

@Repository

public class UserDao {



    @Resource

    private JdbcTemplate jdbcTemplate;



    public void getUser(){



        String sql = "select * from  user";

        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);

    }

}

 

手动修改数据源

通过设置DriverManagerDataSource相关数据源参数获取对应的JdbcTemplate

public void changeDataSource(){

        //设置数据源

        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName("com.mysql.jdbc.Driver");

        dataSource.setUrl("jdbc:mysql://localhost:3306/rjtx_dw?serverTimezone=GMT%2B8&useSSL=false");

        dataSource.setUsername("root");

        dataSource.setPassword("root");



        //构建指定数据源的JdbcTemplate

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        String sql ="select * from s_user";

        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);



    }

多数据配置

多数据源配置也算是一个常见的开发需求,JdbcTemplate简单配置多数据源如下;

1、添加依赖

<!--druid连接池-->

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid-spring-boot-starter</artifactId>

            <version>1.1.10</version>

        </dependency>

2、配置多数据源

#多数据源的配置

#数据源1

spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.one.url=jdbc:mysql://localhost:3306/modulesandutils?serverTimezone=GMT%2B8&useSSL=false

spring.datasource.one.username=root

spring.datasource.one.password=root



#数据源2

spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.two.url=jdbc:mysql://localhost:3306/rjtx_dw?serverTimezone=GMT%2B8&useSSL=false

spring.datasource.two.username=root

spring.datasource.two.password=root

3、创建数据源配置类

通过one和two对数据源进行区分,改变配置的key后spring boot无法自动加载配置,需要自己配置一个DataSourceConfig,用来提供两个DataSource Bean,如下:

@Configuration

public class DataSourceConfig {



    /**配置数据源1*/

    @Bean

    @ConfigurationProperties(prefix = "spring.datasource.one")

    DataSource dsone(){

        return DruidDataSourceBuilder.create().build();

    }



    /**配置数据源2*/

    @Bean

    @ConfigurationProperties(prefix = "spring.datasource.two")

    DataSource dstwo(){

        return DruidDataSourceBuilder.create().build();

    }

}

其中@ConfigurationProperties是Spring Boot提供的类型安全的属性绑定,以第一个Bean为例,@ConfigurationProperties(prefix = "spring.datasource.one")表示使用spring.datasource.one前缀的数据库配置去创建一个DataSource

 

4、创建JdbcTemplate配置类

@Configuration

public class JdbcTemplateConfig {



    @Bean

    JdbcTemplate jdbcTemplateOne(@Qualifier("dsone")DataSource dsone){

        return new JdbcTemplate(dsone);

    }



    @Bean

    JdbcTemplate jdbcTemplatetwo(@Qualifier("dstwo")DataSource dstwo){

        return new JdbcTemplate(dstwo);

    }

}

由于上诉过中创建了两个DataSource,需要通过@Qualifier按名称加载

 

5、注入JdbcTemplate

方法一:

    @Autowired

    @Qualifier("jdbcTemplateOne")

    private JdbcTemplate jdbcTemplateOne;



方法二:

   @Resource(name = "jdbcTemplatetwo")

    private JdbcTemplate jdbcTemplateTwo;

将查询结果映射到实体类

通过BeanPropertyRowMapper实现映射,但要求查询字段与实体类属性名一致

public void demo3(){

        String sql1 = "select * from user";

        List<User> users = jdbcTemplateOne.query(sql1, BeanPropertyRowMapper.newInstance(User.class));

    }


 

 

参考:

来自 <https://www.cnblogs.com/caoyc/p/5630622.html>

来自 <https://segmentfault.com/a/1190000018535563?utm_source=tag-newest>

来自 <https://www.cnblogs.com/xiexy/p/8027982.html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值