SpringBoot整合JDBCTemplate(day34)

1 学习目标

  1. 了解JDBCTemplate
  2. 重点掌握JDBCTemplate常用方法
  3. 重点掌握SpringBoot项目整个JDBCTemplate
  4. 重点掌握JDBCTemplate的CRUD操作

2 JDBCTemplate介绍

  • JDBCTemplate是Spring官方提供的,基于jdbc技术访问数据库的一个API对象。此对象基于模板方法模式,对JDBC操作进行了封装。我们可以基于此对象,以更简单的一个步骤操作数据库中的数据。
  • 我们只要在springboot工程中添加了spring-boot-starter-jdbc依赖,服务启动时,就会构建此对象,所以,你用的时候直接从spring容器去获取即可。

3 JDBCTemplate常用方法

  • update():执行DML语句。增、删、改语句

  • queryForMap() :查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

    注意:这个方法查询的结果集长度只能是1

  • queryForList():查询结果将结果集封装为list集合

    注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

  • query():查询结果,将结果封装为JavaBean对象

    query的参数:RowMapper

    一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

    new BeanPropertyRowMapper<类型>(类型.class)

  • queryForObject:查询结果,将结果封装为对象

    一般用于聚合函数的查询

4 SpringBoot整合JDBCTemplate

4.1 创建项目

  • 在JSDSecondStage项目下创建**JDBCTemplateDemo**模块,修改版本号为2.5.4

4.2 导入依赖

①**pom.xml**

<!--mysql数据库驱动依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--spring对象jdbc支持(此时会默认帮我们下载HiKariCP连接池,并且也会下载JDBCTemplate相关依赖)-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

4.3 修改配置文件

application.yml

#添加数据源的信息
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/hr?useUnicode=true&characterEncoding=utf8&serverTimeZone=Asia/Shanghai
    username: root
    password: root

4.4 入门案例

  • TestJDBCTemplate类复制到当前项目中

①**TestJDBCTemplate类中的test01方法**

@Autowired
private JdbcTemplate jdbcTemplate;

/**
 * JDBCTemplate入门案例
 */
@Test
public void test01() {
    //1.定义SQL
    String sql = "INSERT INTO jobs VALUES('TEST01','DATA01',10000,30000)";
    //2.调用update执行SQL
    int rows = jdbcTemplate.update(sql);
    System.out.println(rows > 0 ? "新增成功!" : "新增失败!!");
}

5 JDBCTemplate的CRUD操作

5.1 查询操作

5.1 查询jobs表中的所有记录

  • queryForList():查询结果将结果集封装为list集合

    注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

image-20221219144857517

①**TestJDBCTemplate类中的testQueryForList方法**

/**
 * 通过JDBCTemplate查询jobs表中的所有记录,并存储到List集合中
 */
@Test
public void testQueryForList() {
    //1.定义SQL
    String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs";
    //2.调用queryForList执行SQL
    List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
    //3.遍历记过,输出所有记录
    for (Map<String, Object> map : maps) {
        System.out.println(map);
    }
}

5.2 查询jobs表中指定job_id值的记录

  • queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

    注意:这个方法查询的结果集长度只能是1

①**TestJDBCTemplate类中的testQueryForMap方法**

/**
 * 通过JDBCTemplate查询jobs表中job_id的值为'TEST1'的记录,并将结果封装到Map中
 */
@Test
public void testQueryForMap() {
    //1.定义SQL
    String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs WHERE job_id= ?";
    //2.调用queryForMap执行SQL
    Map<String, Object> map = jdbcTemplate.queryForMap(sql, "TEST01");
    //3.输出结果
    System.out.println(map);
}

5.3 查询jobs表中jobs_id以S开头的记录,并将结果封装到指定的对象

  • query():查询结果,将结果封装为JavaBean对象

  • query的参数:rowMapper

    一般我们使用BeanPropertyRowMapper实现类。

    可以完成数据到JavaBean的自动封装 new BeanPropertyRowMapper<类型>(类型.class)

