七十四、Spring与DAO操作 query()

举报
托马斯-酷涛 发表于 2022/05/25 23:54:46 2022/05/25
【摘要】 JdbcTemplate类中还提供了大量的query()方法来处理各种对数据库表的查询操作。其中,常用的几个query()方法如下表所示: 方法说明List query(String sql, RowMapper rowMapper)执行string类型参数提供的sQL语句,并通过RowMapper返回一个List类型的结果...

JdbcTemplate类中还提供了大量的query()方法来处理各种对数据库表的查询操作。其中,常用的几个query()方法如下表所示:

方法 说明
List query(String sql, RowMapper rowMapper) 执行string类型参数提供的sQL语句,并通过RowMapper返回一个List类型的结果。
List query(String sql,PreparedStatementSetter pss RowMapper rowMapper) 根据 string 类型参数提供的sQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中。
List query(String sql, Object[] args ,RowMapper rowMapper) 使用Object[]的值来设置SQL语句中的参数值,采用RowMapper回调方法可以直接返回List类型的数据。
queryForObject(String sql,RowMapper rowMapper,Object ...args) 将args参数绑定到sQL语句中,并通过RowMapper返回一个Object类型的单行记录。

queryForList( string sql,Object[] args,

class<T> elementType)

该方法可以返回多行数据的结果,但必须是返回列表,elementType参数返回的是List元素类型。

目录

对DB的查询操作

前景连接

案例实施

JDBC 模板对象是多例的


对DB的查询操作

        JDBC 模板的查询结果均是以对象的形式返回。根据返回对象类型的不同,可以将查询分为两类:简单对象查询,自定义对象查询。

  • 简单对象查询:查询结果为 String、Integer 等简单对象类型,或该类型做为元素的集合 类型,如 List等。
  • 自定义对象查询:查询结果为自定义类型,如 User 等,或该类型做为元素的集合类型, 如 List等。

前景连接

Spring与DAO操作 execute()icon-default.png?t=M1L8https://blog.csdn.net/m0_54925305/article/details/123149019?spm=1001.2014.3001.5501

Spring与DAO操作 update()icon-default.png?t=M1L8https://blog.csdn.net/m0_54925305/article/details/123169124?spm=1001.2014.3001.5501

        注:以下案例基于前置案例之上进行拓展query操作

案例实施

        1、数据库插入数据


  
  1. mysql> select * from account;
  2. Empty set (0.00 sec)
  3. mysql> insert into account(username,balance) value("孙悟空",100);
  4. Query OK, 1 row affected (0.04 sec)
  5. mysql> insert into account(username,balance) value("唐僧",1000.00);
  6. Query OK, 1 row affected (0.01 sec)
  7. mysql> insert into account(username,balance) value("猪八戒",2000.00);
  8. Query OK, 1 row affected (0.01 sec)
  9. mysql> insert into account(username,balance) value("沙僧",5000.00);
  10. Query OK, 1 row affected (0.00 sec)
  11. mysql> select * from account;
  12. +----+-----------+---------+
  13. | id | username | balance |
  14. +----+-----------+---------+
  15. | 1 | 孙悟空 | 100 |
  16. | 2 | 唐僧 | 1000 |
  17. | 3 | 猪八戒 | 2000 |
  18. | 4 | 沙僧 | 5000 |
  19. +----+-----------+---------+
  20. 4 rows in set (0.00 sec)

        2、AccountDao中添加查询方法


  
  1. // 通过id查询
  2. public Account findAccountByid(int id);
  3. // 查询所有账户
  4. public List<Account> finfAllccount();

        3、AccountDaoImpl中添加查询方法


  
  1. // 查询账户信息
  2. @Override
  3. public Account findAccountByid(int id) {
  4. // 定义SQL语句
  5. String sql = "select * from account where id=?";
  6. // 创建一个新的rowMapper对象
  7. RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
  8. // 将id 绑定到SQL语句中,通过RowMapper返回一个Object类型的当行记录
  9. return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
  10. }
  11. // 查询所有账户信息
  12. @Override
  13. public List<Account> finfAllccount() {
  14. // 定义SQL
  15. String sql = "select * from account";
  16. // 创建一个新的rowMapper对象
  17. RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
  18. // 执行静态的SQL查询,通过RowMapper返回结果
  19. return this.jdbcTemplate.query(sql, rowMapper);
  20. }

        4、创建测试类JdbcTemplateTest_delete


  
  1. package com.Example.jdbc;
  2. import java.util.List;
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. public class JdbcTemplateTest_delete {
  7. public static void main(String[] args) {
  8. // 加载配置文件
  9. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  10. // 获取AccountDao实例
  11. AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
  12. // 执行deleteAccount()方法,并获取返回结果
  13. int num = accountDao.deleteAccount(1);
  14. if (num > 0) {
  15. System.out.println("成功删除了" + num + "条数据!");
  16. } else {
  17. System.out.println("删除操作执行失败!");
  18. }
  19. }
  20. @Test
  21. public void findAccountByIdTest() {
  22. // 加载配置文件
  23. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  24. // 获取AccountDao实例
  25. AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
  26. // 执行findAccountById()方法
  27. Account account = accountDao.findAccountById(1);
  28. System.out.println(account);
  29. }
  30. @Test
  31. public void findAllAccountTest() {
  32. // 加载配置文件
  33. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
  34. // 获取AccountDao实例
  35. AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
  36. // 执行findAllAccount()方法,获取Account对象的集合
  37. List<Account> account = accountDao.findAllAccount();
  38. // 循环输出集合中的对象
  39. for (Account act : account) {
  40. System.out.println(act);
  41. }
  42. }
  43. }

        5、查找单个数据,执行findAccountByIdTest方法

        6、查找全部数据,执行findAllAccountTest方法

JDBC 模板对象多例

        JdbcTemplate 对象是多例的,即系统会为每一个使用模板对象的线程(方法)创建一个 JdbcTemplate 实例,并且在该线程(方法)结束时,自动释放 JdbcTemplate 实例。所以在每次使用 JdbcTemplate 对象时,都需要通过 getJdbcTemplate()方法来获取。

文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/123177719

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。