JDBCTemplate常用API

在这里插入图片描述

package com.itheima.demo01_jdbctemplate;

import com.itheima.pojo.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.Map;

//需求: 测试JdbcTemplate操作表数据: 查询功能.

/*
    JdbcTemplate查询数据涉及到的API:
        1. queryForObject(sql ,返回数据类型的字节码对象, 实际传递的参数);  查询指定的字段
        2. queryForObject(sql, BeanPropertyRowMapper, 实际传递的参数)      查询对象
        3. queryForMap(sql , 实际传递的参数)                               返回的是一个Map  , map对象中存放的是对象的数据,  以键值对方式存储
        4. queryForList(sql , 实际参数)                                    返回的是List<Map<String,Object>>  查询一个List的结果,但是list中有map
        5. query(sql,BeanPropertyRowMapper)                                查询一个List<POJO对象>
    我们要完成的案例:
        1. 根据根据id查询学生name
        2. 查询一共有多少个学生数
        3. 查询id为7 的student对象,返回Student
        4. 查询id为8的student对象返回map
        5. 查询所有的student对象 返回List<Map<String ,Object>>  queryForList
        6. 如果只想查询结果放到List<Bean>  query
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:bean.xml")
public class Demo03_JdbcTemplate {
    //1. 定义JdbcTemplate类的引用, 通过自动装配给其赋值.
    @Autowired
    private JdbcTemplate jdbcTemplate;

    //2. 需求: 根据根据id查询学生name
    @Test
    public void method01() {
        //定义sql语句
        String sql = "select sname from stu where sid = ? ;";
        //执行SQL语句, 获取结果
        //参数1: 要执行的SQL语句, 参数2: 返回值的类型,  参数3: 执行SQL语句所需的参数
        String sname = jdbcTemplate.queryForObject(sql, String.class, 6);       //类似于DBUtils中的 ScalarHandler
        //操作结果集
        System.out.println(sname);
    }

    //3. 需求: 查询一共有多少个学生数
    @Test
    public void method03() {
        //定义sql语句
        String sql = "select count(*) from stu;";
        //执行SQL语句, 获取结果
        //参数1: 要执行的SQL语句, 参数2: 返回值的类型,  参数3: 执行SQL语句所需的参数
        int num = jdbcTemplate.queryForObject(sql, int.class);       //类似于DBUtils中的 ScalarHandler
        //操作结果集
        System.out.println(num);
    }

    //4. 需求: 查询id为5 的student对象,返回Student
    @Test
    public void method04() {
        //定义sql语句
        String sql = "select * from stu where sid = ?;";
        //执行SQL语句, 获取结果
        //参数1: 要执行的SQL语句, 参数2: 返回值的类型,  参数3: 执行SQL语句所需的参数
        Student stu = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Student>(Student.class),5);       //类似于DBUtils中的 BeanHandler
        //操作结果集
        System.out.println(stu);
    }

    //5. 需求: 查询id为5的student对象返回map
    @Test
    public void method05() {
        //定义sql语句
        String sql = "select * from stu where sid = ?;";
        //执行SQL语句, 获取结果
        Map<String, Object> map = jdbcTemplate.queryForMap(sql, 5);     //类似于DBUtils#MapHandler
        //操作结果集
        System.out.println(map);
    }

    //6. 需求: 查询所有的student对象 返回List<Map<String ,Object>>  queryForList
    @Test
    public void method06() {
        //定义sql语句
        String sql = "select * from stu;";
        //执行SQL语句, 获取结果
        List< Map<String, Object>> list = jdbcTemplate.queryForList(sql);     //类似于DBUtils#MapListHandler
        //操作结果集
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }

    //7. 需求:  如果只想查询结果放到List<Bean>  query
    @Test
    public void method07() {
        //定义sql语句
        String sql = "select * from stu;";
        //执行SQL语句, 获取结果
        List<Student> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Student>(Student.class));     //类似于DBUtils#BeanListHandler
        //操作结果集
        for (Student s : list) {
            System.out.println(s);
        }
    }
}

在使用`@Transactional`注解中,可以使用`jdbctemplate`进行数据库操作。`jdbctemplate`是Spring框架提供的一个用于简化JDBC操作的工具类。它封装了JDBC的繁琐操作,提供了便捷的API,使得数据库操作更加方便和可读性更高。 通过在`@Transactional`注解中使用`jdbctemplate`,可以在事务中执行数据库操作。例如,可以在方法中使用`jdbctemplate`的`update()`方法执行插入、更新或删除操作,或者使用`query()`方法执行查询操作。 下面是一个示例代码片段,展示了在`@Transactional`中使用`jdbctemplate`的例子: ``` @Transactional public void saveData() { String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; jdbcTemplate.update(sql, value1, value2); } @Transactional public void getData() { String sql = "SELECT * FROM table_name"; List<Map<String, Object>> result = jdbcTemplate.queryForList(sql); // 处理查询结果 } ``` 在上面的代码片段中,`@Transactional`注解表示该方法在一个事务中执行。使用`jdbctemplate`的`update()`方法执行了插入操作,同时使用`jdbctemplate`的`query()`方法执行了查询操作。 通过在`@Transactional`注解中使用`jdbctemplate`,可以确保在事务中执行数据库操作,当出现异常时,会回滚事务,保持数据的一致性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Spring】@Transactional常用参数使用示例、以及常见的一些坑](https://blog.csdn.net/qq_38397501/article/details/126141629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值