Spring Boot数据库操作之JdbcTemplate

1,850 阅读2分钟

在Spring Boot中,数据持久化有好几种方案,常见的有JdbcTemplate、MyBatis,JPA,在这些方案中,最简单的就是Spring自带的JdbcTemplate。JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,本来说说这个东西的使用。

Maveny依赖

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

application.properties配置文件

#数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/gpsmanager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


JdbcTemplate主要提供五类方法

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  • query方法及queryForXXX方法:用于执行查询相关语句;

  • call方法:用于执行存储过程、函数相关语句。

JdbcTemplate示例代码参考


package com.example.jdbctemplate;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Repository
public class JDBCTemplateDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * JdbcTemplate基本使用示例
     */
    public void jdbcTemplateTest(){
        //1、通过update插入数据
        String sql="insert into user (name,sex,account,password,tm,status) values (?,?,?,?,?,?)";
        jdbcTemplate.update(sql, new Object[]{"林晓月","女","linxiaoyue","123456",new Date(),-1});

        //2、通过update修改数据
        sql="update user set password=?,status=? where name='林晓月'";
        jdbcTemplate.update(sql,new Object[]{"111111",0});

        //3、批量插入
        sql="insert into user (name,sex,account,password,tm,status) values (?,?,?,?,?,?)";
        List<Object[]> batchArgs=new ArrayList<>();
        batchArgs.add(new Object[]{"程潇","女","chengxiao","123456",new Date(),0});
        batchArgs.add(new Object[]{"赵正涛","男","zhaozhengtao","123456",new Date(),0});
        batchArgs.add(new Object[]{"李志强","男","lizhiqiang","123456",new Date(),0});
        jdbcTemplate.batchUpdate(sql, batchArgs);

        //4、删除数据
        sql="delete from user where name=?";
        jdbcTemplate.update(sql,"李志强");

        //5、查单条数据,返回Map结构
        Map<String,Object> map=jdbcTemplate.queryForMap("select * from user where name=?","林晓月");

        //6、查多条数据,返回List<Map>
        List<Map<String,Object>> maps=jdbcTemplate.queryForList("select * from user");

        //创建实体映射对象,使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名
        RowMapper<User> rowMapper=new BeanPropertyRowMapper<>(User.class);

        //7、查单条数据,返回实体对象
        User user=jdbcTemplate.queryForObject("select * from user where name=?",rowMapper,"林晓月");

        //8、查多条数据,返回实体对象集合
        List<User> users=jdbcTemplate.query("select  * from user",rowMapper);

        //9、/获取某个记录某列或者count、avg、sum等函数返回唯一值
        sql="select count(*) from user";
        int count= jdbcTemplate.queryForObject(sql, Integer.class);

    }

}