【Mysql】第7篇--JdbcTemplate(jdbc模版)

JdbcTemplate(jdbc模版)

JdbcTemplate是Spring对JDBC的封装

使用步骤★

1.导入jar包

2.创建JdbcTemplate对象

public JdbcTemplate(DataSource dataSource)
在创建对象时,传入数据源(连接池对象),JdbcTemplate会自动从连接池对象中获取连接

3.编写sql

​ String sql = "insert into user values(null,?,?) ";

4.执行并返回结果

增删改:

public int update(final String sql,Object... args)
    用于执行INSERT、UPDATE、DELETE等DML语句
    sql: 要执行的sql语句
    args: sql执行时需要的参数 (可变参数的顺序 个数 类型要和sql语句中?的顺序 个数 类型)

查询:

public <T> T queryForObject(String sql, Class<T> requiredType, Object... args) ★★★
    //返回指定类型的一个对象
    sql: 要执行的sql
    requiredType: 返回的类型的字节码对象
    args: sql所需要的参数
    // 我们主要用该方法查询聚合函数返回的结果
    // 我们使用该方法查询一条记录并封装到实体中 BeanPropertyRowMapper<T>(T.class)

public Map<String, Object> queryForMap(String sql, Object... args)
    //将一条查询结果封装到map中返回 
    sql: 要执行的sql
    args: sql所需要的参数

List<Map<String, Object>> queryForList(String sql, Object... args)
	//将每条记录放map中,再将每个map放入list中
    sql: 要执行的sql
    args: sql所需要的参数

public <T> List<T> query(String sql, RowMapper<T> rowMapper)
    //返回一个List集合,List中存放的是RowMapper指定类型的数据
    返回多条记录: rowMapper(需要自己封装结果集)
    返回值: BeanPropertyRowMapper
  	JDBCTemplate的 query 方法用于执行SQL语句,简化JDBC的代码。同时还可以在SQL语句中使用 ? 占位,在query 方法的 Object... args 可变参数中传入对应的参数,可变参数可以传数组.

1.查询单对象结果的数据(queryForObject) ★

可以用于查询聚合函数

  /**
     * 需求: 查询id为 5 的商品的名称
     * api: queryForObject
     *      查询结过为一个对象
     *      参数1: sql语句
     *      参数2: 返回值的类型的字节码对象
     *      参数3: 可变参数
     */
    @Test
    public void select1(){
        //1.创建jdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select pname from product where id = ? ";
        //3.执行sql并返回结果集
        String pname = template.queryForObject(sql, String.class, 5);
        //4.除了结果集
        System.out.println(pname);
    }

    @Test
    /**
     * 需求: 查询商品表中数据的总数量
     * api: queryForObject
     */
    public void select2(){
        //1.创建jdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql ="select count(*) from product ";
        //3.执行sql并返回结果集
        int count = template.queryForObject(sql, int.class);
        //4.除了结果集
        System.out.println(count);
    }

2.查询一条记录(queryForMap)

多个值

 @Test
    /**
     * 需求: 查询id为5的商品信息
     * api: queryForMap
     *      将一条查询结果封装到map集合中
     *      Map<key,value>
     *          key(String): 字段名称
     *          value(Object): 值
     */
    public void select3(){
        //1.创建模版对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select * from product where id = ? ";
        //3.执行sql并返回结果集
        Map<String, Object> map = template.queryForMap(sql, 5);
        //4.处理
        System.out.println(map);
    }

3.查询多条记录并封装成List(queryForList)

/**
     * 需求: 查询商品表的所有数据信息
     * api: queryForList
     *      将多条查询结过封装到list集合中
     *      List<Map<key,value>>
     *          map: 每一条记录
     */
    @Test
    public void select4(){
        //1.创建模版对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select * from product ";
        //3.执行sql并返回结果集
        List<Map<String, Object>> list = template.queryForList(sql);
        //4.处理
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }
   /**
     * 需求: 查询所有商品的名称(select pname from product)
     * api: queryForList
     *      将多条查询结过封装到list集合中
     *      List<String>
     *
     */
    @Test
    public void select5(){
        //1.创建模版对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select pname from product ";
        //3.执行sql并返回结果集
        List<String> list = template.queryForList(sql, String.class);
        //4.处理
        for (String str : list) {
            System.out.println(str);
        }
    }

4.查询多条记录自行封装成实体(query)

List

​ new RowMapper(){}

 /**
     * 需求: 查询商品表的所有数据信息  List<Product>
     *     select * from product; ResultSet ---> next()
     * api: query
     *          rowMapper接口
     */
    @Test
    public void select6(){
        //1.创建模版对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select * from product ";
        //3.执行sql并返回结果集
        List<Product> list = template.query(sql, new RowMapper<Product>() {
            @Override
            //ResultSet: 一条记录
            //int i: 当前记录的索引
            public Product mapRow(ResultSet rs, int i) throws SQLException {
                //System.out.println(i);
                Product pro = new Product();
                pro.setId(rs.getInt(1));
                pro.setPname(rs.getString(2));
                pro.setPrice(rs.getDouble(3));
                return pro;
            }
        });
        //4.处理结果集
        for (Product pro : list) {
            System.out.println(pro);
        }
    }

5.查询多条记录自动封装成实体(query) ★★

List

​ new BeanPropertyRowMapper<>(Product.class)

/**
     * 需求: 查询商品表的所有数据信息  List<Product> ★★★
     *     select * from product; ResultSet ---> next()
     * api: query
     *          BeanPropertyRowMapper
     */
    @Test
    public void select7(){
        //1.创建模版对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select * from product ";
        //3.执行sql并返回结果集
        // 若向让模版帮我们自动封装成实体,实体中属性的名称要和数据库字段名称保持一致
        List<Product> list = template.query(sql,new BeanPropertyRowMapper<>(Product.class));
        //4.处理结果集
        for (Product pro : list) {
            System.out.println(pro);
        }
    }

6.查询一条记录并封装成实体 ★

/**
     * 需求: 查询id为 1 的商品信息,并封装到product实体中
     * api: queryForObject
     */
    @Test
    public void select8(){
        //1.创建JdbcTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //2.编写sql语句
        String sql = "select * from product where id=? ";
        //3.执行并返回结果集
        Product pro = template.queryForObject(sql, new BeanPropertyRowMapper<Product>(Product.class),1);
        //4.处理结果集
        System.out.println(pro);
    }

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙和龚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值