①**TestJDBCTemplate类中的testQuery方法**

/**
 * 通过JDBCTemplate查询jobs表中job_id以'S'开头的所有记录,并将结果封装到Jobs中
 */
@Test
public void testQuery() {
    //1.定义SQL
    String sql = "SELECT job_id,job_title,min_salary,max_salary FROM jobs WHERE job_id LIKE ?";
    //2.执行SQL语句,指定将结果集封装到对应的实体类中,并且传入对应的参数
    List<Jobs> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Jobs.class),"S%");
    //3.遍历记过,输出所有记录
    for (Jobs job : list) {
        System.out.println(job);
    }
}

②**Jobs**

package cn.tedu.pojo;

public class Jobs {
    //属性和表中的字段保持一致
    private String jobId;
    private String jobTitle;
    private Double minSalary;
    private Double maxSalary;

    public String getJobId() {
        return jobId;
    }

    public void setJobId(String jobId) {
        this.jobId = jobId;
    }

    public String getJobTitle() {
        return jobTitle;
    }

    public void setJobTitle(String jobTitle) {
        this.jobTitle = jobTitle;
    }

    public Double getMinSalary() {
        return minSalary;
    }

    public void setMinSalary(Double minSalary) {
        this.minSalary = minSalary;
    }

    public Double getMaxSalary() {
        return maxSalary;
    }

    public void setMaxSalary(Double maxSalary) {
        this.maxSalary = maxSalary;
    }

    @Override
    public String toString() {
        return "Jobs{" +
                "jobId='" + jobId + '\'' +
                ", jobTitle='" + jobTitle + '\'' +
                ", minSalary=" + minSalary +
                ", maxSalary=" + maxSalary +
                '}';
    }
}

5.4 查询jobs表的总记录数

  • queryForObject:查询结果,将结果封装为对象

    一般用于聚合函数的查询

①**TestJDBCTemplate类中的testQueryForObject方法**

/**
 * 通过JDBCTemplate查询jobs表总记录数
 */
@Test
public void testQueryForObject() {
    //1.定义SQL
    String sql = "SELECT COUNT(job_id) FROM jobs";
    //2.执行SQL语句,指定将结果集封装到对应的实体类中,并且传入对应的参数
    Long total = jdbcTemplate.queryForObject(sql, Long.class);
    //3.输出查询总记录数
    System.out.println(total);
}

5.2 增删改操作

  • update():执行DML语句。增、删、改语句

5.2.1 向jobs表中插入一条记录

①**TestJDBCTemplate类中的testAdd方法**

/**
 * 通过JDBCTemplate向jobs表中插入一条记录,其中:
 * job_id为 'TEST02',
 * job_title为 "DATA02"
 * min_salary为 2000
 * max_salary为 20000
 */
@Test
public void testAdd() {
    //1.定义SQL
    String sql = "INSERT INTO jobs (job_id,job_title,min_salary,max_salary) values (?,?,?,?)";
    //2.将参数以数组的形式封装
    Object[] args = {"TEST02", "DATA02", 2000, 20000};
    int rows = jdbcTemplate.update(sql, args);
    System.out.println(rows > 0 ? "新增成功!" : "新增失败!");
}

5.2.2 修改刚才添加的记录的部分数据

①**TestJDBCTemplate类中的testUpdate方法**

/**
 * 通过JDBCTemplate将jobs表中job_id为'TEST02'的记录的min_salary的值改为10000,max_salary的值改为40000
 */
@Test
void testUpdate() {
    //1.定义SQL
    String sql = "update jobs set min_salary = ?,max_salary = ? where job_id=? ";
    //2.将参数封装为数组
    Object[] args = {10000, 40000, "TEST02"};
    int rows = jdbcTemplate.update(sql, args);
    System.out.println(rows > 0 ? "修改成功!" : "修改失败!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值