您当前的位置: 首页 >  spring

liaowenxiong

暂无认证

  • 1浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring JDBC的学习

liaowenxiong 发布时间:2021-11-19 23:06:23 ,浏览量:1

文章目录
  • 介绍
  • 使用步骤
  • 常用方法
  • 示例代码

介绍

所谓 Spring JDBC,是 Spring 框架对 JDBC 的简单封装。提供了一个 JdbcTemplate 对象简化 JDBC 的开发。

使用步骤

步骤: 1.导入相关的 jar 包 在这里插入图片描述

2.创建 JdbcTemplate 对象,依赖于数据源 DataSource

JdbcTemplate template = new JdbcTemplate(ds);

3.调用 JdbcTemplate 的方法来完成 CRUD 的操作

常用方法

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

2.queryForMap() :将结果集封装为Map集合返回,并且查询结果只能返回一条记录,即结果集的长度只能是 1,没有记录返回或者返回多条记录都会报错。 查询的数据记录的列名作为 key,列的值作为 value,保存在 Map 集合中

3.queryForList():将结果集封装为List集合返回,可以查询一条或者多条记录。一条记录封装成一个 Map 对象,再把 Map 对象保存在 List 集合对象中

4.query():将结果封装为JavaBean对象集合。将每条记录封装成 JavaBean 对象,然后装载入集合中,并返回这个集合。

query的参数类型:RowMapper 一般我们使用 BeanPropertyRowMapper 实现类。 可以完成数据到 JavaBean 对象集合的自动封装

new BeanPropertyRowMapper(类型.class)

5.queryForObject :将结果封装为对象,一般用于聚合函数的查询

示例代码
package priv.lwx.javaex.jdbctemplate;

import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import priv.lwx.javaex.datasource.util.JdbcUtils;
import priv.lwx.javaex.jdbctemplate.entity.Emp;

import java.math.BigDecimal;
import java.sql.Date;
import java.util.List;
import java.util.Map;

/**
 * 使用单元测工具Junit来测试JdbcTemplate的CRUD
 *
 * @author liaowenxiong
 * @date 2021/11/18 22:55
 */

public class JdbcTemplateDemo02 {
    // 1.获取JdbcTemplate对象
    JdbcTemplate jtpt = new JdbcTemplate(JdbcUtils.getDataSource());

    /**
     * 更新数据
     *
     * @author liaowenxiong
     * @date 2021/11/19 10:56
     */
    @Test
    public void test1() {
        // 2.定义SQL语句
        String sql = "update Emp set salary = 10000 where id = 1";
        // 3.执行SQL语句
        int i = jtpt.update(sql);
    }

    /**
     * 插入数据
     *
     * @author liaowenxiong
     * @date 2021/11/19 10:56
     */
    @Test
    public void test2() {
        // 2.定义SQL语句
        String sql = "INSERT INTO user(id, account_name, PASSWORD) values (?,?,?)";
        // 3.执行SQL语句
        int i = jtpt.update(sql, null, "wujie", "567");
        System.out.println(i);
    }

    /**
     * 查询某条记录
     *
     * @author liaowenxiong
     * @date 2021/11/19 10:52
     */
    @Test
    public void test3() {
        // 定义SQL语句
        String sql = "select * from emp where id = ?";
        // 执行SQL语句
        Map map = jtpt.queryForMap(sql, 1);
        System.out.println(map);
    }

    /**
     * 查询多条记录,返回一个List集合,集合中存放每条记录对应的Map对象
     *
     * @author liaowenxiong
     * @date 2021/11/19 10:52
     */
    @Test
    public void test4() {
        // 定义SQL语句
        String sql = "select * from emp";
        // 执行SQL语句
        List list = jtpt.queryForList(sql);
        for (Map map : list) {
            System.out.println(map);
        }
        // System.out.println(list);
    }

    /**
     * 查询多条记录,将每条记录映射成JavaBean对象,并将JavaBean对象装载到List中,返回该List
     * @author liaowenxiong
     * @date 2021/11/19 23:00
     */
    @Test
    public void test5() {
        // 定义SQL语句
        String sql = "select * from emp";
        // 执行SQL语句
        List emps = jtpt.query(sql, (rs, i) ->{
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int job_id = rs.getInt("job_id");
                int mgr = rs.getInt("mgr");
                Date hiredate = rs.getDate("hiredate");
                BigDecimal salary = rs.getBigDecimal("salary");
                BigDecimal bonus = rs.getBigDecimal("bonus");
                int dept_id = rs.getInt("dept_id");
                Emp emp = new Emp();
                emp.setId(id);
                emp.setName(name);
                emp.setJob_id(job_id);
                emp.setMgr(mgr);
                emp.setHiredate(hiredate);
                emp.setSalary(salary);
                emp.setBonus(bonus);
                emp.setDept_id(dept_id);
                return emp;
        });

        for (Emp emp : emps) {
            System.out.println(emp);
        }
    }

    /**
     * 使用RowMapper的实现类BeanPropertyRowMapper完成自动封装
     * @author liaowenxiong
     * @date 2021/11/19 22:53
     */
    @Test
    public void test6() {
        // 定义SQL语句
        String sql = "select * from emp";
        // 执行SQL语句
        List emps = jtpt.query(sql, new BeanPropertyRowMapper(Emp.class));
        for (Emp emp : emps) {
            System.out.println(emp);
        }
    }

    /**
     * 查询emp表中总的记录数
     * @author liaowenxiong
     * @date 2021/11/19 22:59
     */
    @Test
    public void test7() {
        // 定义SQL语句
        String sql = "select count(id) from emp";
        // 执行SQL语句
        // 希望将查询结果封装成什么类型,就传递什么类型的Class对象
        Integer i = jtpt.queryForObject(sql, Integer.class);
        System.out.println(i);
    }


}
关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0407s