Spring学习(十):JdbcTemplate操作数据库实现查询功能

简介: Spring学习(十):JdbcTemplate操作数据库实现查询功能

今天记录查询返回三种类型:

1、查询后返回一个值

2、查询后返回一个对象

3、查询后返回一个集合


1、查询后返回一个值

     

例如:查询表中有多少条记录,返回一个int


代码间的具体逻辑见上篇博客


实体类Book:

package demo.entity;
public class Book {
    private String userId;
    private String username;
    private String ustatus;
    public String getUserId() {
        return userId;
    }
    public String getUsername() {
        return username;
    }
    public String getUstatus() {
        return ustatus;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
}


BookDao:

package demo.dao;
        import demo.entity.Book;
public interface BookDao {
    //添加
    public void addBook(Book book);
    //查询记录数量
    int selectCount();
}


BookDaoImpl:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public int selectCount() {
        String sql = "select count(*) from t_book";
        /*
            第一个参数:sql
            第二个参数:返回类型的class
         */
        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
        return integer;
    }
}


BookService:

package demo.service;
import demo.dao.BookDao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
    //注入dao
    @Autowired
    private BookDao bookDao;
    //添加
    public void addBook(Book book){
        bookDao.addBook(book);
    }
    //查询表记录数
    public int findCount(){
        int count = bookDao.selectCount();
        return count;
    }
}


测试一下:

@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = context.getBean("bookService", BookService.class);
        int count = bookService.findCount();
        System.out.println(count);
    }


运行结果:

20210814143554953.png


数据库中确实只有一条记录:

20210814143614206.png


2、查询后返回一个对象

     

与之前返回值的代码是一个思路,只不过返回类型不同,调用的queryForObject()方法中传的参数不同,这里就只放UserDaoImpl的代码了:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //查询一条记录
    @Override
    public Book selectBook(String id) {
        String sql = "select * from t_book where user_id=? ";
        /*
            第一个参数:sql
            第二个参数:RowMapper,是一个接口,返回不同类型的数据
                        使用该接口的实现类完成数据的封装
            第三个参数:填充占位符的值
         */
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class),id);
        return book;
    }
}


测试时,传入id值为“1”,表示查询表中的第一条数据

测试结果:

20210814145541422.png


3、查询后返回一个集合

     

例如:返回表中所有的记录


BookDaoImpl:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //
    @Override
    public List<Book> selectAllBook() {
        String sql = "select * from t_book";
        List<Book> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
        return list;
    }
}


调用的是query()方法,传的参数和上面基本相同


测试结果:

20210814151350106.png


和数据库里的记录刚好对应20210814151411909.png

相关文章
|
10天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
36 9
|
16天前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
25 2
|
17天前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
17天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
85 1
|
18天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
192 2
|
19天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
117 1
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
163 2
|
10天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
22 2
 SpringBoot入门(7)- 配置热部署devtools工具